首页  

zab协议     所属分类 zookeeper 浏览量 1374
Zab(Zookeeper Atomic Broadcast)

保证数据一致性,多副本之间数据一致性

恢复模式
消息广播模式


恢复模式
选举阶段
数据同步阶段
zxid=epoch+xid


消息广播模式  
消息广播 propose ack commit
2pc



分布式事务
2PC,3PC, TCC(try, commit, cancel)

2PC Two-Phase Commit 二阶段提交协议     准备阶段+提交阶段
3PC Three-Phase Commit 三阶段提交协议   CanCommit + PreCommit + Commit

参与者收到PreCommit请求后,执行事务操作,将Undo和Redo信息记入事务日志中(但不提交事务)

2PC 问题   同步阻塞、单点、脑裂
3PC 增加超时机制


都存在脑裂问题,无法解决 分布式一致性问题

解决一致性问题,唯有Paxos 


zk特点

一个leader,多个follower,多个observer(只读),只有leader能写,follow提供读和选举投票

Observer模式
peerType=observer

server.1:localhost:2181:3181:observer

老版本中没有observer,增加follower节点,提升读性能 ,但是写性能会严重下降
有了observer,增加observer节点,observer不参与投票,不会引起写性能下降



节点数要求 2N+1,在写或者选举时需要N+1个节点通过才能成功

只有leader能写,保证写的顺序性 

leader 奔溃,借助(myid, zxid) 比较大小来选举,最大的为新的leader

适用于读多写少的场景

节点的数据大小不能超过1M

Zxid  64 位数字  
高 32 位 代表 Leader 周期 epoch  
低 32 位 单调递增的计数器,客户端每一个事务请求,计数器加 1


leader epoch 朝代 年号 

follower只接收比自己lastZxid 大的zxid的提议
follower 只听从当前年代的 leader 的命令


历史队列(history queue)
每一个follower节点都会有一个先进先出(FIFO)的队列用来存放收到的事务请求,保证执行事务的顺序

可靠提交由ZAB的事务一致性协议保证
全局有序由TCP协议保证
因果有序由follower的历史队列(history queue)保证

广播(broadcast) 执行过程

leader从客户端收到一个写请求
leader生成一个新的事务并为这个事务生成一个唯一的ZXID,
leader将这个事务发送给所有的follows节点
follower节点将收到的事务请求加入到历史队列(history queue)中,并发送ack给ack给leader
当leader收到大多数follower(超过法定数量)的ack消息,leader会发送commit请求
当follower收到commit请求时,会判断该事务的ZXID是不是比历史队列中的任何事务的ZXID都小,如果是则提交,如果不是则等待比它更小的事务的commit

恢复模式大致可以分为四个阶段
选举 发现 同步 广播
当leader崩溃后,集群进入选举阶段,开始选举出潜在的新leader(一般为集群中拥有最大ZXID的节点)
进入发现阶段,follower与潜在的新leader进行沟通,如果发现超过法定人数的follower同意,则潜在的新leader将epoch加1,进入新的纪元。新的leader产生
集群间进行数据同步,保证集群中各个节点的事务一致
集群恢复到广播模式,开始接受客户端的写请求

上一篇     下一篇
hive数据仓库

Zookeeper在HBase中的应用

elasticsearch中的DocValues

hive

HIVE数据模型

spark