emqx 5.1.6 崩溃故障

K8S EMQX运行一段时间突发故障,看容器状态是RunContainerError 故障节点为数据节点 复制节点工作正常 进数据节点看输出日志
2025-10-17T01:14:34.739579+00:00 [error] crasher: initial call: emqx_delayed:init/1, pid: <0.2990.0>, registered_name: emqx_delayed, error: {badarg,[{ets,internal_delete_all,[emqx_delayed,undefined],[{error_info,#{cause => id,module => erl_stdlib_errors}}]},{ets,delete_all_objects,1,[{file,“ets.erl”},{line,126}]},{emqx_delayed,do_load_or_unload,2,[{file,“emqx_delayed.erl”},{line,420}]},{gen_server,try_terminate,3,[{file,“gen_server.erl”},{line,1161}]},{gen_server,terminate,10,[{file,“gen_server.erl”},{line,1351}]},{proc_lib,wake_up,3,[{file,“proc_lib.erl”},{line,250}]}]}, ancestors: [emqx_modules_sup,<0.2975.0>], message_queue_len: 0, messages: , links: [<0.2976.0>], dictionary: , trap_exit: true, status: running, heap_size: 6772, stack_size: 28, reductions: 17097597; neighbours:
2025-10-17T01:14:34.739994+00:00 [error] Supervisor: {local,emqx_modules_sup}. Context: shutdown_error. Reason: {badarg,[{ets,internal_delete_all,[emqx_delayed,undefined],[{error_info,#{cause => id,module => erl_stdlib_errors}}]},{ets,delete_all_objects,1,[{file,“ets.erl”},{line,126}]},{emqx_delayed,do_load_or_unload,2,[{file,“emqx_delayed.erl”},{line,420}]},{gen_server,try_terminate,3,[{file,“gen_server.erl”},{line,1161}]},{gen_server,terminate,10,[{file,“gen_server.erl”},{line,1351}]},{proc_lib,wake_up,3,[{file,“proc_lib.erl”},{line,250}]}]}. Offender: id=emqx_delayed,pid=<0.2990.0>.
2025-10-17T01:14:34.743028+00:00 [info] msg: stopping_mysql_connector, mfa: emqx_mysql:on_stop/2, line: 147, connector: <<“emqx_authn_mysql:104”>>
2025-10-17T01:14:34.744726+00:00 [info] msg: stop_ecpool_ok, mfa: emqx_resource_pool:stop/1, line: 58, pool_name: <<“emqx_authn_mysql:104”>>
2025-10-17T01:14:34.744914+00:00 [error] msg: emqx_alarm_safe_call_exception, mfa: emqx_alarm:safe_call/1, line: 492, reason: {noproc,{gen_server,call,[emqx_alarm,{deactivate_alarm,<<“emqx_authn_mysql:104”>>,no_details,<<>>}]}}, stacktrace: [{gen_server,call,2,[{file,“gen_server.erl”},{line,370}]},{emqx_alarm,safe_call,1,[{file,“emqx_alarm.erl”},{line,482}]},{emqx_resource_manager,stop_resource,1,[{file,“emqx_resource_manager.erl”},{line,518}]},{emqx_resource_manager,terminate,3,[{file,“emqx_resource_manager.erl”},{line,331}]},{gen_statem,terminate,7,[{file,“gen_statem.erl”},{line,2602}]},{proc_lib,init_p_do_apply,3,[{file,“proc_lib.erl”},{line,240}]}]
{“Kernel pid terminated”,application_controller,“{application_terminated,emqx,shutdown}”}
Kernel pid terminated (application_controller) ({application_terminated,emqx,shutdown})

Crash dump is being written to: /opt/emqx/log/erl_crash.dump…done
经过对挂载目录里mnesia清理 重建容器后恢复正常 疑似是一个bug 还是什么问题会影响到 升级版本对这个问题会有一定优化修复么

这个错表明delay模块没启动成功,但是没说原因,得看前面的完整日志

因为看到故障后k8s尝试重启这个容器,容器内三个core节点上输出的都是这样写的,然后恢复集群操作也是我说的清理那个m开头的目录后,三台节点挂载都处理后就恢复了。

这个 PR 修复了启动时 module 加载报错的情况。

那我后续将版本从5.1.6直接升级为修复版本5.6.0 这样就可以避免模块加载问题导致集群故障是吧?
可以直接替换镜像 升级到这个版本对吗

这己经是大版本升级了(不能保证这样能用),先在测试环境验证功能,再去升级。
ps 推荐都升级了 就直接用开源最高版本就行了5.8.8,但是这个最高版本不支持replicant节点,全是 core。自己看changelog应该是哪个版本吧
最重要的是测试。测试 没人能保证你的功能正常.只有自己测了才知道哈

好的大佬,大概具体升级过程明确了:
先本地验证测试–>公司测试环境–>生产环境
理想情况下升级后集群是可以正常直接使用,配置无丢失,短暂影响业务~
我可以这样理解吧

现在已知问题是:
版本更新后,配置都在,但是emqx客户端验证授权使用mysql作为验证机制那个配置是用的默认配置没有用我之前修改后的,这个是怎么约束好些