典型的五台服务器集群如何能够容忍任意两台服务器发生故障?
How a typical cluster of five servers can tolerate the failure of any two servers?
我正在阅读 Raft 扩展的论文,上面有声明。另外我在网上发现了一个声明,说如果有 2*f+1
个服务器,f
个服务器的故障是可以容忍的。很明显还有另外两台服务器 f=1
。有没有归纳法证明?
一旦您意识到要使任何操作成功,它必须在大多数服务器上成功完成,这是很直观的。即在出现差异的情况下,至少法定数量的服务器必须同意相同的值。
对于 2 个服务器,两个服务器必须同意大多数。
对于 3 个服务器,必须至少有 2 个同意才能达到多数。
对于 4 个服务器,必须至少有 3 个服务器同意才能达到多数。
对于 5 个服务器,必须至少有 3 个同意才能达到多数。
即对于 n
个服务器,n/2 +1
个服务器必须一致。
因此对于 n
个服务器,能够承受 失败 的服务器数量是 n - (n/2+1)
。
这意味着 2n
个服务器,它是 2n - (2n/2 + 1)
。
因此对于 2n +1
个服务器,它是 2n - (2n/2 + 1) + 1
,这简化为 n
个服务器。
我正在阅读 Raft 扩展的论文,上面有声明。另外我在网上发现了一个声明,说如果有 2*f+1
个服务器,f
个服务器的故障是可以容忍的。很明显还有另外两台服务器 f=1
。有没有归纳法证明?
一旦您意识到要使任何操作成功,它必须在大多数服务器上成功完成,这是很直观的。即在出现差异的情况下,至少法定数量的服务器必须同意相同的值。
对于 2 个服务器,两个服务器必须同意大多数。
对于 3 个服务器,必须至少有 2 个同意才能达到多数。
对于 4 个服务器,必须至少有 3 个服务器同意才能达到多数。
对于 5 个服务器,必须至少有 3 个同意才能达到多数。
即对于 n
个服务器,n/2 +1
个服务器必须一致。
因此对于 n
个服务器,能够承受 失败 的服务器数量是 n - (n/2+1)
。
这意味着 2n
个服务器,它是 2n - (2n/2 + 1)
。
因此对于 2n +1
个服务器,它是 2n - (2n/2 + 1) + 1
,这简化为 n
个服务器。