关于ZooKeeper(三) 领导者选举,原子广播,一致性,会话, 状态
运行模式:独立模式/复制模式
复制模式:半数以上提供服务则正常工作,通常奇数个机器
高可用:
集合体中半数以上机器处于可用状态,并确保对znode的每个修改会被复制到超过半数以上的机器上。如果少于半数的机器出现故障,则至少有一台机器上有最新的状态,其余机器也会更改到这个状态
实现协议:Zab协议:无限重复的两个阶段领导者选举和原子广播
领导者选举
所有机器通过一个选择过程选举领导者leader,其余机器为follower,半数以上follower与leader状态同步,则阶段完成
原子广播
所有写请求转发给leader,leader广播给follower,半数以上follower持久化更改后,leader提交更新,通知客户端成功
任何znode都可以提供读请求
一致性
客户端无法知道自己是不是连到了与领导者状态一致的节点上
所有更新都有编号,严格按照编号顺序执行更新z1<z2,则z1一定发生在z2之前
> 顺序一致性:顺序更新
> 原子性:操作原子性,要么成功,要么失败
> 单一系统映像:客户端连接到任意一台服务器,看到的都是同样的视图,滞后于当前视图的机器不会接受连接请求
> 持久性:更新不可撤销
> 及时性:强迫客户端连接较新的服务器
会话
> 建立会话:客户端维护服务器列表,逐个尝试连接,直到成功
> 会话:有超时设置,服务器在时间范围未接收到请求,则会话过期,会话相关znode撤销,无法重新打开,需要重建
> 维持会话:客户端定期发送ping请求
> 故障切换:自动故障切换不会影响原来的会话
状态
CONNECTING连接中
CONNECTED连接
CLOSED关闭