leader 崩溃的瞬间,有些写已经确认、有些还在路上。ZooKeeper 保证什么?这篇让一个线程持续写入、杀掉 leader 并核对每一个请求的结果,验证「已确认的写不丢」,并看看「没确认的」到底发生了什么。
次 已确认 确认后丢失 未确认(ConnectionLoss) 其中实际已写入 1 1189 0 1 1 2 1031 0 1 0 3 1218 0 1 1 4 1251 0 1 0 5 1201 0 1 1 汇总:已确认的写全部保留 = True | 未确认的写里实际已经写入的合计 = 3 / 5
已确认 = 客户端的 create 调用返回成功。这个保证来自「只有多数派确认的提案才会被提交」加上选举规则(第 35 篇):新 leader 一定拥有所有已提交的事务。
三个节点的 zxid: {'z43-1': '0x6000003dd', 'z43-2': '0x6000003dd', 'z43-3': '0x6000003dd'} | 一致: True
各节点上 /r0..r4 下的 znode 总数: {'z43-1': 5893, 'z43-2': 5893, 'z43-3': 5893} | 一致: True