XenServer Native HA with CloudStack

前言

能力有限,翻译如果有错误,希望大家多多指正。共同学习交流。

关于作者

Geoff Higginbottom是云计算战略咨询公司ShapeBlue公司的CTO和云架构师。 Geoff花费了很多时间,为telco's、ISP's以及企业设计基于CloudStack的私有&公有云基础设施。


原文链接:

http://shapeblue.com/cloudstack/xenserver-native-ha-with-cloudstack/



警告: 如果你已经在基础设施是XenServer 6.2的环境中安装了补丁 XS62ESP1004 且还未启用Pool的HA功能, 那么一旦Pool的Master节点宕机,Slave节点不但不会接管成为Pool的Master角色,并且在XenCenter中将丢失和服务器的连接。所有的主机将在CloudStack中显示为Alert状态,所以这将降低你的CloudStack云的功能性。该篇文章将会涉及到如果正确的配置池的HA以及如何管理启用HA功能的XenServer。

简介

传统上当使用 Citrix XenServer和Apache CloudStack / Citrix CloudPlatform (在本文的其他内容中统称为CloudStack)时, 虽然CloudStack会处理所有的HA事件,但XenServer HA 特性并不会被启用 。 而发布的XS62ESP1004做了些改变。

XS62ESP1004的发布,XenServer在丢失Master以后处理方式改变了,而不用再手动推选Slave成为Master。XenServer Pool现在拥有了“自愈”功能,可以进行自我修复,这是一个好消息,但是你需要做一些额外的配置,才能看到这个神奇的事情发生。

最重要的是要明白CloudStack仍然控制所有VM的HA事件,所以我们不能把VM的控制权交给XenServer。事实上我们在做的所有事情只是启用‘Pool Master HA’, 以便在Pool的Master发生故障时,一个新的Master会被推选。

配置Pool HA

第一步是确保Pool中所有的主机都已经安装了 XS62ESP1004 补丁。如果部署新的XenServer服务器供CloudStack使用,那么最佳实践是首先安装好适当的补丁,然后再将主机添加到CloudStack中。

一旦池中所有的主机网络及绑定等配置完毕以后,你需要为Pool Master HA机制创建一个专属的存储仓库, 通常我将这个作为Pool HA管理要素的存储命名为“MGMT-HA”。可以挂载使用NFS或iSCSI并且只需要1GB空间足矣。 重要的是该存储只是用来做HA,而无需作为主存储添加到CloudStack中。

待SR配置完毕并上线后, 下一步便是启用HA。你可以通过XenCetner UI  来启用HA, 然而有个风险,你可能在无意中启用了VM HA,这将导致一些不必要的问题发生。另外你可以能需要定期关闭并重新启用HA,所以当需要时,使用一个统一的脚本启用/重新启用 HA是一个很好的选择。 

将下面这个脚本保存至XenServer主机中 (可以在任意主机中运行该脚本,不仅限于Pool Master)注意该脚本引用的SR名称为“MGMT-HA”,如果你的命名规则不同,切记要更换匹配为你的SR名称。

#!/bin/bash
MGMTHAUUID=`xe sr-list name-label=MGMT-HA --minimal`
xe pool-ha-enable heartbeat-sr-uuids=$MGMTHAUUID
echo "Pool HA is now enabled"

 

现在运行脚本并等待确认消息“Pool HA is now enabled”可能需要几分钟,请耐心等待。

查看下XenCenter中的配置,HA并未启用,这情有可原;事实上HA已经启用, 但只针对Pool Master,并非仍然受CloudStack保护的VMs。

wKioL1S6KEbijZ6rAAG6_clQnAs549.jpg


不幸的是,XenServer Pool启用Pool HA会带来一些额外的并发症,所以请继续阅读下文,学习如何处理故障和如何执行重启计划等。

主机故障的自动处理

如果Pool Master主机宕机,Slave会接管成为Master并且宕机的Pool Master上面运行的所有虚拟机将自动在备用主机中重新启动, 但需要在虚拟机的计算方案中启用“Offer HA”特性。

CloudStack仍然会处理虚拟机的重新启动,在新的Pool Master已经接管且失控时间超过全局参数设置的‘alert.wait’后将开始重新启动  下述系统测试中,将 alert.wait 的值设置为 60 秒。 默认值为‘空’,一旦CloudStack检测到主机宕机,这将导致30分钟的延迟

以下时间演示在生产系统中进行故障测试。Apache CloudStack版本为4.3.2,物理主机为思科UCS,运行XenServer 6.2,并安装所有可用补丁(更新至XS62ESP1014)。 使用SolidFire存储,由Cisco设备提供10G网络。运行10台Windows 2008 R2 虚拟机,以及部分系统虚拟机。 两个群集同时测试,且每个群集有4台主机。所有的虚拟机均运行在Pool Master主机上,用于模拟可造成最大影响的故障。测试开始时进行秒级别的计时:

Start �C 通过CIMC切断Pool Master主机电源模拟故障

01:15 �C XenCenter检测到主机故障且失去连接

03:00 �C XenCenter重新连接到新的Pool Masters

03:15 �C CloudStack确认主机故障

03:30 �C CloudStack在主机宕机时间超过配置的60秒(通过 alert.wait 参数调整)以后,启动VM的HA

05:30 �C 所有的包括10个Windows虚拟机和系统虚拟机在 CloudStack 显示为‘Running’状态

总结,在两个集群的XenServer Pool Master都故障,这个糟糕的情况下,经过5分钟30秒,10个Windows 虚拟机,4个虚拟路由器和3个系统虚拟机重新上线,管理员没有做任何干预。

从主机故障中恢复

如果“故障”的Pool Master被加电后重新恢复运行  ,此时也无法通过XenCenter进行访问。

为了使它恢复正常并且可以通过XenCenter进行访问时,你需要禁用Pool HA和主机HA, 此时它还认为它是Pool Master,并会进入‘Emergency Mode’。首先使用XenCenter关闭Pool的HA,然后再恢复的主机中运行如下命令:

xe host-emergency-ha-disable --force

经过短暂的延迟后主机将作为Slave重新连接到Pool中,然后在CloudStack重新上线。

如果一台Slave主机宕机, 恢复开机后, 在自动连接到Pool之前,,需要先关闭Pool HA, 但无需强制禁用该主机的HA。因为它无需进入 Emergency Mode,当主机启动完成后将会与Pool Master取得联系。

一旦失败的主机重新上线,启用HA的主机通过重新运行脚本从而使Pool HA功能被再次启用。

启用Pool HA时管理主机

偶尔你需要重启或关闭启用了HA功能的Pool中的某台XenServer主机,且该主机属于CloudStack群集中的一部分。那么以下部分列出正确的操作步骤:

执行Slave主机重启操作:

1. 在CloudStack中将其置为维护模式
2. 禁用Pool HA功能
3. 在XenCenter中将其置为维护模式
4. 重启主机
5.  一旦主机完全启动并在XenCenter中显示为在线状态时重新启用Pool HA
6. 在 XenCenter 中退出维护模式
7. 在 CloudStack 中退出维护模式

执行Master主机重启操作:

1. 在CloudStack中将其置为维护模式
2. 禁用Pool HA
3. 在XenCenter中将其置为维护模式,强制提升Slave成为Master
4. 重启主机
5. 一旦主机完全启动并在XenCenter中显示为在线状态时重新启用Pool HA
6. 在 XenCenter 中退出维护模式
7. 在 CloudStack 中退出维护模式

需要关闭一台主机较长时间: (Master主机应被降级为Slave)

1. 在CloudStack中将其置为维护模式
2. 在XenCenter中将其置为维护模式
4. 关闭主机电源

当想让主机重新上线时:

a. 禁用Pool HA
b. 打开主机电源,一旦主机完全启动并在XenCenter中显示为在线状态时重新启用Pool HA功能
c. 在 XenCenter 中退出维护模式
d. 在 CloudStack 中退出维护模式

概要

在安装完补丁XS62ESP1004以后,你必须在你的XenServer Pool启用HA功能,该结果将会采用不同的方法管理XenServer资源




你可能感兴趣的:(HA,HA,HA,CloudStack,CloudStack,xenserver,xenserver)