环境
- EMQX 版本:4.3.22
- 操作系统版本:CENTOS7
重现此问题的步骤
这个时间点没有连接,反而进了takeover
这个时间点有连接了,反而不进takeover了。
数据库里面存的消息
没理解12图的对比,下的表述
”这个时间点没有连接,反而进了takeover, 这个时间点有连接了,反而不进takeover了。“
从第一张图的来看,这个客户端ID连接了俩次,第一次的外网下客户端的端口是 31141,新的链接的端口是 31264,但他们 Clientid 相同,所以新的把旧的踢下线了。才有你图1的2,3,4行日志打印说 这个端口的客户端被takeover断开了。
这是符合预期的
6:37:43 这个时间点应该是没有连接的吧,因为31141已经在14:37:10 (UTC+8,时间UTC时间应该是6:37:10)keepalive timeout了。
所以这是我的第一个问题,为什么 6:37:43 这个时间点会进takeover
到了6:37:45这个时间点有个连接连上来,按我理解,这时候6:37:43连上了的连接不是已经存在了吗?这时候不是应该进入takeover么?但是看日志好像他直接进入连接。
你的意思是 6:37:45 这个连接时导致 6:37:43 这个takeover日志的原因?不可能吧,差2秒钟呢,中间除了PINGREQ和PINGRESP就没有其他日志了
第一张图,第一行日志。
RECV CONNECT(...
就表示 EMQX 收到了新的链接请求了,一旦认证成功就会进行takeover等流程。具体你可以根据客户端的端口号,来区分那个日志是那条链接的。例如下面这俩个示例:
JBVT***@109.38.135.114:31141
JBVT***@109.38.135.114:31264
虽然 ClientID 相同,但是是分别来自 31141 和 31264 这俩个端口的不同的链接进程
好的,明白你意思。
但是我继续往下看日志之后发现一个很有趣的情况
2024-08-24T06:37:59 过了十几秒钟,客户端又连了一个上来,这时候服务器没有进行takeover的过程,31264 和 31141 都没有心跳了,但是我没有收到 31264 offline的消息
理论上,只要是同名的客户端都会踢出的。
可以检查下历史的日志看看这里是否在 31265 上来之前,就断开了。
没有断开的日志,这段时间这个clientid只有这些日志了,剩下的都是心跳了。