【发布时间】:2015-12-22 19:12:29
【问题描述】:
假设我将一些机器放在一个弹性集群中,并希望在它们中运行一些共识算法(比如 Paxos)。假设他们知道网络的初始规模,比如 8 台机器。
所以,他们将运行一个共识算法,法定人数为 5。
现在,考虑这些情况:
- 我发现 CPU 太低,我将集群大小减半,减少到 4 台机器。
- 有一个分区拆分,每个拆分得到4台机器。
如果我采用当前集群大小来获得仲裁,我会受到分区拆分的影响。因为对于底层集群,情况(1)和(2)看起来完全一样。但是,如果我使用固定数量,我将无法缩减集群(如果我扩大集群,我会因分区而出现不一致)。
我有第三种选择,即在扩展时通知所有机器集群的大小,但是有可能在扩展之前发生分区,例如,分区没有接收到新的大小并且有使用旧大小达成共识的法定人数足够。
Paxos(以及任何其他安全的共识算法)在弹性环境中无法使用吗?
【问题讨论】:
-
让偶数个接受者分布在两个站点上是个坏主意。分区的可能性很大。最好仅将一些节点指定为接受者,而将其他节点仅指定为学习者作为每个站点的备用节点。确保在任何时候都有奇数个接受者,并且在您的“首选”数据中心中占多数。系统可自行重新配置;如果一个accepter长时间离线,系统会自动运行paxos轮次来改变集群配置,将crashaccepter降级为learner,并将同一站点的一个备用learner提升为acceptor。
标签: distributed-computing paxos consensus