一、集群可用性
集群可用性(availability)指集群正常运行时间的百分比,业界用 N 个9 来量化可用性,最常说的就是类似“4个9(也就是99.99%)”的可用性。
描述 | 通俗叫法 | 可用性级别 | 年度停机时间 |
基本可用性 | 2个9 | 99% | 87.6小时 |
较高可用性 | 3个9 | 99.9% | 8.8小时 |
具有故障自动恢复能力的可用性 | 4个9 | 99.99% | 52分钟 |
极高可用性 | 5个9 | 99.999% | 5分钟 |
二、理论及实际可用性
理论可用性指在不考虑程序Bug,未知异常导致的系统崩溃情况下的可用性,其值由各种可以预见的故障及其影响时间范围决定。实际可用性指在系统实际运行过程中的可用性,比如一个系统计算得到理论可用性为4个9,但是因为一个Bug导致集群宕机了一个小时,则其实际可用性也就达不到4个9。
三、正常运行时间
集群不可用可以指节点宕机,io 处于完全中断场景下的不可用,此时如集群宕机 1min,则不可用时间为1min;如果一台物理机宕机1min,影响io占10%,则不可用时间为6s。
也可以指在如网络故障时,io时延超过上限情况下的不可用。比如对于一个SSD集群,单次io超过10ms则认为不可用,假设正常情况下,所有的io都可以在10ms内返回,即集群100%可用。如果某次故障网络抖动10min,期间有20%的io时延超过10ms,则不可用时间为2min。
四、可预期故障
集群理论可用性即为计算各种可预期故障对于集群的影响。如对于一个分布式副本集群来说,可预期的故障主要有:
1、磁盘故障(磁盘年故障率、磁盘数)
2、机器故障(机器年故障率、机器数)
3、升级节点影响
4、其他
五、用户io模型
发生故障时,在相同的 obj 影响比例下,用户 io 模型的不同对于系统可用性的表现也有着很大的关系。
弱相关模型:理想情况下,用户的每次 io 都是独立的,一次 io 卡住并不会影响其他io的执行。如虚机开启20个线程,每个线程独立的下发io,io完成后该线程可以继续下发其他的io,与其他线程io是否完成无关。
强相关模型:该场景下,即使故障并不影响本次 io 的执行,但是因为相关的其他 io 被阻塞,导致了本次的io也无法继续执行。如虚机开启了20个线程,这20个线程同时下发20个io,需要等待这20个io全部返回后,才继续下发下一批io。强相关模型会极大的增加系统受影响的范围比例。
六、实例计算
6.1、集群参数设置
三副本集群,120 台机器,分为3个zone,每个zone 40台机器,每个机器开启12个节点,每个节点挂载一块800G SSD盘。
磁盘年故障率:0.44%
机器年故障率:2%
SSD磁盘时延:2ms,由该时延推导可得单线程最大iops为500。若虚机开启20个线程,则虚机最大iops为10000。
6.2、节点升级影响
若单个节点升级过程中其上的 obj 有 1s 不可用。每个zone 40台机器,每个机器12块盘,受影响的obj比例为1/480。对于弱相关模型,单个线程期望为执行480次io后hang。而单线程最大iops为500,升级过程中性能下降到了原来的480/500=96%。可以认为1s内几乎没有影响。升级整集群不可用时间为0。
对于强相关模型,因为所有的线程 io 都相关,也是期望执行 480 次io后卡住,20个线程总iops为10000。此时性能为原来的480/10000 = 4.8%。在1s内几乎所有的io hang。升级整集群不可用时间为1371s。
6.3、单块磁盘故障影响
假设单块磁盘故障会影响其上的 obj 15s。计算同升级,只是将时间延长到了15s。
同理,弱相关模型单线程期望执行 480 次 io 后hang,iops为500, 15s总 io为7500。性能下降到480/7500=6.4%。故障时不可用时间为14s。
强相关模型性能下降到 480/150000=0.32%。故障时不可用时间为15s。
6.4、机器故障影响
同单块磁盘故障影响,也会影响其上 obj 15s,只是范围扩大到了其上所有磁盘。
此时强弱模型得到的结果都为影响 15s。
6.5、集群不可用时间
弱相关模型
单次升级影响:0s。
磁盘故障影响:1440 * 0.44% * 14 = 88.7s。
节点故障影响:120 * 2% * 15 = 36s。
强相关模型
单次升级影响:1371s。
磁盘故障影响:1440 * 0.44% * 15 = 95s。
节点故障影响:120 * 2% * 15 = 36s。
此时若要满足4个9的要求,每年仅支持升级2次。