VMware Fencing in RedHat Cluster 5 (RHCS5)
Cluster fencing – Unlike many common thoughts, high-availability is not the highest priority of an high-availability cluster, but only the 2nd one. The highest priority of an high-availability cluster is maintenance of data integrity by prevention of multiple concurrent access of nodes to the shared disk.
On different cluster, depending on the vendor, this can be achieved by different methods, either by prevention of access based on the status of the cluster (for example – Microsoft Cluster, which will not allow access to the disks without cluster management and coordination), by panicking the node in question (Oracle RAC, for example, or IBM HACMP), or by preventing failover unless the status of the other node, as well as all heartbeat links were ok up to the exact moment of failure (VCS, for example).
Another method is based on a fence, or “Shoot the Other Node in the Head”. This “fence” is usually based on an hardware device which has no dependencies for the node’s OS, and is capable of shutting it down, many times brutally, upon request. A good fencing device can be a UPS, which supports the other node. The whole idea is that in a case of uncertainty, either one of the nodes can attempt to ‘kill’ the other node, independently of any connectivity issue one of them might experience. This race result is quite obvious: one node remains alive, capable of taking over the resource groups, the other node is off, unable to access the disk in an uncontrolled manner.
Linux-based clusters will not force you to use fencing of any sort, however, for a production environments, setups without any fencing device will be unsupported, as the cluster cannot handle cases of split-brain or uncertainty. These hardware devices, which can be, as said before, a manageable UPS, a remote-control power-switch, the server’s own IPMI (or any other independent system such as HP ILO, IBM HMC, etc), and even the fiber switch – as long as it can prevent the node in question from accessing the disks, are quite expensive, but comparing to hours of restore-from-backup, they sure justify their price.
On many sites there is a demand for a “test” setup which will be as similar to the production setup as possible. This test setup can be used to test upgrades, configuration changes, etc. Using fencing in this environment is important, for two reasons:
1. Simulation of the production system behavior is achieved with as similar setup as possible, and fencing takes an important part in the cluster and its logic.
2. A replicated production environment contain data which might have some importance, and if not that, at least re-replicating it from the production environment after a case of uncontrolled access to the disk by a faulty node (and this test cluster is in a higher risk, as defined by its role), or restoring from tapes is unpleasant and time consuming.
So we agree that the test cluster should have some sort of fencing device, even if not similar to production’s one, for the sake of the cluster logic.
On some sites, there is a demand for more than one test environment. Both setups – a single test environment and multiple test environments can be defined to work as guests on a virtual server. Virtualization assists in saving hardware (and power, and cooling) costs, and allows for easy duplication and replication, so this is a case where it is ideal for the task. This said, it brings up a problem – fencing a virtual server has implications – we can kill all guest systems in one go. We wouldn’t want that to happen. Lucky for us, RedHat Cluster has a fencing device for VMware, which, although not recommended in a production environment, will suffice for a test environment. These are the steps required to setup one such VMware fencing device in RHCS5:
1. Download the latest CVS fence_vmware from here. You can use this direct link (use with “save target as”). Save it in your /sbin directory under the name fence_vmware, and give it execution permissions.
2. Edit fence_vmware. In line 249 change the string “port” to “vmname”.
3. Install VMware Perl API on both cluster nodes. You will need to have gcc and openssl-devel installed on your system to be able to do so.
4. Change your fencing based on this example:
<?xml version="1.0"?>
<cluster alias="Gfs-test" config_version="39" name="Gfs-test">
<fence_daemon clean_start="0" post_fail_delay="0" post_join_delay="3"/>
<clusternodes>
<clusternode name="cent2" nodeid="1" votes="1">
<fence>
<method name="1">
<device name="man2"/>
</method>
</fence>
</clusternode>
<clusternode name="cent1" nodeid="2" votes="1">
<fence>
<method name="1">
<device name="man1"/>
</method>
<method name="2">
<device domain="22 " name="11 "/>
</method>
</fence>
</clusternode>
</clusternodes>
<cman expected_votes="1" two_node="1"/>
<fencedevices>
<fencedevice agent="fence_vmware" name="man2"
ipaddr="192.168.88.1" login="user" passwd="password"
vmname="c:\vmware\virt2\rhel5.vmx"/>
<fencedevice agent="fence_vmware" name="man1"
ipaddr="192.168.88.1" login="user" passwd="password"
vmname="c:\vmware\virt1\rhel5.vmx"/>
</fencedevices>
<rm>
<failoverdomains/>
<resources>
<fs device="/dev/sda" force_fsck="0" force_unmount="0"
fsid="5" fstype="ext3" mountpoint="/data"
name="sda" options="" self_fence="0"/>
</resources>
<service autostart="1" name="smartd">
<ip address="192.168.88.201" monitor_link="1"/>
</service>
<service autostart="1" name="disk1">
<fs ref="sda"/>
</service>
</rm>
</cluster>
Change to your relevant VMware username and password.
If you have a Centos system, you will be required to perform these three steps:
1. ‘ln -s /usr/sbin/cman_tool /sbin/cman_tool‘
2. ‘cp /etc/redhat-release /etc/redhat-release.orig‘
3. ‘echo “Red Hat Enterprise Linux Server release 5 (Tikanga)” > /etc/redhat-release‘
This should do the trick. Good luck, and thanks again to Yoni who brought and fought the configuration steps.
***UPDATE***
Per comments (and a bit-late – common logic) I have broken lines in the XML quote for cluster.conf. In cases these line breaks might break something in RedHat Cluster, I have added the original xml file here: cluster.conf
RedHat Cluster, and some more...Related posts brought to you by Yet Another Related Posts Plugin.
Tags: enterprise linux 4, fence device, fencing, HA, high-availability, RedHat Cluster, redt, rhel4, XML
June 27th, 2007 at 1:22 pm
thanks!
works on redhat 4 clustered with gfs
June 27th, 2007 at 2:17 pm
What works? VMware fencing? As described?
June 28th, 2007 at 11:22 am
Yup Vmware fencing works with a simple code modification
adding these 4 lines after line 264:
17a18
> #use strict;
264,268d264
< elsif ($name eq “nodename” )
< {
< $opt_ZZv = $val;
< }
<
November 10th, 2007 at 3:47 pm
During an attempt to use the VMware Perl SDK, I have encountered the following error:VMControl Panic: SSLLoadSharedLibrary: Failed to load library /usr/bin/libcrypto.so.0.9.7:/usr/bin/libcrypto.so.0.9.7: cannot open shared object file: No such file or dir
November 11th, 2007 at 12:22 am
I have been struggling with RH Cluster 4 with VMware fencing device. This was also a good experiance with qdiskd, the Disk Quorum directive and utilization. I have several conclusions out of this experience. First, the configuration, as is:<?xml versio
February 13th, 2008 at 9:46 am
Hello,
it should be said, that this only works for ESX 2.x because VI 3 uses another [url=http://www.vmware.com/download/download.do?downloadGroup=VI-PT-1-5]API[/url]
Has someone seen, a fencing agent which uses the new VI3 API?
Regards
Falko
February 13th, 2008 at 10:09 am
Hi Falko.
I have never tested it on ESX. I use (almost) VMware-Server almost solemnly, so there was not a chance.
You can hack it to actually run a script which does ssh to the ESX server (although for VI you might want to query on which physical server it is) and power off the server. Still, maintaining the same command-line switches and parameters, and you should be good to go on RHCS.
Ez
August 19th, 2008 at 11:51 am
I’m using VI Perl Toolkit + some part of script from fence_vmware to fence virtual m/c by RHCS. A script will connect to VI server and reset or poweroff v/m if need.
August 20th, 2008 at 7:08 am
Can you attach your script here? I would love to have it online (for the next time I get to use VI)
Ez
February 22nd, 2009 at 5:25 pm
[...] of information: VMware Communities VMware Fencing in Red Hat Cluster 5 Red Hat Cluster FAQ Red Hat Fencing [...]