环境
- EMQX 版本:5.6.1
- 操作系统版本:使用的是docker
重现此问题的步骤
不知道如何复现
今天我们的测试环境发现了mqtt节点无法接受消息现象,我查看了emqx的告警发现了partition错误
这个环境一共只有2台节点emqx1和emqx2
订阅模式是通过分组订阅的,主题类似$share/ctms/device/+/monitor", qos: 1
在partition错误之前,该订阅客户端一直正常工作,可以正常收消息,发生错误后此客户端显示在线状态,但是看log只有心跳log(图2),已经没有收到消息的log
我再去确认集群状态,两个节点都是正常状态
我再尝试把订阅客户端踢下线再连线就恢复正常了
我这里有几个疑问:
1:为什么会出现partition错误,如何预防或者监控
2:节点个数是否不推荐只有2个node,要么3个节点,方便选leader?
3:如果出现partition错误后即使集群显示状态正常,我也应该强制重启所有节点吗?否则就会出现我目前的情况:之前的连接无法收消息(消息也丢了),只能重连恢复
预期行为
2个节点的集群自动从partition错误中恢复后,不影响现有连接的客户端消息收发
实际行为
emqx不会向之前已连接的客户端发消息,并丢失消息,需要客户端重连后才能继续订阅到消息