zookeeper

  1. 它为分布式应用提供了高效可靠的分布式协调服务
  2. 实现依赖于 ZAB协议,实现了主备模式架构用来保持集群中数据的一致性
  3. Zookeeper 将所有数据存放在 内存中
  4. 应用场景:更适合读操作为主
  5. 角色:leader follower observer
  • leader 是通过选举的一台机器(提供读写功能)
  • follower 和 observer 提供读功能,而observer 不参与选举 和半写成功策略(因此可以提升集群读性能)
  • 集群节点为奇数个
  • 节点分为临时节点,持久节点,顺序节点。 每个节点都又 star 结构
  • 重要功能 :watch 功能
  • 客户端: zkclient curator

ZAB 协议

为zookeeper 设计 支持崩溃恢复的消息广播协议。

  • ZAB 只允许有一个主进程接受客户事务请求并处理 (leader),leader收到请求后,将其转化为事务proposal。
  • leader 会为每个follower 创建一个队列,将事务放入响应队列,保证事务顺序。
  • 之后再队列中顺序向其他节点广播该提案,follower 收到后会将其以事务形式写入到本地日志,并向leader 发送 Ack 反馈。
  • leader等待并收到超过一半的follower 响应时向其他节点发送 commit 消息,同时 leader 提交提案

ZAB 两种模式

  • 故障恢复模式
  • 消息广播

模式切换

当机器出现故障时,就进入 故障恢复模式。并开启新一轮选举,新的leader 会和过半的 follower 进行同步数据。同步结束时,切换为消息广播模式。

例子: 当一台 遵循 ZAB 协议的服务器启动后,若监测到有 leader 在广播消息后,自动切换为 恢复模式,同步数据,之后再切换为消息广播。

非leader 节点 收到 客户请求,则该节点 会将该请求发送到 leader 服务器上。