zk · 2023-03-31 0

ZK 出现 Refusing session request for client ip as it has seend zxid 0x02 our last zxid is 0x0 client

拒绝来自zkCli的请求,因为其携带的事务ID(zxid) > zkServer的事务ID.

解决方法:重启所有客户端(例如用到zookeeper的web项目).

原因:在重启ZK的时候,曾经删除过数据目录,这样造成zkid存在问题。客户端记录的是某个id,而服务端重启之后并且删除数据目录之后,id编号从0x0开始。

Zookeeper的zxid会由于状态的变更主键递增1,为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。这在选举的时候启动至关重要。

所以一旦客户端的id比服务端大,服务端是拒绝连接的。

问题:事务id由谁分配?一个时刻内一台client 与server之间只有一个吗?zk集群内同步吗?保存在哪?