一、XenServer HA概述

XenServer HA是一套全自动功能设计,规划,安全地恢复出现问题的XenServe 主机上的虚拟机的功能组件。

启用 HA 后,XenServer 将持续监视池中主机的运行状况。如果当前 VM 主机发生故障,HA 机制会自动将受保护的 VM 移动到一台运行状况良好的主机上。此外,如果发生故障的主机是Pool MasterHA 会自动选择另一台主机来接管Pool Master的角色,以便XenServer 资源池能够继续正常的工作。

XenServer HA通过多个检测信号机制来定期检查主机。这些检测信号使用存储接口(至检测信号 SR)和网络接口(通过管理接口)进行信号的检测和传递。这两种检测信号路由都可以是多宿(多连接)的,以防止产生误报,从而进一步提高可靠性。

要实现XenServer HA功能,只要满足以下几个条件:

1虚拟机必须置于共享存储中,例如iSCSIFC SANNFS

2需要两台以上的XenServer,并且设置了资源池,Citrix最佳实践建议使用3XenServer及以上时设置HA

3所有XenServer有静态管理IP地址;

4购买的XenServer版本需要支持HA

 

下图显示了在启用HA的资源池中,前后两个主机之间的网络链路发生故障后,虚拟机所进行的自动迁移过程。

XenServer架构之HA概述_检测

当启用HA时,池中的所有主机:

  • 通过网络定期交换心跳消息;

  • 发送心跳到共享存储设备;

  • 不断尝试获取共享存储的“Master lock”权限。

HA设计就是为了避免一台物理主机损坏出现单点故障,因此需要它消除在出现单点故障后尽可能的不影响资源池的运行和上面虚拟机的运行。

  • 首先需要找出这些虚拟机是否处在最大的全连接设置状态(以下简称“liveset”状态);

  • 如果这些虚拟机不是在最大的全连接状态,那么这些虚拟机就会根据“受防护”的策略进行相应操作(即通过虚拟机管理程序重启);

  • 选择Master使用“Master lock”进行锁管理;

  • 重新启动所有在HA保护下丢失连接的虚拟机。

通过HA可以更快的恢复资源池运行,因为资源池一旦出现故障,资源池剩余的池成员可能无法应付任何更多的故障,采用HA在故障产生的第一时间进行自动恢复,可以保证有充足的资源应对随时可能下一次故障。

HA绝不能违反以下安全规则:

  • 在任何时候必须有一个而且最多只有一个Master。这是因为需要Master来保护VM,同时控制磁盘锁。

  • 在任何时候一个特定的虚拟机必须有一个特定的实例。这是因为启动同一个VM两次会导致严重的文件系统损坏或崩溃。

然而HA更加重要的地方还在下面的这些选项里:

  • 快速检测故障;

  • 在故障检测中尽量减少误报的数量;

  • 使故障处理逻辑尽可能可靠。

当试图在同一时间既需要快速精确又需要安全可靠的时候,实施起来的困难就应运而生了。

在描述本文中我们使用下面的术语:

  • fencing:又称I/O防护,指的是从网络和存储中隔离一个主机的行为。一旦主机已经被隔离起来,其上任何虚拟机运行就不可能被第三方检测到并因此而产生相应操作。这意味着这些虚拟机可以安全的在另一个节点上重新启动起来运行而不违反安全规则,并在两个主机上同时运行相同的虚拟机。

  • 心跳:定期根据预先安排的时间间隔与其他主机交换状态更新。心跳正常的消息主要表明主机还处于活动状态,并且I/O路径均工作正常。

  • 状态文件:共享磁盘(也称为“仲裁磁盘”)的“心跳”SR被映射为一个块设备并链接到每个主机的Dom 0当作共享磁盘,并作为心跳消息的通道,也可以作为一个资源池的主锁定块磁盘,以防止多台主机违反安全规则(其中一种比较危险的情况也被称为裂脑)。

  • 管理网络:这是Xen APIXML / RPC请求流量,也可用于发送心跳消息网络。

  • liveset:每个主机视图包含在由主机认为活动状态即响应XenAPI命令运行并在资源池中被Master标记为resident_on的虚拟机的子集。Liveset子集上的虚拟机被视为是运行在一个安全的主机上的,假如在当主机B出现故障时,主机B此时已经被隔离起来,那么主机B上的Liveset子集虚拟机在不违反任何的安全规则的前提下就需要采取恢复措施(如重新启动虚拟机)。

  • 正确共享SR:其中SRshared = trueSR属性;并根据PBD连接到池中的每台主机;而其中每个PBD相关的已currently_attached的字段设置为true。如果VM其磁盘起正确的共享SR上,那么如果主机的内存和网络允许的情况下,允许在任何主机重新启动。

  • 正确共享网络:有一个PIF将其连接到池中的每个主机并启用该网络;而其中每个的PIF已将currently_attached的字段设置为true。一个VM将主机的VIF连接到适当的主机共享网络,在主机内存和存储允许的情况下允许在任何主机重新启动。

  • agile:一个虚拟机的表示状态,即表示虚拟机连接到正确的共享出错率和正确的共享网络中。

  • unprotected(无保护):未受保护的虚拟机,其虚拟机的配置字段ha_always_run设置为false,将永远不会在主机故障的情况下受到HA的保护而重新启动。

  • best-effort:处于该状态的虚拟机,在主机出现故障的时候竟可能的在该台主机上进行重新启动,不受HA的策略操作。一个best-effort的虚拟机的配置字段ha_always_run设置为trueha_restart_priority设置为best-effort。一个best-effort的虚拟机如果处于(生存法则1)那么在主机出现故障时,虚拟机将仅被重新启动一次;如果一个best-effort的虚拟机处于(生存法则2)那么在主机出现故障时,虚拟机将会立即重新启动,直到虚拟机重新成功启动为止。

  • protected:受HA保护的虚拟机。高虚拟机的配置字段ha_always_run设定为true,且虚拟机配置字段ha_restart_priority没有设置为best-effort

  • 生存法则1:该生存法则指在宿主主机生存,因为这些虚拟机无法通过网络获取状态文件。这是xhad守护进程的正常状态。

  • 生存法则2:描述中的所有主机都丢去了访问状态文件的连接或权利,但主机仍然处于活动状态,并且这些主机都可以在网络上看到对方,即通过网络心跳可以检测到对方的回复。在这种状态下任何进一步的故障都会导致所有节点进行自动隔离,即断开于网路心跳和存储心跳的检测和连接。这种状态是为了应付存储状态文件的存储服务暂时失效的情况。

 

