如果领导者在Multi-Paxos中出现主从系统失败怎么办?

hen*_*xin 6 fault-tolerance distributed-computing paxos apache-zookeeper

Backgound:

在第3节,名为实施状态机,Lamport的论文Paxos Made Simple,Multi-Paxos被描述.Multi Paxos用于Google Paxos Made Live.(Multi-Paxos用于Apache ZooKeeper).在Multi-Paxos中,可能会出现差距:

通常,假设领导者可以?提前获得命令 - 也就是说,它可以在选择命令1到之后i + 1通过i + ?命令提出命令i.? - 1然后可能出现高达命令的差距.

现在考虑以下场景:

整个系统使用主从架构.只有主服务器提供客户端命令.Master和Slaves通过Multi-Paxos就命令序列达成共识.Master是Multi-Paxos实例的领导者.现在假设主服务器及其两个从服务器具有下图所示的状态(已选择命令):

主人和奴隶.

请注意,主状态中存在多个间隙.由于不同步,这两个奴隶落后了.这时,主人失败了.

问题:

  1. 在检测到主设备故障后,从设备应该做什么(例如,通过心跳机制)?

  2. 特别是,如何处理与旧主人的差距和缺失的命令?

关于Zab的更新:

正如@sbridges指出的那样,ZooKeeper使用Zab而不是Paxos.报价,

Zab主要用于主备份(即主从)系统,如ZooKeeper,而不是用于状态机复制.

似乎Zab与我上面列出的问题密切相关.根据Zab的简短概述文件,Zab协议包括两种模式:恢复和广播.在恢复模式下,会做出两个特定的保证:永远不会忘记已提交的消息放弃跳过的消息.我对Zab的困惑是:

  1. 在恢复模式下Zab是否也存在缺口问题?如果是这样,扎布做什么?

sbr*_*ges 1

Apache ZooKeeper 中使用了 Multi-Paxos

Zookeeper使用zab,而不是paxos。请参阅此链接了解差异

特别是,集合中的每个 Zookeeper 节点都以与其他节点相同的顺序提交更新,

与客户端请求不同,状态更新必须按照主节点的原始生成顺序应用,从主节点的原始初始状态开始。如果主节点发生故障,执行恢复的新主节点无法任意重新排序未提交的状态更新,或从不同的初始状态开始应用它们。