HA(High Availability),集群高可用服务,分为主机高可用和虚拟机高可用;在服务器故障时,HA特性可以在其他服务器上重启虚拟机。
HA场景分为以下三种
主机故障HA(真HA):当主机因为某种原因故障,比如主机宕机,HA会通过状态检测机制发现主机故障,并在其他合适节点尝试恢复故障主机上的虚拟机。
网络中断(假HA):当机房网络环境出现故障,比如交换机故障或者主机网卡故障,HA会通过状态检测机制发现网络断开。
虚拟机故障:当虚拟机因为某种原因故障,比如虚拟机蓝屏,HA会通过虚拟机状态检测机制发现虚拟机故障,并在本节点通过重启来尝试恢复虚拟机。
HA特性原理
- 虚拟机高可用:高可用子系统会实时监控集群中已注册保护的虚拟机的运行状态,如果发现虚拟机出现异常,高可用子系统会通过多种途径(虚拟机的心跳、磁盘IO和网络IO)对该虚拟机进行故障确认,保证故障检测的准确性,减少误判。如果虚拟机被确认为故障,高可用子系统会在集群中其他合适的主机上重启故障的虚拟机。故障切换成功后,可以继续使用之前的虚拟机。
HA机制
VRM与主机之间的心跳检测: 此检测的作用是用来保证vrm是否能有效感知CNA节点是否异常。
- CNA主机侧的心跳由vnad服务提供。
- 主机每间隔3s会向vrm主动上报心跳,如果连续10次,即30s内主机没有向vrm上报心跳,则vrm会置此主机为“故障”状态,此时FC-Portal上会有“主机与vrm心跳异常的告警出现。
- 主机每次向vrm上告心跳的时候都有超时机制,超时时间均为10s,如果vrm服务有异常或网络出现异常,都可能导致出现超时。
- vrm侧每收到一个主机侧发来的心跳就会将心跳频率heartBeatFreq变量设置为10(默认为10,此值可以通过修改配置文件修改),检测线程每3s会将该值-1,同时对该值当前值进行判断,如果<=0,则认为此值对应的主机节点异常,在FC-Portal 上报告警,同时会把此主机异常的消息发送给CRM进行虚拟机HA机制判断。
心跳告警触发可能情况
- 在vrm和CNA主机之间心跳走管理平面网络,当此网络平面出现闪断、断链、或拥塞的时候可能会导致心跳通信异常,触发此告警。
- vnad服务异常时候可能触发心跳通信异常,触发此告警。
- CNA主机节点负载过高也有可能导致心跳通信异常,触发此告警。
虚拟机HA触发条件
- 主机与VRM通信异常,VRM认为主机为“故障”状态。
- 虚拟机所在主机对每个数据存储LUN的前4K上的心跳卷没有写入动作,则认为主机确实故障。
如何判断真假HA
- 同时满足上面两个条件触发真正HA,只满足网络异常而虚拟机还有存储写入操作则是假HA,虚拟机不会在别的主机上重启。
影响HA时间的因素
虚拟机规格大小。
主机侧的心跳检测阈值时间,配置项(HOST_STATUS_CHECK_TIMES=10),CNA节点每隔3s向VRM节点上报一次心跳,因此默认的主机故障感知时间为:30s = 3s * 10 times,升级过程中(升级工程提交之前)为:10min/600s = 3s * 200 times。综上,需要注意在升级过程中虚拟机的HA感知时间是比较迟钝的,如果对故障感知和恢复时间有强烈需求则可以在升级工程提交之前先手动修改配置项为10,重启vrmd服务生效。
触发HA时可选主机数量:可选主机数量越少,受限于主机对虚拟机启动的最大并发数,HA时间会相应增加;反之,可选主机数量越多,HA时间越少。
主机关机流程:
- 关闭守护进程
- 关闭nc主进程,此时会出现vrm与主机心跳异常
- 串行关闭主机上所有虚拟机,此种关机为安全关机(耗时较长)
- 关闭卷监控进程
由上可知,主机故障的时候,是需要在主机上所有的虚拟机均被串行关闭之后才会触发虚拟机HA,因为只要卷监控服务不停止,那么及时虚拟机被关闭了,虚拟机的磁盘心跳还是在的,因此并不会真正触发虚拟机HA,而卷监控进程是在所有虚拟机杀死之后才停掉,对外表现为需要等主机上的所有虚拟机停止后才触发主机上虚拟机的HA。