XenServer在启用HA的情况下可能在某些特殊情况下,会对存储数据存在威胁,citrix针对这种情况设计了一种Self-fense的保护机制,用来保持存储数据的安全可靠。

在开启HA的情况下,XenServer对Pool(资源池)的检测机制主要基于两种:

  • 存储连接(心跳存储)
  • 网络连接 (管理口池心跳)

XenServer为了绝对确认某台主机是无法访问的,使用以上两种机制来检查主机是否可用。而且这两种信号也是多宿的(存储的多路径,以及管理口的bond),进一步提高检测的可靠性,避免误报。

XenServer发现两种检测机制中有一种出现故障(网络问题或者控制堆栈问题),那么XenServer 为了确保VM没有同时在两台主机上运行,会采取保护措施,使服务器突然立即重启。在 HA最坏的场景就是host被认为是off-line(比如,管理口或者存储心跳连接有问题),但其实正在运行,并在对存储进行写操作,这个时候,如果再在其他host启动VM,就可能导致存储数据的损坏。

为了解决这种问题,XenServer设计一种hypervisor-level fencing,底层的主机保护机制。这种机制比较生猛,基本是非常low-level(低级)的hard-powers来保护数据安全。

host将在 以下两种情况下启动自保护(self-fence)来关机或者重启host,达到保护主机的目的:

  • 存储心跳正常,但是管理口通信异常。此时,网络正常和网络异常的主机基本分为两组,数量较少的一组将self-fence。
  • 存储心跳异常,但是管理口通信正常。此时,hosts将在pool中检查各主机之间通信是否正常,如果全部OK,那么xenserver认为是心跳存储异常。

说明:今天三宅一猫在2台XenServer HA测试中,存储HBA正常,管理口异常(拔下一台XenServer网线),另外一台XenServer会重启。不好解释,只能接受实际测试结果。

所以,HA的情况下,可能会由于self-fence导致XenServer主机的重启 ,详细的机制还有待官方文档的更详细解释。