1. 程式人生 > >線上ZK問題排查

線上ZK問題排查

問題描述

測試環境ZK叢集的三個節點中zk1狀態雖然是follower,啟動也能正常啟動(通過telnet也能telnet 2181埠); 無法通過zk客戶端去連線2181埠,狀態一致是CONNECTING

檢視zk叢集所有節點狀態
/data/zookeeper-new-1/bin/zkServer.sh status
/data/zookeeper-new-2/bin/zkServer.sh status
/data/zookeeper-new-3/bin/zkServer.sh status

得到zk2是主節點

檢視各個節點的data資料大小
du -h /data/zookeeper/tmp/zk1/data/version-2/ --max-depth=1
du -h /data/zookeeper/tmp/zk2/data/version-2/ --max-depth=1
du -h /data/zookeeper/tmp/zk3/data/version-2/ --max-depth=1
[appadm@moonmall_Z1 zookeeper]$ du -h /data/zookeeper/tmp/zk1/data/version-2/ --max-depth=1
2.4G    /data/zookeeper/tmp/zk1/data/version-2/
[appadm@moonmall_Z1 zookeeper]$ du -h /data/zookeeper/tmp/zk2/data/version-2/ --max-depth=1
7.1G    /data/zookeeper/tmp/zk2/data/version-2/
[appadm@moonmall_Z1 zookeeper]$ du -h /data/zookeeper/tmp/zk3/data/version-2/ --max-depth=1
7.3G    /data/zookeeper/tmp/zk3/data/version-2/
[appadm@moonmall_Z1 zookeeper]$

結果: zk1節點的資料落後其它節點太多,檢視ZK1的配置資訊(zoo.conf

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data/zookeeper/tmp/zk1/data
dataLogDir=/data/zookeeper/tmp/zk1/log
# the port at which the clients will connect
clientPort=2181

兩個引數需要注意
引數名稱|說明
---|----
tickTime | zk伺服器與客戶端之間心跳維持的時間間隔。每隔tickTime的時間就會發送一個心跳。
initLimit | 允許所有follower與leader進行同步的時間,如果在設定的時間段內,半數以上的follower未能完成同步,叢集會再進行一次選舉。
syncLimit | leader與follower之間的同步時間,如果在設定的時間內未完成同步,它將會被叢集丟棄。

解決方案
  1. 調整syncLimit, 如果檔案大小相差較大,可以講時間相應的調大.
  2. 將主節點的檔案手動複製到有問題的節點中.
  3. 調整zoo.conf定時清理資料快照資訊。減少資料同步資訊
autopurge.snapRetainCount=5
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1
  1. 對於叢集節點data目錄快照檔案相差非常巨大。用方法2無法使叢集正常工作。(即使叢集能夠正常啟動起來,過不了多久又會停止工作。但是各個節點角色還是正常的)。考慮到之前有個節點總是掛起。可以想到整個叢集資料不能保證一致,可以考慮是否重建資料目錄。這個需要對整個業務衡量