0

Node_1 是领导者,node_2 意外死亡,Node_1 需要重新运行 Paxos,因为 Paxos 值与当前节点死亡或活着有关。但是只有 1 个节点(node_1 本身)同意这个提议,node_2 不会响应。这个条件不能达到“通过一半的节点同意,即2个节点”。它如何工作?

4

2 回答 2

1

Paxos 不能与两个节点一起工作,除非两个节点都在工作。为了使 F 个节点失败,您总共需要 n>=2F+1 个节点。这意味着要使一个节点失败,您需要一个三节点集群。两次故障需要五个节点。之所以如此,是因为只有当一个值被多数接受时才会选择它。如果我们有两个节点,多数是两个,并且两个节点都必须接受该值才能被选中。如果我们有三个节点,那么多数是两个,我们可以在单个节点故障中幸存下来。

于 2014-11-08T21:14:34.093 回答
0

如果 node_1 只是提议者,则系统无法决定提议。如果 node_1(假设为 v)和 node_2(假设为 v')既是接受者又是提议者,那么算法可以决定接受的提议。假设节点 v 尝试提出 v 值,节点 v' 尝试提出 v' 值。那么,让我们看看下面的例子。提议者 v 发送一个编号为 3 的准备。接受者具有先前的值,因此将ACK-prepare先前的提议一起发回。然后 v' 意外死亡。但“v”acceptor 继续运行并接受 v 提议者提出的提议 v'。然后,接受者发送ACK-proposal,系统以一个决定结束。

Paxos 范式

为了使我们的示例更有效,接受的值是提议者 v' 的值(已死亡)。但是在死之前发送带有数字 2 的 v' 值,这是最终决定的值。

该算法具有以下假设:

  • 网络可以延迟数据包
  • 重新排序数据包
  • 丢包
  • 但不会损坏数据包

如果你还没有读过这个,看看..

于 2013-08-21T09:10:02.023 回答