假设我将一些机器放在一个弹性集群中,并希望在它们中运行一些共识算法(比如 Paxos)。假设他们知道网络的初始规模,比如 8 台机器。
因此,他们将运行共识算法,法定人数为 5。
现在,考虑这些情况:
- 我看到 CPU 太低了,我将集群大小减半,减少到 4 台机器。
- 有一个分区拆分,每个拆分得到4台机器。
如果我采用当前的集群大小来获得仲裁,我会受到分区拆分的影响。因为对于底层集群,情况(1)和(2)看起来完全一样。但是,如果我使用固定数量,我将无法缩小集群(如果我扩大规模,我会因分区而出现不一致)。
我有第三种选择,即在扩展时通知所有机器集群的大小,但是有可能在扩展之前发生分区,例如,该分区没有收到新的大小并且有足够的仲裁使用旧尺寸的共识。
Paxos(以及任何其他安全的共识算法)在弹性环境中无法使用吗?