zookeeper运维问题总结

工做中遇到如下问题:
一、一台zk节点失联后,重启一直没法加入zk集群中,致使没法对外提供服务
二、zk的log和快照占大量空间
三、客户端链接有失败有成功
四、zk客户端偶尔会有失败链接
五、报错:smaller server identifier,so dropping服务器

以上问题生产环境中常常会遇到网络

1. zk没法加入zk集群

现象: 使用zkCli.sh没法链接成功该zk节点
日志: 首先想到的是将该节点restart, 但问题依旧, 故查看zk的log, 有大量的以下日志并发

2018-07-18 17:31:12,015 - INFO  [WorkerReceiver Thread:FastLeaderElection@496] - Notification: 1 (n.leader), 77309411648 (n.zxid), 1 (n.round), LOOKING (n.state), 1 (n.sid), LOOKING (my state)
2018-07-18 17:31:12,016 - INFO  [WorkerReceiver Thread:FastLeaderElection@496] - Notification: 3 (n.leader), 73014444480 (n.zxid), 831 (n.round), LEADING (n.state), 3 (n.sid), LOOKING (my state)
2018-07-18 17:31:12,017 - INFO  [WorkerReceiver Thread:FastLeaderElection@496] - Notification: 3 (n.leader), 77309411648 (n.zxid), 832 (n.round), FOLLOWING (n.state), 2 (n.sid), LOOKING (my state)
2018-07-18 17:31:15,219 - INFO  [QuorumPeer:/0.0.0.0:2181:FastLeaderElection@697] - Notification time out: 6400

解决办法:
这个是在3.3.4版本中的一个bug,在新版本中3.5已经修复了,建议使用最新版本
若是你使用的是这个版本,那你只能经过重启leader来解决了tcp

2. zk的log和快照占大量空间

现象:zk的datadir下的version-2下有不少快照,日志目录下有大日志文件(单个文件太大),有些东西是没有用的,因此建议按期清除
解决办法:在zk的配置文件中添加自动清理日志和快照的开关autopurge.purgeInterval=1,固然也能够中过个年autopurge.snapRetainCount来设置须要保留的snapshot文件个数,默认是3个。ide

3. 客户端链接有失败有成功

现象:客户端的链接有的能够连,有的链接失败
日志:
Too many connection from 127.0.0.1 -max is 60
解决办法:
更改zk配置的链接数maxClientCnxns 加大这个值,默认是60,不建议设置的太大,防止DDOS×××高并发

4. zk客户端偶尔会有失败链接

现象:有时客户端偶尔会连不上zk
缘由:.net

这种状况比较复杂,跟代码及逻辑有关系了,以及当前的业务量有关系,好比zk处理大量的短链接请求时,SYN QUEUE的accept queue有时候被打满,这就尴尬了,直接致使链接失败。
详细能够查看这篇文章
https://blog.csdn.net/varyall/article/details/79681562
解决办法:
syn队列的大小是系统用来限制网络的高并发的,具体参数以下:
net.ipv4.tcp_max_syn_backlog和net.core.somaxconn,这两值设置为同样便可
若是过小了,会致使这种问题,须要按量提升,不要过高了。
生产环境中最终的解决办法是最好下降和zk的短链接数量,这样就基本不会出这种问题。rest

5. 报错:smaller server identifier,so dropping

现象:使用客户端链接无法连上,查看zk日志,发现不少报错报错:smaller server identifier,so dropping
解决办法:
按zk的myid的大小从小到大一次重启zk服务器,首先保证有问题的zk不重启。
分析缘由:zk是须要集群中全部机器两两创建链接的, 其中配置中的3555端口是用来进行选举时机器直接创建通信的端口, 大id的server才会去链接小id的server,避免链接浪费.若是是最后重启myid最小的实例,该实例将不能加入到集群中, 由于不能和其余集群创建链接日志

相关文章
相关标签/搜索