Shared resources in a cluster need to be accessible via an IP address. For this, we need to create a clustered IP address for our Pacemaker cluster, which will automatically be assigned to one of our cluster nodes at any point in time. Pacemaker will automatically re-assign the IP address to another node in our cluster if anything is wrong with the node currently assigned the IP address.

Shared virtual IP could be created on a Pacemaker cluster using pcs tool at the terminal.

Steps to create floating IP address using Pacemaker:

  1. Install Pacemaker, Corosync and pcs on all of your available nodes.
  2. Create a Pacemaker cluster from one of your nodes.
  3. Create a cluster IP resource using pcs from one of your cluster nodes.
    $ sudo pcs resource create cluster_ip ocf:heartbeat:IPaddr2 ip=192.168.111.10 cidr_netmask=24 op monitor interval=30s
  4. Ping the newly created IP address from all of your cluster nodes.
    $ ping -c3 192.168.111.10
    PING 192.168.111.10 (192.168.111.10) 56(84) bytes of data.
    64 bytes from 192.168.111.10: icmp_seq=1 ttl=64 time=0.054 ms
    64 bytes from 192.168.111.10: icmp_seq=2 ttl=64 time=0.086 ms
    64 bytes from 192.168.111.10: icmp_seq=3 ttl=64 time=0.048 ms
    
    --- 192.168.111.10 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2000ms
    rtt min/avg/max/mdev = 0.048/0.062/0.086/0.019 ms
  5. View details of the created cluster IP resource using pcs from one of your cluster nodes.
    $ sudo pcs status resources cluster_ip
     Resource: cluster_ip (class=ocf provider=heartbeat type=IPaddr2)
      Attributes: cidr_netmask=24 ip=192.168.111.10
      Operations: monitor interval=30s (cluster_ip-monitor-interval-30s)
                  start interval=0s timeout=20s (cluster_ip-start-interval-0s)
                  stop interval=0s timeout=20s (cluster_ip-stop-interval-0s)
  6. View details of cluster and created resources using pcs from one of your cluster nodes.
    $ sudo pcs status
    Cluster name: clustername
    Stack: corosync
    Current DC: node-02 (version 1.1.20-5.el7_7.1-3c4c782f70) - partition with quorum
    Last updated: Mon Sep 30 05:38:30 2019
    Last change: Mon Sep 30 05:31:00 2019 by root via cibadmin on node-01
    
    2 nodes configured
    1 resource configured
    
    Online: [ node-01 node-02 ]
    
    Full list of resources:
    
     cluster_ip	(ocf::heartbeat:IPaddr2):	Started node-01
    
    Daemon Status:
      corosync: active/enabled
      pacemaker: active/enabled
      pcsd: active/enabled

    Make sure the status for the pacemaker, corosync and pcsd daemon is enabled. If the status is disabled, re-enable it which is to set the services to automatically start during system boot.

    $ sudo systemctl enable pacemaker corosync pcsd
    Created symlink from /etc/systemd/system/multi-user.target.wants/pacemaker.service to /usr/lib/systemd/system/pacemaker.service.
    Created symlink from /etc/systemd/system/multi-user.target.wants/corosync.service to /usr/lib/systemd/system/corosync.service.
    Created symlink from /etc/systemd/system/multi-user.target.wants/pcsd.service to /usr/lib/systemd/system/pcsd.service. 
  7. Get the name of the ethernet interface on the node where the cluster_ip resource is started on.
    $ ip address show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:cd:b0:bc brd ff:ff:ff:ff:ff:ff
        inet 192.168.111.11/24 brd 192.168.111.255 scope global noprefixroute ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::a444:1cd9:da0c:900f/64 scope link tentative noprefixroute dadfailed
           valid_lft forever preferred_lft forever
        inet6 fe80::4f8c:f47a:308c:75af/64 scope link noprefixroute
           valid_lft forever preferred_lft forever
  8. Disable the ethernet interface on the node where the cluster_ip resource is started on to test failover.
    $ sudo ip link set ens33 down

    You will be disconnected from the node if you are connecting remotely using ssh via the disabled interface

  9. Check the cluster status on any other node to see if the cluster_ip resource correctly started on another node.
    $ sudo pcs status
    Cluster name: clustername
    Stack: corosync
    Current DC: node-02 (version 1.1.20-5.el7_7.1-3c4c782f70) - partition with quorum
    Last updated: Wed Oct  2 22:38:57 2019
    Last change: Wed Oct  2 22:21:59 2019 by root via cibadmin on node-01
    
    2 nodes configured
    1 resource configured
    
    Online: [ node-02 ]
    OFFLINE: [ node-01 ]
    
    Full list of resources:
    
     cluster_ip	(ocf::heartbeat:IPaddr2):	Started node-02
    
    Daemon Status:
      corosync: active/disabled
      pacemaker: active/disabled
      pcsd: active/enabled

    The status of the node with disabled ethernet interface should now be OFFLINE .

  10. Ping the cluster_ip's address again to test that the IP address is still reachable.
    $ ping -c3 192.168.111.10
    PING 192.168.111.10 (192.168.111.10) 56(84) bytes of data.
    64 bytes from 192.168.111.10: icmp_seq=1 ttl=64 time=0.059 ms
    64 bytes from 192.168.111.10: icmp_seq=2 ttl=64 time=0.076 ms
    64 bytes from 192.168.111.10: icmp_seq=3 ttl=64 time=0.061 ms
    
    --- 192.168.111.10 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2000ms
    rtt min/avg/max/mdev = 0.059/0.065/0.076/0.011 ms
  11. Re-enable the ethernet interface on the OFFLINE node to for the node to re-join our cluster.
    $ sudo ip link set ens33 up
  12. Re-check if pacemaker, corosync and pcsd services are enabled (to automatically start during system boot) on all nodes.
    $ sudo systemctl status pacemaker corosync pcsd | grep Loaded
       Loaded: loaded (/usr/lib/systemd/system/pacemaker.service; disabled; vendor preset: disabled)
       Loaded: loaded (/usr/lib/systemd/system/corosync.service; disabled; vendor preset: disabled)
       Loaded: loaded (/usr/lib/systemd/system/pcsd.service; enabled; vendor preset: disabled)

    Certain pcs commands tend to disable previously enabled services. Enable using the following command:

    $ sudo systemctl enable pacemaker corosync pcsd
    Created symlink from /etc/systemd/system/multi-user.target.wants/pacemaker.service to /usr/lib/systemd/system/pacemaker.service.
    Created symlink from /etc/systemd/system/multi-user.target.wants/corosync.service to /usr/lib/systemd/system/corosync.service.
    Created symlink from /etc/systemd/system/multi-user.target.wants/pcsd.service to /usr/lib/systemd/system/pcsd.service.
Discuss the article:

Comment anonymously. Login not required.