- SID:服务器ID。用来唯一标识一台 ZooKeeper集群中的机器,每台机器不能重 复,和myid一致。
- ZXID:事务ID。ZXID是一个事务ID,用来 标识一次服务器状态的变更。
Epoch:每个Leader任期的代号。没有 Leader时同一轮投票过程中的逻辑时钟值是 相同的。每投完一次票这个数据就会增加
消息广播:两阶段性提交
1、client客户端发起一个写请求,leader将其转化为事务提案(proposal),并分配一个全局zxid
2、往follower进行广播:每个follower是一个队列,并且zxid采用FIFO排队发送
3、follower收到提案后,一阶段写入 并回复ACK
4、leader收到半数以上的follower ACK之后,认为消息发送成功,向client发送commit
5、leader向所有follower广播commit信息,同时leader、follower都完成两阶段事务提交。崩溃恢复:leader选举&数据恢复
leader选举:第一次启动
投票过半数时,服务器 id 大的胜出
leader选举:leader崩溃或网络原因leader与过半节点失去连接
- 保留commit的事务提案,丢弃leader向follower写请求但是没向client commit的事务提案
EPOCH大的直接胜出、
目的:确保集群中过半follower已同步leader的数据
- 过程:follower把落后的事务提案进行同步,leader才把该follower加入 可用的follower列表
