本文汇总了使用Zookeeper时的常见问题。

ZooKeeper服务不稳定,发生异常重启等情况,怎么办?

造成服务不稳定的情况可能有很多,最常见的情况是znode数量过大或者snapshot过大,由于ZooKeeper将所有的znode维护在内存中,并且需要在节点间进行数据同步,因此过大的znode数量或者容量会对服务稳定性造成影响。ZooKeeper的定位是一个分布式协调服务,不能把ZooKeeper当作一个文件系统来使用,通常,znode数量应尽量保持在10万以下,snapshot大小应在800 MB以下。
  • 您可以在ZooKeeper服务的状态页签,查看znode数量监控。Zookeeper-1
  • 查看snapshot大小。
    1. 您可以先在ZooKeeper服务的配置页签,搜索并查看zk_data_dirs的参数值,获取Zookeeper的数据目录。zk_data_dirs
    2. 在ZooKeeper数据目录下查看snapshot的大小。snapshot

如果出现znode数量或snapshot过大的情况,需要排查znode分布情况,避免相关上层应用对ZooKeeper的过度使用。

报错信息包含Too many connections,怎么办?

当使用ZooKeeper客户端的进程出现类似Too many connections的报错时,可能是因为ZooKeeper客户端的连接数超过了限制。

您可以在ZooKeeper服务的配置页签,搜索并修改maxClientCnxns参数值,该配置限制了每个ZooKeeper节点和单个客户端IP之间的连接数,您可以适当调大该参数值,然后重启ZooKeeper服务使其生效。Zookeeper-config
当通过调整maxClientCnxns参数值后,仍然无法满足需求时,您可以在ZooKeeper状态页面观察一下连接数监控。如果发生连接数不断上升的情况,您需要排查一下使用ZooKeeper客户端的进程,是否存在ZooKeeper使用问题,例如使用后没有正确释放连接。根据排查的问题进行相应的处理,使得ZooKeeper客户端的进程可以正常运行。Zookeeper-2

如何平滑迁移ZooKeeper的数据目录?

如果因为磁盘空间或者磁盘性能等问题,希望更改ZooKeeper的数据目录,您可以按照以下步骤逐个节点修改并迁移数据目录,实现不停止ZooKeeper服务的平滑迁移。
说明 例如,将数据目录从/mnt/disk1/zookeeper更改为/mnt/disk2/zookeeper。集群的emr-worker-2节点为leader,emr-header-1和emr-worker-1节点为follower,迁移时建议先操作follower再操作leader。
  1. 修改数据目录并保存配置。
    1. 在ZooKeeper服务的配置页签,搜索zk_data_dirs参数,修改参数值为新目录/mnt/disk2/zookeepermodify parameters
    2. 单击右上角的保存
    3. 确认修改对话框中,输入执行原因,单击确定
  2. 部署配置。
    1. 在ZooKeeper服务的配置页签,单击右上角的部署客户配置
    2. 执行集群操作对话框中,输入执行原因,单击确定
    3. 确认对话框中,单击确定
  3. 可选:验证数据目录。
    1. 使用SSH方式登录集群,详情请参见登录集群
    2. 执行以下命令,查看zoo.cfg配置文件的dataDir参数值。
       cat /etc/ecm/zookeeper-conf/zoo.cfg
      返回信息如下,显示数据目录已更新为新目录。View data directory
  4. 停止emr-header-1节点。
    1. 在ZooKeeper服务的部署拓扑页签,单击emr-header-1节点操作列的停止
    2. 执行集群操作对话框中,输入执行原因,单击确定
    3. 确认对话框中,单击确定
    4. 单击上方的查看操作历史,直至操作的状态显示为成功
  5. 目录迁移。
    1. 使用SSH方式登录集群,详情请参见登录集群
    2. 执行以下命令,在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
  6. 启动emr-header-1节点。
    1. 在ZooKeeper服务的部署拓扑页签,单击emr-header-1节点操作列的启动
    2. 执行集群操作对话框中,输入执行原因,单击确定
    3. 确认对话框中,单击确定

      刷新页面,直至emr-header-1节点的健康状态显示为良好

  7. 登录emr-worker-1节点,重复执行步骤4~步骤6
  8. 登录emr-worker-2节点,重复执行步骤4~步骤6
    待所有节点恢复正常时,节点迁移完成。
    说明 emr-worker-2节点原本为leader,执行停止操作后会变为follower,leader会切换到另两个节点的任一节点上。