Virtual Machine Replication & Failover with VMWare Server & Debian Etch (4.0) - Page 3

4. Configuring the Heartbeat package

Installing the Heartbeat package will enable automatic failover and resource management in case of resource and/or hardware failure.

In this tutorial, I will use Heartbeat over the network, but it is also possible to use Heartbeat with a serial cable and other methods. Heartbeat will check for updates from both servers, and when not receiving any more updates will initiate a failover and takeover of the specified resources (in our case, DRBD and VMWare).


OK, on to the configuration. For your convenience, you can use the following configuration files as they are tailored to this tutorial. Heartbeat needs 3 files to be configured, namely: "", "haresources" and "authkeys". Edit them accordingly with your favorite editor:

nano /etc/ha.d/

logfile	/var/log/ha-log
logfacility	local0
keepalive 1
deadtime 10
warntime 10
udpport	694
bcast	eth1
auto_failback off
node	server1  ## make sure both names are accessible - check /etc/hosts
node	server2
ping  ## Enter an IP address that is pingable from the ETH0 network !!
respawn hacluster /usr/lib/heartbeat/ipfail

NOTE: This file will enable failover in case of Network Connection failure on ETH0 and/or general server failure. Problems with ETH1 will NOT cause a failover to occur !

Now we edit the "authkeys" file:

nano /etc/ha.d/authkeys

auth 3
3 md5 failover  ## this is just a string, enter what you want ! auth 3 md5 uses md5 encryption

But we also have to chmod this file to only be readable by "root":

chmod 600 /etc/ha.d/authkeys

And for last, we edit the "haresources" file that contains the failover resources.

nano /etc/ha.d/haresources

server1 drbddisk::vm1 Filesystem::/dev/drbd0::/var/vm::ext3 vmstart
# Explanation:
# Primary Server name --> virtual IP address to be used --> DRBD resource as configurd in /etc/drbd.conf
# --> where to mount the DRBD resource and the filesystem type --> resource to start/stop in case of failover
# the "vmstart" resource is a custom script needed for VMWare Server since you can't have heartbeat take control of
# the vmware services or you will run into the dreaded "not configured for this machine" errors !

Before going further, we will need to create the custom "vmstart" script to make sure that Virtual Machines are automatically started on the server in case of failover. With other resources like Apache, Mysql, NFS ... we could have simply removed the startup scripts for them from the rc.d directories, but with VMWare this is not possible as they are required for good functioning of the services. Therefore, we need a custom script to start the Virtual Machines in case of failover since the VMWare services will already be running prior to failover !

The "vmstart" will need to reside in the "/etc/ha.d/resource.d/" folder as that is where heartbeat will check for it.

nano /etc/ha.d/resource.d/vmstart

case "$1" in 
/usr/bin/vmware-cmd -s register "/var/vm/'virtual machine name'/'vm config file'.vmx" 2>/dev/null
/usr/bin/vmware-cmd "/var/vm/'virtual machine name'/'vm config file'.vmx" start 2>/dev/null 
/usr/bin/vmware-cmd "/var/vm/'virtual machine name'/'vm config file'.vmx" stop trysoft 2> /dev/null 
if `/usr/bin/vmware-cmd "/var/vm/'virtual machine name'/'vm config file'.vmx" getstate 2>/dev/null | grep -q "getstate() = on"` 
echo "running" 
echo "stopped" 
echo "Usage: `basename $0` 'virtual machine file' {start|stop|status}" 
echo "Where "virtual machine file" is like /var/vm/'virtual machine name'/'vm config file'.vmx"
exit 0

Fill in the 'virtual machine' name and 'vm config file' directives with the necessary info (check the /var/vm dir). If you have multiple Virtual Machines, just copy the lines.

This custom script will first Register the Virtual Machine (necessary when using a newly installed server!) and then start them. It has to be done this way, since VMWare Server only has the option to automatically start VM's on system startup.
Now that you have configured everything, it is time to test if all is OK. Start the Heartbeat service, first on Server1, then on Server2.

/etc/init.d/heartbeat start

If all is OK, you should see the new virtual IP showing up on your master server.

ifconfig |more


eth0 Link encap:Ethernet  HWaddr 00:11:09:00:BB:5D
          inet addr:  Bcast:  Mask:
          inet6 addr: fe80::211:9ff:fe00:bb5d/64 Scope:Link
          RX packets:1025774 errors:0 dropped:0 overruns:0 frame:0
          TX packets:227653 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:281072399 (268.0 MiB)  TX bytes:56403081 (53.7 MiB)
eth0:0    Link encap:Ethernet  HWaddr 00:11:09:00:BB:5D
          inet addr:  Bcast:  Mask:

Ok, if you are feeling lucky and have followed this tutorial with some common sense, then it is now time to yank out that power cord, hold on to your cup of coffee and watch the Virtual Machine go online on your second server.

5. Links

Share this page:

1 Comment(s)

Add comment


From: at: 2007-12-12 19:54:48

I took a similiar yet different approach to this. I built a virtual machine with all tools I needed, cloned it, re-ip'd and hostnamed it. Then setup drbd & heartbeat between the 2 virtual machines.

 This allows me to maintain multiple configuration on the host OS machines yet still have the redundant & failover capability of heartbeat/drbd with in the virtual machines.

 I've been hosting my website/mailserver for almost 9 months in this configuration. If it's of any use I can write something up to be appended to this instruction set.