本文汇总了使用Zookeeper时的常见问题。
ZooKeeper服务不稳定,发生异常重启等情况,怎么办?
造成服务不稳定的情况可能有很多,最常见的情况是znode数量过大或者snapshot过大,由于ZooKeeper将所有的znode维护在内存中,并且需要在节点间进行数据同步,因此过大的znode数量或者容量会对服务稳定性造成影响。ZooKeeper的定位是一个分布式协调服务,不能把ZooKeeper当作一个文件系统来使用,通常,znode数量应尽量保持在10万以下,snapshot大小应在800
MB以下。
- 您可以在ZooKeeper服务的状态页签,查看znode数量监控。
- 查看snapshot大小。
- 您可以先在ZooKeeper服务的配置页签,搜索并查看zk_data_dirs的参数值,获取Zookeeper的数据目录。
- 在ZooKeeper数据目录下查看snapshot的大小。
- 您可以先在ZooKeeper服务的配置页签,搜索并查看zk_data_dirs的参数值,获取Zookeeper的数据目录。
如果出现znode数量或snapshot过大的情况,需要排查znode分布情况,避免相关上层应用对ZooKeeper的过度使用。
报错信息包含Too many connections,怎么办?
当使用ZooKeeper客户端的进程出现类似Too many connections的报错时,可能是因为ZooKeeper客户端的连接数超过了限制。
您可以在ZooKeeper服务的配置页签,搜索并修改maxClientCnxns参数值,该配置限制了每个ZooKeeper节点和单个客户端IP之间的连接数,您可以适当调大该参数值,然后重启ZooKeeper服务使其生效。

当通过调整maxClientCnxns参数值后,仍然无法满足需求时,您可以在ZooKeeper状态页面观察一下连接数监控。如果发生连接数不断上升的情况,您需要排查一下使用ZooKeeper客户端的进程,是否存在ZooKeeper使用问题,例如使用后没有正确释放连接。根据排查的问题进行相应的处理,使得ZooKeeper客户端的进程可以正常运行。

如何平滑迁移ZooKeeper的数据目录?
如果因为磁盘空间或者磁盘性能等问题,希望更改ZooKeeper的数据目录,您可以按照以下步骤逐个节点修改并迁移数据目录,实现不停止ZooKeeper服务的平滑迁移。
说明 例如,将数据目录从/mnt/disk1/zookeeper更改为/mnt/disk2/zookeeper。集群的emr-worker-2节点为leader,emr-header-1和emr-worker-1节点为follower,迁移时建议先操作follower再操作leader。
- 修改数据目录并保存配置。
- 在ZooKeeper服务的配置页签,搜索zk_data_dirs参数,修改参数值为新目录/mnt/disk2/zookeeper。
- 单击右上角的保存。
- 在确认修改对话框中,输入执行原因,单击确定。
- 在ZooKeeper服务的配置页签,搜索zk_data_dirs参数,修改参数值为新目录/mnt/disk2/zookeeper。
- 部署配置。
- 在ZooKeeper服务的配置页签,单击右上角的部署客户配置。
- 在执行集群操作对话框中,输入执行原因,单击确定。
- 在确认对话框中,单击确定。
- 可选:验证数据目录。
- 使用SSH方式登录集群,详情请参见登录集群。
- 执行以下命令,查看zoo.cfg配置文件的dataDir参数值。
cat /etc/ecm/zookeeper-conf/zoo.cfg
返回信息如下,显示数据目录已更新为新目录。
- 停止emr-header-1节点。
- 在ZooKeeper服务的部署拓扑页签,单击emr-header-1节点操作列的停止。
- 在执行集群操作对话框中,输入执行原因,单击确定。
- 在确认对话框中,单击确定。
- 单击上方的查看操作历史,直至操作的状态显示为成功。
- 目录迁移。
- 使用SSH方式登录集群,详情请参见登录集群。
- 执行以下命令,在emr-header-1节点进行目录迁移及相关权限设置。
sudo rm -rf /mnt/disk2/zookeeper && sudo cp -rf /mnt/disk1/zookeeper /mnt/disk2/zookeeper && sudo chown hadoop:hadoop -R /mnt/disk2/zookeeper
- 启动emr-header-1节点。
- 在ZooKeeper服务的部署拓扑页签,单击emr-header-1节点操作列的启动。
- 在执行集群操作对话框中,输入执行原因,单击确定。
- 在确认对话框中,单击确定。
刷新页面,直至emr-header-1节点的健康状态显示为良好。
- 登录emr-worker-1节点,重复执行步骤4~步骤6。
- 登录emr-worker-2节点,重复执行步骤4~步骤6。
待所有节点恢复正常时,节点迁移完成。说明 emr-worker-2节点原本为leader,执行停止操作后会变为follower,leader会切换到另两个节点的任一节点上。