Zookeeper是什么
Zookeeper 是一个高性能分布式应用协调服务
- Naming Service
- 配置管理
- Leader Election
- 服务发现
- 同步
- Group Service
- Barrier
- 分布式队列
- 两阶段提交
Zookeeper 工作方式
- Zookeeper 集群包含1个Leader,多个Follower。
- 所有的Follower都可提供读服务。
- 所有的写操作都会被forward到Leader
- Client与Server通过NIO通信
- 全局串行化所有的写操作
- 保证同一客户端的指令被FIFO执行
- 保证消息通知的FIFO
Zab协议 -广播模式
- Leader将所有更新(称为proposal),顺序发给Follower
- 当Leader收到半数以上的Follower对此proposal的ACK时,即向所有Follower发送commit消息,并在本地commit该消息
- Follower收到Proposal后即将对该Proposal写入磁盘,写入成功即返回ACK给Leader
- 每个Proposal 都有一个唯一的单调递增的proposal ID 即 zxid
Zab协议 -恢复模式
- 进入恢复模式 : 当Leader宕机或者丢失大多数Follower后,即进入恢复模式
- 结束恢复模式 : 当新领导被选举出来,且大多数Follower完成了与Leader的状态同步后,恢复模式即结束,从而进入广播模式
- 恢复模式的意义
- 发现集群中被commit的proposal的最大zxid
- 建立新的epoch,从而保证之前的Leader不能再commit新的Proposal
- 集群中大部分节点都commit过前一个Leader commit过的消息,而新的Leader是被大部分节点所支持的,所以被之前Leader commit 过的Proposal不会丢失,至少被一个节点所保存
- 新Leader会与所有Follower通信,从而保证大部分节点都拥有最新的数据
恢复阶段的保证
- 若一条消息在一台机器上被deliver,那么该消息必须将在每台机器上deliver,即使那台机器故障了
- 一个被skip的消息,必须仍然需要被skip