ZooKeeper 运维相关资料汇总,如有帮助,转给有需要的同学。
运维注意
ZooKeeper 机器数量要求是 2xF+1 台,其中 F 表示可以容忍的机器故障台数,比如 3 台机器可以容忍 1 个 Failure,5 台机器容忍 2 个 Failure,… 一般最少选择 3 台机器(开发测试环境除外)。
确定好数量之后,要合理的部署 ZooKeeper 机器,理论上有条件的话,应该将 ZooKeeper 机器部署到不同的机房,做到跨机房容灾。例如,3 台 ZooKeeper 机器放到 3 个机房,这样可以最大程度降低故障概率。如果条件不允许,请把 Zookeeper 部署在不同的交换机下,或者至少不同的机柜下。
ZooKeeper 会把每个事务都写到磁盘文件中,然后定期汇总一份快照文件。为了最大限度的提高性能,建议把 transaction log 写到独立的磁盘中,避免受到其他应用程序的干扰(有没有试过写到 /dev/shm 内存?),而且 dataDir 和 dataLogDir 不要配置到同一快磁盘。
默认情况下,ZooKeeper 不会对历史的日志文件进行清理,这一点需要自己去做。从 3.4.0+ 版本开始,ZooKeeper 有提供内置的解决方案,通过参数可以配置清理策略。对于 3.3.x 版本,还是只能通过定时任务的方式清理。
ZooKeeper 写的 transaction log 和 snapshot log 文件不是直接给人看的,如果你想查看日志的内容,可以通过一些工具来实现。比如,使用 LogFormatter 查看 transaction log 文件,SnapshotFormatter 看 snapshot log 文件。
3.3.5 版本下,LogFomatter 看到的信息有限,SnapshotFormatter 不存在,应该是 3.4.0+ 版本才支持,下面是一个例子:
# /opt/taobao/java/bin/java -cp /opt/taobao/zookeeper/zookeeper-3.3.5.jar:/opt/taobao/zookeeper/lib/log4j-1.2.15.jar org.apache.zookeeper.server.LogFormatter /disk2/zkDataLog/version-2/log.900000001
ZooKeeper 有提供一些四个字母的命令,具体看前面提到的管理指南,使用这些命令可以很好的观察系统的运行状况。
最后,尽量避免 zookeeper 内存被 swap,要合理设置 jvm 堆大小。
赞!!!