ZAB 是 ZooKeeper 的一致性协议。教科书讲它有发现、同步、广播三个阶段,运行起来分别是什么样?这篇用杀 leader 之后新一任的日志,把三个阶段按毫秒还原出来。
新 leader z39-3 的日志(相对杀 leader 的毫秒):
+ 11 ms Peer state changed: looking
+ 217 ms Peer state changed: leading
+ 230 ms LEADING - LEADER ELECTION TOOK - 218 MS
+ 231 ms Peer state changed: leading - discovery
+ 340 ms Synchronizing with Learner sid: 1 maxCommittedLog=0x100000020 minCommittedLog=0x100000001 lastProces
+ 340 ms Sending DIFF zxid=0x100000020 for peer sid: 1
+ 341 ms Peer state changed: leading - synchronization
+ 344 ms Have quorum of supporters, sids: [[1, 3]]; starting up and setting last processed zxid: 0x200000000
+ 351 ms Peer state changed: leading - broadcast
follower z39-1 的日志:
+ 6 ms Peer state changed: looking
+ 218 ms Peer state changed: following
+ 220 ms FOLLOWING - LEADER ELECTION TOOK - 214 MS
+ 221 ms Peer state changed: following - discovery
+ 340 ms Peer state changed: following - synchronization
+ 342 ms Peer state changed: following - synchronization - diff
+ 343 ms Learner received NEWLEADER message
+ 344 ms Set the current epoch to 2
+ 344 ms Peer state changed: following - synchronization
+ 344 ms Sent NEWLEADER ack to leader with zxid 200000000
+ 352 ms Learner received UPTODATE message
+ 353 ms Peer state changed: following - broadcast选出 leader(进入 discovery)+231 ms → 进入 synchronization +341 ms(discovery 用 110 ms)→ 进入 broadcast +351 ms(synchronization 用 10 ms)
在 INFO 日志里能搜到的协议消息关键字: ['DIFF', 'NEWLEADER', 'UPTODATE']