![从数学上讲,如何根据节点数及其各自的正常运行时间百分比来计算正常运行时间百分比?](https://linux22.com/image/685845/%E4%BB%8E%E6%95%B0%E5%AD%A6%E4%B8%8A%E8%AE%B2%EF%BC%8C%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E8%8A%82%E7%82%B9%E6%95%B0%E5%8F%8A%E5%85%B6%E5%90%84%E8%87%AA%E7%9A%84%E6%AD%A3%E5%B8%B8%E8%BF%90%E8%A1%8C%E6%97%B6%E9%97%B4%E7%99%BE%E5%88%86%E6%AF%94%E6%9D%A5%E8%AE%A1%E7%AE%97%E6%AD%A3%E5%B8%B8%E8%BF%90%E8%A1%8C%E6%97%B6%E9%97%B4%E7%99%BE%E5%88%86%E6%AF%94%EF%BC%9F.png)
这个问题更多的是一个数学问题而不是服务器问题,但它与服务器密切相关。
如果我有一台服务器,可以保证 95% 的正常运行时间,并且我将这台服务器放入 2 个服务器的集群中,那么正常运行时间会是多少?现在,假设我做同样的事情,但我将它设置为 3 个服务器的集群?
我们先不考虑单点故障之类的问题,而是纯粹关注这里的数学。让这个问题变得有点复杂的一个原因是,例如,如果我有 2 台服务器,那么它们都关闭的概率是 2^2,也就是 1/4;或者对于 3 台服务器,概率是 2^3,也就是 1/8。考虑到每台服务器的停机时间为 5%,那么总平均值会是这 5% 的 1/8 吗?
您将如何计算这样的事情?
答案1
正常运行时间是一个难以预测的事情...如果你想计算一个系统的可用性服务那么它只是
amount of time service is available
----------------------------------- x 100
amount of time that has passed
如果您有一个提供服务的集群,那么该服务不可用的可能性会降低,但该服务的可用性(正常运行时间)计算保持不变。
答案2
一台服务器离线的概率是 (1 - 0.95) 两台服务器都离线的概率是 (1 - 0.95) * (1 - 0.95) = 0.0025 等等...
因此,使用你的模型并从纯数学角度来看,其中一个或两个服务器应该在 99.75% 的时间内处于运行状态
但是,我不确定使用这样的数学模型是否是计算潜在正常运行时间的正确方法,因为还有其他因素可能会影响它,这些因素对两台服务器来说都是共同的,例如,95% 可能是因为 5% 的时间断电,这会影响两台服务器,因此拥有集群不会有什么区别
答案3
这取决于您的服务器为何有 5% 的时间处于宕机状态。如果您的服务器 95% 的时间都有电,但其他方面都没有问题,那么在同一位置再添加一台服务器不会增加您的正常运行时间根本:如果其中一个发生故障,则两个都会发生故障。这是故障的示例相关的。您的停机时间至少有一部分可能是由于影响所有服务器的错误(电源……)。但部分停机时间将是独立的服务器之间。如果你想正确地做到这一点,你应该分别处理这些事情。因此,你想计算出服务器 1 没有独立错误 (p) 和服务器 2 没有独立错误 (q) 的概率,并且没有导致两者同时失败的系统性错误 (r)。假设这些错误是独立的,这样相对安全,因此你可以将它们相乘:p问r 是某个服务器正常运行的概率。
问题是,您不能使用实际正常运行时间数据来为您提供 p、q 和 r 的值,除非您只有服务器 1 并且它 95% 的时间正常运行,则 p*r = 0.95。
答案4
我进行了进一步的挖掘并找到了这个谜题的一部分。
以可用性为 95% 的服务器为例,添加第二台服务器将使可用性提高到:95% + (1-95%)*95% = 99.75%。其背后的逻辑是,当第一台服务器停机(5% 的时间)时,第二台服务器仍然有 95% 的时间处于运行状态。
添加第三台服务器将以相同的方式进行迭代。前两台服务器加起来已经是 99.75% 的可用性,因此添加第三台服务器将是:99.75% + (1-99.75%)*95% = 99.9875%。依此类推。这与 Phil 的答案很接近,但仍有一点不同,因为您需要获取上一次迭代的结果并在下一次迭代中使用它。
对于相互依赖的组件,只需将可用性百分比相乘,因此,如果有 2 个可用性为 50% 的组件,则总可用性为 25%(即,只有当两个组件都工作时系统才能工作。)