STONITH是Shoot-The-Other-Node-In-The-Head的简称,并且它能够保护数据使其不会因为节点异常或者同时访问而遭到损坏。
节点无反应并不代表它没有存取数据,如果想要百分百确认数据安全的话,需要使用STONITH来隔离节点,以确保在目前的节点已经离线后其它节点才能正常存取数据。
STONITH也能用于集群服务无法停下的情况。在这种情况下,集群可以使用STONITH来强制整个节点离线,并让服务在其它节点上安全启用。
下面简单介绍一下如何在RHEL 7 Pacemaker中配置一个fence_vmware_soap类型的STONITH设备(How to configure VMware fencing using fence_vmware_soap in Red Hat Enterprise Linux High Availability Add On)。
由于之前搭建的RHEL系统都是在VMware Server上,因此选择fence_vmware_soap类型的Fencing Agent配置STONITH设备。
1. 确认当前Cluster状态正常(关于如何在RHEL上安装"类"SQL Server Cluster功能,请参考这里):sudo su pcs status
2. 确认所有节点都已经安装了fence_vmware_soap:pcs stonith list | grep fence_vmware_soap
3. 查看fence_vmware_soap的相关配置参数:pcs stonith describe fence_vmware_soap
4. 确认当前机器是否可以通过fence_vmware_soap获取VMware上的机器列表:fence_vmware_soap --ip <Your IP Address or Host Name> --ssl --ssl-insecure --action list --username="<Your UserName>" --password="<Your Password>" | grep RedHat
Note:
ip是VMware ESXi Server或者vCenter Server的IP或者是HostName;
username是连接VMware Server的用户名;
password是连接VMware Server的密码;
最后RedHat是需要替换成你自己的机器入口名。
5. 复制一份CIB配置:pcs cluster cib stonith_cfg
6. 创建一个新的STONITH资源:pcs -f stonith_cfg stonith create MyVMwareFence fence_vmware_soap ipaddr=<Your IP Address or Host Name> ipport=443 ssl_insecure=1 inet4_only=1 login="<Your User Name>" passwd="<Your Password>" action=reboot pcmk_host_map="RHEL73Bob1:1;RHEL73Bob2:2" pcmk_host_check=static-list pcmk_host_list="RHEL73Bob1,RHEL73Bob2" power_wait=3 op monitor interval=60s
7. 启用STONITH并且使CIB配置生效:pcs -f stonith_cfg property set stonith-enabled=true pcs cluster cib-push stonith_cfg
8. 查看更改后的状态:
pcs stonith show pcs status
下面简单测试验证一下STONITH功能,过程如下:
刚开始Cluster状态如下,资源都在RHEL73Bob2上,而STONITH设备运行在RHEL73Bob1上;
当RHEL73Bob2机器异常OFFLINE后,状态如下,所有资源都自动转到RHEL73Bob1上;
当RHEL73Bob2机器又Online的时候,状态如下,猜想由于STONITH还未切换完成,File System资源在两个节点上均为开启状态(时间很短);
最后当RHEL73Bob2机器完全在线的时候,状态如下,STONITH设备自动切换到RHEL73Bob2,恢复到正常状态,保证了File System资源没有在两个节点上都启动。