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

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

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

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

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

如果因为磁盘空间或者磁盘性能等问题,希望更改ZooKeeper的数据目录,您可以按照以下步骤逐个节点修改并迁移数据目录,实现不停止ZooKeeper服务的平滑迁移。
说明 例如,将数据目录从/mnt/disk1/zookeeper/data更改为/mnt/disk2/zookeeper/data。集群的master-1-2 节点为leader,master-1-1和master-1-3节点为follower,迁移时建议先操作follower再操作leader。
  1. 修改数据目录并保存配置。
    1. 在ZooKeeper服务的配置页签,搜索dataDir参数,修改参数值为新目录/mnt/disk2/zookeeper/data
    2. 单击保存
    3. 在弹出对话框中,输入执行原因,单击保存
  2. 部署配置。
    1. 在ZooKeeper服务的配置页签,单击部署客户配置
    2. 在弹出的对话框中,输入执行原因,单击确定
    3. 确认对话框中,单击确定
  3. 可选:验证数据目录。
    1. 使用SSH方式登录集群,详情请参见登录集群
    2. 执行以下命令,查看zoo.cfg配置文件的dataDir参数值。
       cat /etc/emr/zookeeper-conf/zoo.cfg

      显示数据目录已更新为新目录。

  4. 停止master-1-1节点。
    1. 在ZooKeeper服务的部署拓扑页签,单击master-1-1节点操作列的停止
    2. 执行集群操作对话框中,输入执行原因,单击确定
    3. 确认对话框中,单击确定
  5. 目录迁移。
    1. 使用SSH方式登录集群,详情请参见登录集群
    2. 执行以下命令,在master-1-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. 启动master-1-1节点。
    1. 在ZooKeeper服务的状态页签,单击ZookeeperServer操作列的启动
    2. 在弹出的对话框中,输入执行原因,单击确定
    3. 确认对话框中,单击确定

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

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