本文匯總了使用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會切換到另兩個節點的任一節點上。