配置ZooKeeper时,要避免的一些常见问题:
-
不一致的服务器列表
客户端使用的ZooKeeper服务器列表,要和每台ZooKeeper服务器有的一致;
客户端列表可以是服务端列表的子集;
每台ZooKeeper服务器的列表也要一致; -
事务日志的位置不正确
ZooKeeper最大的性能问题,是事务日志.ZooKeeper在返回响应前会同步事务到存储媒介.
独立的事务日志设备,是稳定的好性能的关键;
将日志放在繁忙的设备,可能会导致性能问题;
如果只有一个存储设备,将追踪文件放在NFS,并增加snapshotCount;这不会解结问题,但会缓和问题;
- 不正确的Java heap大小
要小心的设置Java heap大小;
要特别避免ZooKeeper将页交换到硬盘(swap).
所有都是排好序的,如果一个请求swap到硬盘,所有队列请求都会swap.
要做保守的估计: 如果有4G内存,不要设置Java heap为6G或4G;而是设置为3G,操作系统和文件缓存也需要内存;
推荐在估计heap大小前,做负载测试,确保值要比能导致系统swap的值小;
- 公共访问发布
运行在可信环境,推荐设置防火墙
问题诊断
因Zookeeper服务的事务日志(transaction logs)文件错误,导致服务无法读取数据而无法启动.
在加载Zookeeper数据库时,会报出IOException.
在此例中,确保集群里其他服务器启动和运行.使用”stat”命令查看他们是否在good状态;
然后可以清除故障的服务器.删除故障机上datadir/version-2 和 datalogdir/version-2/,重启服务;