zookeeper为分布式应用提供一个高效可靠的分布式协调服务器。zk通过zab协议来保证zk模式中数据的一致性。
- zk集群中的任何一台集群都可以响应客户端的读操作
- zk将所以数据都存储在内存中
- zk中有三个角色,leader、follower、observer
- leader是选举出来的角色,具有读写能力
- follower具有读能力
- observer只有读的能力,且不参与选举,也不参与过半写成功的策略,可以在不影响写的前提下提高集群读性能
zab协议是为了zk专门设计的一种支持奔溃回复的消息广播协议。
- 消息广播
- 只允许一个主进程接受客户事务请求并处理,即leader
- leader接受请求后,为follower创建一个队列,保证事务顺序性,并按顺序向其他节点广播提案
- follower接受到消息并本地化以后,向leader发送ack
- leader收到一半以上follower的响应时,leader提交该提案
- 故障恢复
- 当leader出现故障时,进入故障恢复模式,选举出新的leader
- leader和过半follower进行同步,使数据一致
- 同步完成以后进入广播模式
- 非leader节点的写请求会将请求发送到leader服务器