为什么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引擎参数设置。