关于XenServer的高可用,这篇都说清楚了
概述
随着云计算市场的快速发展,用户对服务的实时性需求越来越高,系统的稳定性和可用性显得尤为重要。高可用性HA(High Availability)可以做到尽量缩短日常计划维护的操作和突发的系统崩溃所导致的停机时间,以提高系统和应用的可用性。所以HA是目前云计算中防止核心计算机系统因故障停机最有效的手段。那么在本文中我们一起探讨一下,高可用性在XenServer中是如何应用的。
前文回顾:还记得三大虚拟化技术之一的XenServer吗
高可用集群(HA):
高可用集群在指发生单点故障时,可以从其他正常工作的节点中选出一个节点替换故障节点,继续提供服务,即将有故障节点上的资源和服务转移到工作正常的节点上。保证服务不中断,一直在线,用户对底层的资源切换无任何感知。
XenServer的HA尽量保持VM一直处于运行状态,即使当管理员不在时,发生资源池中的硬件损坏。下图中展示了包含HA的资源池,两个主机之间网络连接出现问题前后的变化。
XenServer在启用HA时,资源池中所有的主机,通过网络定期交换心跳信息,并将心跳信息发送到共享存储设备,不断尝试获取共享存储的“master lock”权限。
XenServer HA旨在发生单点故障后,消除单点故障的影像,尽可能在剩余资源池上运行业务。首先需要找出属于最大全连接组(以下简称“liveset”)的VM,用“master lock”选择一个Master,重启丢失连接的VM。
XenServer HA实现的主要组件有xapi、xen、xhad。
Xapi用于配置HA策略,即哪些网络存储用于心跳,发生故障之后哪些VM需要重启。配置和管理xhad心跳守护进程。Xapi在本地数据库主要存储了两个设置:1.ha_disable_failover_actions通常设置为false,表示节点可以恢复VMs,在HA禁用过程中设为true,防止仅部分启用HA发生脑裂 2. ha_armed设为true表示xapi在host启动加入liveset时启动xhad
Xen主要应用于主机被集群部分或完全隔离时,xen的监控程序保证主机的隔离。
Xhad是集群成员守护进程,通过网络和存储心跳维护集群中的主机。Xhad是通过在每个主机/etc/xensource/xhad.conf中进行配置,高可用集群中,每个主机上该配置文件都必须保持一致,如果不一致将导致HA不可用。Xhad.conf是用XML编写的,包含了资源池范围配置和本地主机配置。资源池范围配置包括集群所有活动的主机及全局超时信息。本地主机配置记录了本地主机的信息及用于本地网络接口和块存储的心跳设备。以下是xhad.conf文件示例:
<?xml version="1.0" encoding="utf-8"?>
<xhad-config version="1.0">
<!--pool-wide configuration-->
<common-config>
<GenerationUUID>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</GenerationUUID>
<UDPport>694</UDPport>
<!--for each host, specify host UUID, and IP address-->
<host>
<HostID>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</HostID>
<IPaddress>xxx.xxx.xxx.xx1</IPaddress>
</host>
<host>
<HostID>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</HostID>
<IPaddress>xxx.xxx.xxx.xx2</IPaddress>
</host>
<host>
<HostID>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</HostID>
<IPaddress>xxx.xxx.xxx.xx3</IPaddress>
</host>
<!--optional parameters [sec] -->
<parameters>
<HeartbeatInterval>4</HeartbeatInterval>
<HeartbeatTimeout>30</HeartbeatTimeout>
<StateFileInterval>4</StateFileInterval>
<StateFileTimeout>30</StateFileTimeout>
<HeartbeatWatchdogTimeout>30</HeartbeatWatchdogTimeout>
<StateFileWatchdogTimeout>45</StateFileWatchdogTimeout>
<BootJoinTimeout>90</BootJoinTimeout>
<EnableJoinTimeout>90</EnableJoinTimeout>
<XapiHealthCheckInterval>60</XapiHealthCheckInterval>
<XapiHealthCheckTimeout>10</XapiHealthCheckTimeout>
<XapiRestartAttempts>1</XapiRestartAttempts>
<XapiRestartTimeout>30</XapiRestartTimeout>
<XapiLicenseCheckTimeout>30</XapiLicenseCheckTimeout>
</parameters>
</common-config>
<!--local host configuration-->
<local-config>
<localhost>
<HostID>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx2</HostID>
<HeartbeatInterface> xapi1</HeartbeatInterface>
<HeartbeatPhysicalInterface>bond0</HeartbeatPhysicalInterface>
<StateFile>/dev/statefiledevicename</StateFile>
</localhost>
</local-config>
</xhad-config>
参数说明:
GenerationUUID:每次重新配置HA时生成的一个UUID。这个参数可以让Xhad做到通知故障节点,已将它从配置中移走,HA系统重置,UUID已经发生变化。
UDPort:用于心跳的端口号。需要确保所有的主机上该端口号未被其他进程占用,并且没有被防火墙屏蔽。
HostID:标识资源池中主机的UUID。
IPaddress: 远程主机的IP地址,通常配置xapi的管理网。
HeartbeatTimeout: 设定心跳包接收的超时时间。如果超过这个时间没有收到心跳包,xhad认为心跳失败。用“T”来表示, T必须大于10,通常使用60秒。
StateFileTimeout:如果在设定的时间内没有得到主机存储的更新,那个xhad认为存储心跳连接异常。一般设置和HeartbeatTimeout相同的时长T。
HeartbeatInterval: 心跳包发送时长间隔。通常使用2<=t<=6,根据HeartbeatTimeout 的值通过公式t=(T+10)/10计算得出。
StateFileInterval:存储更新间隔时长,通常跟HeartbeatInterval设置为一样的值。
HeartbeatWatchdogTimeout:如果主机在设置的时间内没有发送心跳,则主机监视程序开始防护,通常设置为T。
StateFileWatchdogTimeout:如果主机在设置时间内没有更新文件状态,则主机监视程序开始防护,通常设置为T+15
BootJoinTimeout:当主机启动并加入集群时,如果超过设置的值,将视为加入失败,通常将该值设置为T+60
EnableJoinTimeout:当主机首次启动HA时,如果超过该设置时长,则认为加入失败。通常将该值设置为T+60
XapiHealthCheckInterval:“运行状况检查”的间隔时长,通过运行脚本检查xapi是否响应
XapiHealthCheckTimeout: 假设xapi死锁之前等待时长
XapiRestartAttempts:停止未响应的xapi之前,尝试重启xapi的最大次数
XapiRestartTimeout:重启xapi等待时长
XapiLicenseCheckTimeout: xhad终止之前等待xapi 许可证检查时长
最新活动更多
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
即日-2025.8.1立即下载>> 《2024智能制造产业高端化、智能化、绿色化发展蓝皮书》
-
精彩回顾立即查看>> 2024先进激光技术博览展
-
精彩回顾立即查看>> 全数会2024中国深圳智能制造与机器人展览会
-
精彩回顾立即查看>> 2024(第五届)全球数字经济产业大会暨展览会
-
精彩回顾立即查看>> 维科杯·OFweek2024中国工业自动化及数字化行业年度评选
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论