zookeeper运维问题总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zookeeper运维问题总结相关的知识,希望对你有一定的参考价值。
工作中遇到以下问题:
1、一台zk节点失联后,重启一直无法加入zk集群中,导致无法对外提供服务
2、zk的log和快照占大量空间
3、客户端连接有失败有成功
4、zk客户端偶尔会有失败连接
5、报错:smaller server identifier,so dropping
以上问题生产环境中经常会遇到
1. zk无法加入zk集群
现象: 使用zkCli.sh无法连接成功该zk节点
日志: 首先想到的是将该节点restart, 但问题依旧, 故查看zk的log, 有大量的如下日志
2018-07-18 17:31:12,015 - INFO [WorkerReceiver Thread:[email protected]] - 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:[email protected]] - 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:[email protected]] - 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:[email protected]] - Notification time out: 6400
解决办法:
这个是在3.3.4版本中的一个bug,在新版本中3.5已经修复了,建议使用最新版本
如果你使用的是这个版本,那你只能通过重启leader来解决了
2. zk的log和快照占大量空间
现象:zk的datadir下的version-2下有很多快照,日志目录下有大日志文件(单个文件太大),有些东西是没有用的,所以建议定期清除
解决办法:在zk的配置文件中添加自动清理日志和快照的开关autopurge.purgeInterval=1,当然也可以中过个年autopurge.snapRetainCount来设置需要保留的snapshot文件个数,默认是3个。
3. 客户端连接有失败有成功
现象:客户端的连接有的可以连,有的连接失败
日志:Too many connection from 127.0.0.1 -max is 60
解决办法:
更改zk配置的连接数maxClientCnxns 加大这个值,默认是60,不建议设置的太大,防止DDOS×××
4. zk客户端偶尔会有失败连接
现象:有时客户端偶尔会连不上zk
原因:
这种情况比较复杂,跟代码及逻辑有关系了,以及当前的业务量有关系,比如zk处理大量的短连接请求时,SYN QUEUE的accept queue有时候被打满,这就尴尬了,直接导致连接失败。
详细可以查看这篇文章
https://blog.csdn.net/varyall/article/details/79681562
解决办法:
syn队列的大小是系统用来限制网络的高并发的,具体参数如下:
net.ipv4.tcp_max_syn_backlog和net.core.somaxconn,这两值设置为一样即可
如果太小了,会导致这种问题,需要按量提高,不要太高了。
生产环境中最终的解决办法是最好降低和zk的短连接数量,这样就基本不会出这种问题。
5. 报错:smaller server identifier,so dropping
现象:使用客户端连接没法连上,查看zk日志,发现很多报错报错:smaller server identifier,so dropping
解决办法:
按zk的myid的大小从小到大一次重启zk服务器,首先保证有问题的zk不重启。
分析原因:zk是需要集群中所有机器两两建立连接的, 其中配置中的3555端口是用来进行选举时机器直接建立通讯的端口, 大id的server才会去连接小id的server,避免连接浪费.如果是最后重启myid最小的实例,该实例将不能加入到集群中, 因为不能和其他集群建立连接
以上是关于zookeeper运维问题总结的主要内容,如果未能解决你的问题,请参考以下文章
ZooKeeper运维——数据备份与恢复(事务日志+快照日志,万字总结,你想要的都有)
ZooKeeper运维——数据备份与恢复(事务日志+快照日志,万字总结,你想要的都有)
ZooKeeper运维——数据备份与恢复(事务日志+快照日志,万字总结,你想要的都有)