Linux下Zookeeper数据同步基于Zab协议,核心机制如下:
- Leader选举
- 集群启动或Leader宕机时触发,通过比较ZXID(事务ID)和myid(服务器ID)选出新Leader,需超过半数节点同意。
- 数据同步阶段
- 初始同步:新Follower或重启节点从Leader获取全量快照(Snapshot)和事务日志,重放日志恢复数据。
- 增量同步:Leader通过事务日志广播增量更新(如写操作),Follower按顺序应用并返回ACK,超过半数确认后提交。
- 异常处理:若Follower数据落后过多,Leader可能发送TRUNC命令截断其日志,再重新同步。
- 一致性保障
- ZXID顺序性:每个事务分配唯一递增ZXID,确保操作全局有序。
- Quorum机制:写操作需超过半数节点持久化成功才返回客户端,保证数据不丢失。
- Watch机制:客户端可监听节点变化,触发实时数据同步。
- 性能优化
- 快照与日志分离:定期生成快照减少日志量,故障恢复时快速加载。
- 并行同步:Leader可同时向多个Follower发送更新,提升吞吐量。
关键组件:Zab协议、事务日志、快照、心跳检测。
数据一致性:通过顺序广播和多数派确认实现最终一致性,支持强一致性场景(如配置管理)。