集群脑裂后通过重启其中一个节点后,集群恢复,但是未重启的节点的消息无法同步到客户端一直连着的节点

环境信息

  • EMQ X 版本:4.3.10
  • 操作系统及版本:
  • 其他

问题描述

四台服务器部署的emqx集群,由于网络原因造成脑裂(节点1,节点2)——节点3——节点4,分裂为3组,重启节点3后集群恢复。
微服务在集群脑裂期间一直连接的是节点1,集群恢复后,发送到节点4的消息,在节点1无法接收到,但是发送一个新的主题可以接收到:
例:原来节点4一直有发送主题为/v1/test/aa主题的消息,微服务订阅此消息
集群恢复后,微服务无法接收到/v1/test/aa的消息,mqtt工具连接节点1也无法接收到此消息,连接节点2,节点3可以接收到。
但是通过节点1订阅/v1/+/aa可以接收到对应/v1/test/aa主题的消息,停止订阅/v1/+/aa后仍旧无法接受到/v1/test/aa主题的消息。
重启节点4后恢复正常。

配置文件及日志

必须重新加入集群才可以消息同步呀。节点4脑裂之后认为集群里只有自己,肯定不会向别的节点发送消息。重新加入以后发现了其他的节点才开始同步,属于正常现象。

脑裂的处理方式就是选择一个部分作为中心节点,剩余节点逐个加入作为新节点