Knowledge Base
linbit.com Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Using the Libvirt Daemon For Fencing Pacemaker Clusters

This article will describe how to use the libvirt daemon, libvirtd, as a fencing mechanism for virtualized high-availability (HA) clusters.

To use libvirt based fencing, your hypervisor should have its libvirt daemon listen on a network socket. This can be either an unencrypted TCP port, or an encrypted TLS socket. For production use, it’s best to use TLS when possible for improved security.

For libvirtd to listen on an unauthenticated and therefore insecure network socket, add the following lines to your libvirtd configuration file (often /etc/libvirt/libvirtd.conf):

listen_tls = 0
listen_tcp = 1
tcp_port = 16509base
auth_tcp = none
listen_addr = 192.168.0.123

Leaving the listen_addr empty or commenting the line out will result in libvirtd listening on all interfaces.

Finally, the libvirt daemon must be told to listen on the network. This is done by passing it the --listen or -l flag. You can set the options passed to the daemon by setting the following option in /etc/default/libvirt-bin on Debian based systems, or /etc/sysconfig/libvirtd on Red Hat based systems:

LIBVIRTD_ARGS=--listen

Once the above options are set, and the libvirt daemon is restarted, you can verify that you have a listening port on the specified port in your configuration by examining the output of netstat -tulpn or ss -tuna.

Finally, you should be able to list all the virtual machines (VMs) running on the hypervisor from a VM (with the libvirt-client package installed) by entering the following command:

virsh --connect=qemu+tcp://<hypervisor-IP>/system list --all

Find the correct libvirt domains (VMs that make up your cluster) in the list and add the appropriate configurations to Pacemaker:

primitive st_alice stonith:external/libvirt \
  params hostlist=alice hypervisor_uri=qemu+tcp://192.168.0.123/system \
  op monitor interval=60
primitive st_bob stonith:external/libvirt \
  params hostlist=bob hypervisor_uri=qemu+tcp://192.168.0.123/system \
  op monitor interval=60
location l_st_alice st_alice -inf: alice
location l_st_bob st_bob -inf: bob
property stonith-enabled=true

Now, you can begin to test and tune STONITH in your cluster.


Reviewed 2020/12/01 - DGT