zookeeper
- 它为分布式应用提供了高效可靠的 分布式协调服务。
- 实现依赖于 ZAB 协议,实现了主备模式架构用来保持集群中数据的一致性
- Zookeeper 将所有数据存放在 内存中
- 应用场景:更适合读操作为主
- 角色: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 服务器上。