Zookeeper运维总结



zookeeper VIRT虚拟内存占用过大的问题:

这个和zookeeper的实现有关,参考这里:http://zookeeper-user.578899.n2.nabble.com/setting-zookeeper-heap-size-td6983511.html

线上的zookeeper的VIRT有30多G,查看了data, dataLog,总共才几百M。不过一直没什么问题。

Unreasonable length的问题:

https://issues.apache.org/jira/browse/ZOOKEEPER-1513
目前线上用的是345版本,而zookeeper最后的release版本就是这个,有大概一年多没更新了。。
这个问题有可能是client尝试向zookeeper上放超过1M的数据时,出现的。
想修改这个默认配置,则可以修改"jute.maxbuffer"这个环境变量。参考:http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html
但是我们线上是因为端口扫描工具造成的,这个就相当地诡异了。停止端口扫描工具之后,就没有这个问题了。

watches数量多的问题:

dubbo对于每个结点都会watch,导致watch数很多,随便都几千个。
用wchs,wchc,wchp这些命令可以查看watches的信息,包括总数,每条路径上的watch的数量。每个client的。

查找不能成功启动原因:

zookeeper会有很多原因启动不成功,可以通过:

./zkServer.sh start-foreground
来查看启动时报的是什么异常,同时也可以查看运行过程中的异常。
另外,通过:
./zkServer.sh print-cmd
可以查看zookeeper启动的各个参数,包括java路径等,也可以便于查找问题。

配置自动清理日志:

从3.4.0开始,会自动清理日志了,所以这个通常不用配置。

配置autopurge.snapRetainCount 和 autopurge.purgeInterval 参数。
保留的snapshop的数量,默认是3个,最小也是3.

autopurge.snapRetainCount=3
autopurge.purgeInterval=1
参考这里:http://nileader.blog.51cto.com/1381108/932156 

另外要注意的是,zookeeper重启会自动清除zookeeper.out日志,所以如果出错要注意先备份这个文件。

配置zookeeper.out的位置及log4j滚动日志输出

今天发现线上的bin/zookeeper.out 居然有6G大小。看了下zkServer.sh的代码,这个zookeeper.out实际上是nohup的输出。

而nohup的输出实际上是stdout,stderr的输出,所以还是zookeepe本身的日志配置的问题。

研究了下bin/zkServer.sh和conf/log4j.properties,发现zookeeper其实是有日志相关的输出的配置,只要定义相关的变量就可以了。

Too many connections from 错误

这个错误是因为同一个IP的zookeeper socket 连接数大于60了。zookeeper server默认限制每个IP最多60个连接。

这个在测试服务器上出现的,因为测试服务器上太多进程在跑了。。

修改为:

maxClientCnxns=150

http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_advancedConfiguration

This ZooKeeper instance is not currently serving requests 的错误提示

当集群里的结点只剩下一台,或者不足半数时,就会出现这个错误提示。

通常在,只启动第一台zookeeper时会报这个错误。

在zookeeper server的日志里,会有类似的日志:

Exception causing close of session 0x0 due to java.io.IOException: ZooKeeperServer not running

Zookeeper连接速度很慢,Dubbo初始化很慢,应用启动很慢的问题

发现线下环境迁移到新机器后,应用启动变得很慢,本来十几秒启动的应用,变成几分钟才能启动。

启动过程没有报错,只是Dubbo的注册信息日志一直在比较慢地刷。

开始怀疑是网络问题,但是检查了iptables没有开启,用iptraf查看流量,也不高。机器的空闲内存也足够。

再检查Zookeeper的配置,磁盘的空间,应用的dubbo配置,jvm配置,发现都没有问题。

没办法了,用jprofiler来测试下,发现“org.I0Itec.zkclient.ZkClient$1.call”,这个调用耗时比较大。

这样确认是zookeeper本身比较慢,不是应用的问题。

用下面的zookeeper benchmark工具测试了下性能,发现read速度还可能,create/write速度非常慢,qps只有个位数。

于是问了下运维的同事,原来新机器是用共享磁盘的,所以速度很慢。

而zookeeper每次write请求都要写到log日志,并刷到磁盘里,所以非常的慢。

后来运维的同事换为本地磁盘,一切恢复正常。

管理工具:

Zookeeper官方自带的管理员工具:

http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html    官方的命令行工具可以胜任绝大部分工作了。

zktop

https://github.com/phunt/zktop  python写的小工具,很有意思

taokeeper

项目地址:https://github.com/alibaba/taokeeper 
淘宝出品的一个监控工具,还有可以用脚本来监控的功能。虽然开源了,但是实际上很难用,代码也很难扩展,而且有些jar包是淘宝内部的。
我修改了下,可以正常使用,代码地址在:https://github.com/hengyunabc/taokeeper 
但是我们线上也没有用这个,线上只有zabbix的监控。

性能测试相关:

https://github.com/brownsys/zookeeper-benchmark
这个工具输出结果比较乱,不过用起来还不错。
    mvn -DZooKeeperVersion=3.4.5 package
    ./runBenchmark.sh  test
然后在test文件夹下,会有生成的信息。主要在zk-benchmark.log这个文件里。

http://zookeeper.apache.org/doc/r3.4.5/zookeeperOver.html  

http://wiki.apache.org/hadoop/ZooKeeper/ServiceLatencyOverview 自带的文档里有一点,不过貌似没更新过
http://wiki.apache.org/hadoop/ZooKeeper/ServiceLatencyOverview   Hadoop里带的一个测试
https://ramcloud.stanford.edu/wiki/display/ramcloud/ZooKeeper+Performance 
http://rdc.taobao.com/team/jm/archives/1070  淘宝的一个测试


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值