所有I/O用于监控主机的运行状况(即基于存储和基于网络的心跳)是相互冗余的路径,使得她在单一硬件故障下也正常生存(例如一个开关偶然关掉或拔出电缆)。这个时候根据其中一方心跳的信息维持相应的生存法则,并进行相应报警告知管理员进行修复,以确保环境在不必要的条件下生效HA的安全规则,从而迁移虚拟机并重启

同时管理程序监视机制将能保证一旦预先安排的时间段之内通信失效节点的隔离。

如果一台虚拟机被标记为agile(受保护的),那么该台虚拟机就是完全灵活的,即可以在任何主机上运行。但是其任何形式的附加约束是无法在其他主机上被重现的,比如指定``CPU预留''

资源池假定为对同质CPU的类型和存在的VT / SVM支持(也称为“HVM”)。如果一个池使用--force标志不均匀的主机,这等于是创建了额外的限制,那么在主机故障的时候,有可能导致HA切换策略操作不生效。

同时XenServer 会动态维护故障转移方案,该方案详细说明了如果池中的一组主机在任意给定时间出现故障时应执行的操作。其中一个重要概念是允许的主机故障数,该值作为 HA 配置的一部分进行定义。该值确定在不丢失任何服务的情况下所允许的故障数。例如,如果资源池包括 16 台主机,而允许的故障数的设置为 3,则池将计算故障转移方案,该方案允许任意 3 台主机出现故障,并仍然能够在其他主机上重新启动 VM。如果找不到方案,则会认为该池使用过量。方案根据 VM 生命周期操作和移动动态地进行重新计算。如果所做的更改(例如将新 VM 添加到池)导致池使用过量,则会发送警报(通过 XenCenter 或电子邮件)。

同时在进行虚拟机的重启和迁移的时候,将永远作出关闭或挂起“低”优先级的虚拟机,以保证“较高的”优先级的虚拟机的生存。在设置HA的时候,虚拟机需要分配一个重新启动优先级和一个标志状态,以指示是否应该受到保护以及受到保护的级别。

启用HA时,尽一切努力保护的虚拟机。如果服务器出现故障运行的虚拟机将迁移到另一台服务器上启动,根据优先级规定,任何受保护的虚拟机将自动启动或停止。重新启动优先级的说明:

XenServer架构之HA概述_虚拟机_02

对于那些重要的虚拟机以及处于共存存储上的虚拟机应给予重新启动优先级0。所有次要的虚拟机应分配一个优先级12优先级。重新启动优先级是确定在发生故障时,XenServer尝试启动虚拟机的顺序。虚拟机重新启动优先级0123,这样可以保证服务器故障的时候,按照预先安排好的既定数量的有序重新启动虚拟机。

同时XenServerHA需要特定的容量来保证重新启动计划的成功。如果资源池遇到服务器故障并进入HA切换状态的容量不足以全部切换完毕,剩下受保护的虚拟机将不再保证重新启动。如果这个条件到达时,系统将生成警报。如果一个受保护的虚拟机在服务器发生故障的时候无法重新启动(例如,资源池故障发生时容量已使用完毕,这时再次故障),启动此虚拟机的进一步尝试将根据资源池的容量变化的状态来进行。这意味着,没有资源的情况下HA不会生效,并且切换计划会一直进行尝试。

还应该说明的是,一旦启用HA,资源池是不可能重新配置管理网络以及用于存储心跳的SR的。同时在启用HA的时候,还存在一个HA配置数据库,该数据库配置为“心跳”的所有更新写入心跳”SR,以保证主机失败时,虚拟机配置更改不会丢失。