emqtt集群启动失败

emqtt版本:5.7.2

情况是这样,3台节点;在集群中将1强制踢掉,随后1删除数据并重新启动后再次加入到集群,发现无法启动报错如下:

Kernel pid terminated (application_controller) ("{application_start_failure,emqx,{bad_return,{{emqx_app,start,[normal,]},{‘EXIT’,{{badmatch,{error,{{shutdown,{failed_to_start_child,shard_allocator,{badarg,[{persistent_term,get,[emqx_ds_builtin_site],[{error_info,#{module => erl_erts_errors}}]},{emqx_ds_replication_layer_meta,my_shards,1,[{file,"emqx_ds_replication_layer_meta.erl"},{line,259}]},{emqx_ds_replication_shard_allocator,allocate_shards,1,[{file,"emqx_ds_replication_shard_allocator.erl"},{line,418}]},{emqx_ds_replication_shard_allocator,handle_allocate_shards,1,[{file,"emqx_ds_replication_shard_allocator.erl"},{line,143}]},{emqx_ds_replication_shard_allocator,init,1,[{file,"emqx_ds_replication_shard_allocator.erl"},{line,102}]},{gen_server,init_it,2,[{file,"gen_server.erl"},{line,980}]},{gen_server,init_it,6,[{file,"gen_server.erl"},{line,935}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,241}]}]}}},{child,undefined,messages,{emqx_ds_builtin_db_sup,start_db,[messages,#{s

1删除数据

有启用 durable session 功能么?
“节点1删除数据” 是怎么操作的,data 目录整个删除了么,还是只是删除了其中一部分

看报错信息是 data 目录中的 durable session 相关的文件有点问题

有启动durable session,是整个data目录都删掉了

检查下 data 目录下面有没有这个文件
emqx_ds_builtin_site.eterm

有的

再重启一下试试,看了下代码 有可能 是这里的读取顺序不太对,但还没能复现出来。

重启下也不行,还是报这个错

这个问题确实挺奇怪的,我新搞了一个D节点,开启durable_sessions ,同时在集群中再强制踢掉D,删掉D的data目录,再重启D后加入到集群发现就没问题

会不会和我之前压测过和修改一些鉴权有关?

还有就是开源版现在应该不限制集群节点数量了吧,我尝试用5个节点组成集群发现是没问题的

  • 如果改过 etc 目录下的 配置文件或者用环境变量改过配置,是有可能的。
  • 5.8 之后限制为 3 节点无主集群

etc也被我删了,还有个问题是5.7.2是有主集群吗?

您好,再麻烦一下您,我看到在emqx目录下有下列文件,报错如下

@JimMoen 我找到问题了,其实是我做了一个违规的操作;A、B、C三个节点,我先去B下将emqx的安装目录文件全部删了,比如bin、lib等包括data,但是data部分文件没删;这个时候去C下用命令将B强制踢出去,随后在B下重新解压tar.gz包再次启动加入集群就会引发这个问题 :joy: