记得上回实验过RHCS6.3在KVM虚拟机下的三节点命令搭建HA,从那时起一直想将虚拟机如何配置fence设备整理出一份文档。先来说说我已经知道的,从上次的实验可以得出结论kvm虚拟环境支持RHCS的fence设备是fence_virtsh。但KVM单机版应用并不广泛,据说RHEV在中国南方地区应用较广,从搭建角度来说要比Vmware的ESXi复杂很多,而且至少需要一台物理主机一台虚拟主机才能实现,所以这次先ESXi为虚拟环境。


现阶段虚拟化的主流与大玩家之一是Vmware的vcenter-server,可惜同样的,物理设备提供不了全套的实验环境,不过单以RHCS的的实验而言,只要能装一台ESXi 也就够了,我的实验版本是5.1。由于RHCS的fence设备类型对不同RHEL版本兼容性不同,而RHEL业内较常用版本是5与6,所以我先从RHEL6.3开始测试,集群服务尽量简单,以测试fence设备为主。环境规划如下:

165002903.jpg

无论实验的RHEL版本怎么变,上述这个拓扩图是不变的。没办法,为个实验花几千大元买个物理机有些不值,花钱容易挣钱难那!闲话少说,接下为是具体规划内容:

ESXi地址:192.168.0.10

165746124.jpg

vsphere-client连接界面:170003633.jpg

虚拟主机名:s1.example.com s1;s2.example.com s2

虚拟机地址:心跳eth0—192.168.0.1,192.168.0.2;业务eth1—192.168.8.20,192.168.8.21

集群服务:为简单从事,服务就一个VIP—192.168.8.50


第一个测试系统RHEL6.3-64

安装系统就不用说了,是个人就行。

安装完系统后要做一系列的基本设置,这里也不再繁述(具体见上篇博客)。直奔主题HA设置,这次我是用LUCI做的,将做完的结果记录下来。首先添加节点:

170851125.jpg

添加fence设备:

171207461.jpg

fence设备类型选择VMware_fence_soap,是RHEL部分系统的ESXi虚拟fence设备。做到这里我查了红帽官网的fence设备对不同RHEL版本的兼容列表

172136391.jpg

172136387.jpg

可以看到,对RHEL5版本中5.7和以上版本都支持;6版本支持6.2及以上版本。其实这个兼容列表还有很多内容,包括了所有的fence设备,还有对RHEV的兼容情况都有。地址是:https://access.redhat.com/site/articles/28601

名称随便写,我写的是esxi_fence,这么写明白一些;

IP地址填ESXi平台的IP地址;

用户名与密码填写ESXi的帐号,我直接写的是root用户。


设备添加完成,与节点关联,以s1为例:

173151304.jpg

节点的fence设备名称是fence_s1

在关联的时候还需要填写portuuid两项,port指对ESXi而言的虚拟机名称,uudi是指虚拟机在ESXi的设备id,这两者在虚拟平台是唯一的。

port好说

173747316.jpg

两个虚拟机主机分别叫RHEL6.3-1RHEL6.3-2

uuid如何来找,说到这里不得不提一下ESXi的底层是什么,其实就是个Linux,而虚拟机对其而言就是设备,可以通过SSH登陆进去(之前要将ESXi的SSH连接开启)

175415791.jpg

上图为ESXi5.1的根目录文件,虚拟机设备文件在/vmfs/volumes/datastore1下,我一共创建两个虚拟机,所以有两个目录175747956.jpg,目录名也就是虚拟主机名称。以RHEL6.3-1为例,查看该目录下文件:

180009879.jpg

用vi打开RHEL6.3-1.vmx,找到uuid关键字:

uuid.location = "56 4d 89 20 d6 4f 44 7c-1e 04 19 ad 4b 5a 82 81",这就是它的uuid号。不过直接填上去是不行的,uuid有一定的式。应该填写什么,回到LUCI界面,刚才只不过是扩充部分内容,呵呵

这时打开任意节点的命令行界面,运行命令

fence_vmware_soap -a 192.168.0.10 -z -l root -p robinz712 -o list

这行命令行的效果是列出ESXi平台的所有集群结点的UUID

095723469.jpg

直接根据对应的虚拟机名称将uuid填写上去即可。

具体fence_vmware_soap设备都有什么参数,附上红帽官方文档的说明

104823309.jpg

接下来将ssl选中,fence设备与节点就关联完了。


接下来是故障域、资源、服务,不做为重点就简单一代而过了

101007377.jpg

故障域设置

101414808.jpg

开始时说过,为简单从事,只有一个服务,就是VIP

101710235.jpg

101739531.jpg

好,截图到这里算是设置完了,集群也启动了。

101918404.jpg

在集群测试之前,先用命令行测试esxi的虚拟fence功能是否正常,以s1节点为

fence_vmware_soap -a 192.168.0.10 -z -l root -p robinz712 -n RHEL6.3-1 -o status

查看虚拟fence设备状态

Status: ON

出现上述结果代表虚拟fence设备能够使用,也可以使用上述命令重启节点,将-o参数改为reboot即可,而且我也做过测试能够成功,这个功能在接着测试集群的时候详加说明。


down心跳网卡测试集群,现在服务在s1节点上,我现在当s1的eth0网卡

ifdown eth0

这时将视角转到ESXi的平台界面的底部,查看操作记录

110037585.jpg

可以看到ESXi是根据设备uuid号查找设备并进行虚拟fence动作的

110424244.jpg

再来看看集群状态

110548116.jpg

这时s1重启完成,而s2也已经接管服务。同样的,down业务网卡迁移服务正常,过程不再繁述。

最后一项测试是两个虚拟主机都关机的情况下,先开启s1节点,到集群服务启动后,会自动远程开启s2节点

114028685.jpg

上图所示测试成功


到此,ESXi5.1平台下的RHEL6.3版本的集群fence设备测试完成,根据红帽官方的兼容列表6.2版本与5版本的5.7以上系统都可以使用fence_vmware_soap设备,故这几个版本不再做为主要测试对象。下一篇开始实验6.05.6版本fence设备配置。


附上cluster.conf 配置文件

<?xml version="1.0"?>
<cluster config_version="9" name="esxi_cluster">
        <clusternodes>
                <clusternode name="s1.example.com" nodeid="1">
                        <fence>
                                <method name="fence_s1">
                                        <device name="esxi_fence" port="RHEL6.3-1" ssl="on" uuid="564d8920-d64f-447c-1e04-19ad4b5a8281"/>
                                </method>
                        </fence>
                </clusternode>
                <clusternode name="s2.example.com" nodeid="2">
                        <fence>
                                <method name="fence_s2">
                                        <device name="esxi_fence" port="RHEL6.3-2" ssl="on" uuid="564df200-c159-b022-416e-3c9fba63fe9b"/>
                                </method>
                        </fence>
                </clusternode>
        </clusternodes>
        <cman expected_votes="1" two_node="1"/>
        <fencedevices>
                <fencedevice agent="fence_vmware_soap" ipaddr="192.168.0.10" login="root" name="esxi_fence" passwd="robinz712"/>
        </fencedevices>
        <rm>
                <resources>
                        <ip address="192.168.8.50"/>
                </resources>
                <failoverdomains>
                        <failoverdomain name="esxi_domain" nofailback="1" ordered="1" restricted="1">
                                <failoverdomainnode name="s1.example.com" priority="1"/>
                                <failoverdomainnode name="s2.example.com" priority="2"/>
                        </failoverdomain>
                </failoverdomains>
                <service domain="esxi_domain" exclusive="1" name="esxi_service" recovery="relocate">
                        <ip ref="192.168.8.50"/>
                </service>
        </rm>
</cluster>