一、问题描述
服务与中间件都部署在容器内,中间件重起服务后连接不上,需要重启中间件与服务,才可以正常访问。
zk3个节点,myid最小的节点启动后不能加加入集群。
现像一
JMX enabled by default
Using config: /data/zookeeper-3.4.3/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
现象二
2019-11-19 09:23:48,014 [myid:1] - INFO [QuorumPeer[myid=1]/0.0.0.0:2181:FastLeaderElection@764] - Notification time out: 400
2019-11-19 09:23:48,014 [myid:1] - INFO [WorkerReceiver[myid=1]:FastLeaderElection@542] - Notification: 1 (n.leader), 0x0 (n.zxid), 0x6 (n.round), LOOKING (n.state), 1 (n.sid), 0x0 (n.peerEPoch), LOOKING (my state)
2019-11-19 09:23:48,016 [myid:1] - INFO [WorkerReceiver[myid=1]:FastLeaderElection@542] - Notification: 3 (n.leader), 0x0 (n.zxid), 0x5 (n.round), LEADING (n.state), 3 (n.sid), 0x0 (n.peerEPoch), LOOKING (my state)
2019-11-19 09:23:48,016 [myid:1] - INFO [WorkerReceiver[myid=1]:FastLeaderElection@542] - Notification: 2 (n.leader), 0x0 (n.zxid), 0x4 (n.round), LEADING (n.state), 2 (n.sid), 0x0 (n.peerEPoch), LOOKING (my state)
二、复现步骤
1、挂掉NFS服务节点【未复现】
验证结果:node上的zk、redis、服务可以正常恢复。
2、stop hab服务,kill zk进程,重启hab服务【已复现】
前置条件:hab在A节点
验证结果:
1、A节点的zk服务启动异常:Error contacting service. It is probably not running(myid正常),B、C节点的zk、redis、服务节点启动正常。
2、日志大量报错:Have smaller server identifier, so dropping the connection.
三、问题分析
1、根据复现获得的异常日志,经排查是zookeeper低版本bug。
2、项目A zookeeper镜像版本3.4.3,此问题官方修复版本在3.4.4和3.5.0(点击查看详见官方文档)。
四、解决方案
4.1 临时解决方法
1、进入zookeeper部署的容器,
2、删除/data/zookeeper/data下所有内容
3、kill所有节点 zookeeper进程,让zookeeper重新启动。
4.2 升级zookeeper版本
将zookeeper版本从3.4.3 升级到3.4.12验证正常。
5 、结论
在容器环境下zookeeper版本必须>=3.4.4