為什么Zookeeper會出現zxid溢出?
本文介紹在使用ZooKeeper時,客戶端出現zxid(Zookeeper事務ID)溢出的問題現象、問題原因和解決方案。
問題現象
ZooKeeper集群強制選主,并重置zxid低32位的計數值。
問題原因
zxid是一個長64位的數字。高32位用來表示當前Leader的周期,低32位用來表示當前請求產生的事物在當前Leader周期內的位置。每產生一個新的事務,zxid的低32位就會自動加1。當zxid達到最大值,即zxid的低32位達到0xffffffff,就會觸發集群強制選主,并重置zxid低32位的計數值(zxid高32位變為新Leader的周期,低32位變為0)。
解決方案
目前,Server沒有規避zxid溢出的方法,請在業務側提前規避。
對于使用ZooKeeper作為注冊配置中心的使用場景:集群選主不會影響到正常使用,客戶端在集群選主之后會自動重連恢復。
為什么Zookeeper會出現APIError溢出?
本文將介紹使用MSE ZooKeeper時,客戶端出現APIError報錯的問題現象,問題原因和解決方案。
問題現象
使用ZooKeeper客戶端出現APIError報錯,如下所示:
org.apache.zookeeper.KeeperException$APIErrorException: KeeperErrorCode = APIError for /xxx。
問題原因
在使用MSE ZooKeeper時客戶端觸發了MSE ZooKeeper的限流策略。
解決方案
保障ZooKeeper單個會話創建的臨時節點(ephemeral)數量少于2000個。
為什么Zookeeper客戶端會出現Conection Loss?
本文將介紹使用MSE ZooKeeper時,客戶端出現Conection Loss報錯的問題現象,問題原因和解決方案。
問題現象
使用ZooKeeper客戶端出現APIError報錯,如下所示:
org.apache.zookeeper.KeeperException$ConnectionLossException: ZooKeeper connection lost. Trying to reconnect。
問題原因
出現Zookeeper客戶端出現conection loss有可能兩個原因,一是網絡發生波動不穩定情況,二是連接超時,超過了設置的連接時間。
解決方案
可以嘗試在參數管理頁面對超時時間(minSessionTimeout和syncLimit)適當放寬,詳情參考章節:ZooKeeper引擎參數設置。