背景:
在Lamport 的论文Paxos Made Simple的第 3 节,命名为实现状态机,描述了 Multi-Paxos。Google Paxos Made Live中使用了 Multi-Paxos 。(在Apache ZooKeeper中使用了 Multi-Paxos)。在 Multi-Paxos 中,可能会出现间隙:
一般来说,假设一个领导者可以
α
提前获得命令——也就是说,它可以在命令 1 到命令被选择之后i + 1
通过命令提出命令。然后可能会出现最多命令的间隙。i + α
i
α - 1
现在考虑以下场景:
整个系统采用主从架构。只有 master 服务于客户端命令。Master 和 Slave 通过 Multi-Paxos 就命令的顺序达成共识。master 是 Multi-Paxos 实例中的领导者。假设现在 master 和它的两个 slave 的状态(命令已被选择)如下图所示:
.
请注意,在主状态中存在不止一个间隙。由于不同步,两个奴隶落后。这时候master就失败了。
问题:
slave检测到master故障后应该怎么做(比如通过心跳机制)?
特别是与老主控的差距和缺失的命令如何处理?
关于 Zab 的更新:
正如@sbridges 所指出的,ZooKeeper使用Zab而不是 Paxos。去引用,
Zab 主要设计用于主备份(即主从)系统,如 ZooKeeper,而不是用于状态机复制。
Zab 似乎与我上面列出的问题密切相关。根据Zab 的简短概述论文,Zab 协议由两种模式组成:恢复和广播。在恢复模式下,有两个特定的保证:永远不会忘记已提交的消息和放弃已跳过的消息。我对 Zab 的困惑是:
- 在恢复模式下,Zab 是否也会遇到间隙问题?如果是这样,Zab 做了什么?