How to configure High Availability Linux Cluster with Pacemaker in CentOS

To configure High Availability Linux Cluster with Pacemaker in CentOS

Cluster is a group of server that can be considered as a single system. It is used for producing high availability without any downtime. The procedure to configure high availability Linux Cluster with Pacemaker in CentOS is explained.

Testing Environment

Operating System: Centos 7

Node 1: hostname - linuxhelp1.cluster.com
IP - 192.168.5.148
Node 2: hostname - linuxhelp2.cluster.com
IP - 192.168.5.149


To install pacemaker, it is necessary to have a DNS server to analyse the cluster configurations. Check for DNS server - if it is unavailable, then make the entry in the /etc/hosts location as follows.

[root@linuxhelp1 ~]# cat /etc/hosts 
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.5.148 linuxhelp1.cluster.com linuxhelp1
192.168.5.149 linuxhelp2.cluster.com linuxhelp2

The entry should be made on each and every nodes.

Run the following command to install the apache package on either nodes.

[root@linuxhelp1 ~]# yum install httpd -y 
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.nbrc.ac.in
* extras: mirror.nbrc.ac.in
* updates: mirror.nbrc.ac.in
Resolving Dependencies
-->  Running transaction check
--->  Package httpd.x86_64 0:2.4.6-40.el7.centos.4 will be installed
-->  Processing Dependency: httpd-tools = 2.4.6-40.el7.centos.4 for package: httpd-2.4.6-40.el7.centos.4.x86_64
-->  Processing Dependency: /etc/mime.types for package: httpd-2.4.6-40.el7.centos.4.x86_64
-->  Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64
-->  Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64
-->  Running transaction check
--->  Package apr.x86_64 0:1.4.8-3.el7 will be installed
--->  Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
.
.
.
Installed:
httpd.x86_64 0:2.4.6-40.el7.centos.4

Dependency Installed:
apr.x86_64 0:1.4.8-3.el7 apr-util.x86_64 0:1.5.2-6.el7 httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 mailcap.noarch 0:2.1.41-2.el7

Complete!


Disable firewall SELinux

Add the following line to disable the selinux and firewall on both nodes by running the following command.

[root@linuxhelp1 ~]# vim /etc/sysconfig/selinux

SELINUX=permissive
[root@linuxhelp1 ~]# setenforce 0
[root@linuxhelp1 ~]# systemctl stop firewalld
[root@linuxhelp1 ~]# systemctl disable firewalld 
rm ' /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service' 
rm ' /etc/systemd/system/basic.target.wants/firewalld.service' 

To install Pacemaker Package

Run the following command to install the packages for pacemaker on both the nodes.

[root@linuxhelp1 ~]# yum install pacemaker pcs fence-agents-all -y 
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.nbrc.ac.in
* extras: mirror.nbrc.ac.in
* updates: mirror.nbrc.ac.in
Resolving Dependencies
-->  Running transaction check
--->  Package fence-agents-all.x86_64 0:4.0.11-27.el7_2.7 will be installed
-->  Processing Dependency: fence-virt for package: fence-agents-all-4.0.11-27.el7_2.7.x86_64
-->  Processing Dependency: fence-agents-wti for package: fence-agents-all-4.0.11-27.el7_2.7.x86_64
-->  Processing Dependency: fence-agents-vmware-soap for package: fence-agents-all-4.0.11-27.el7_2.7.x86_64
-->  Processing Dependency: fence-agents-scsi for package: fence-agents-all-4.0.11-27.el7_2.7.x86_64
-->  Processing Dependency: fence-agents-rsb for package: fence-agents-all-4.0.11-27.el7_2.7.x86_64
.
.
.
rubygem-io-console.x86_64 0:0.4.2-25.el7_1
rubygem-json.x86_64 0:1.7.7-25.el7_1 rubygem-psych.x86_64 0:2.0.0-25.el7_1 rubygem-rdoc.noarch 0:4.0.0-25.el7_1
rubygems.noarch 0:2.0.14-25.el7_1 sg3_utils.x86_64 0:1.37-5.el7 telnet.x86_64 1:0.17-59.el7

Dependency Updated:
net-snmp-libs.x86_64 1:5.7.2-24.el7_2.1 python-chardet.noarch 0:2.2.1-1.el7_1

Complete!


After the installation, set password for the " hacluster" on both nodes. Verify the user account by running the following command.

[root@linuxhelp1 ~]# tail /etc/passwd 
abrt:x:173:173::/etc/abrt:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
user1:x:1000:1000:user1:/home/user1:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
hacluster:x:189:189:cluster user:/home/hacluster:/sbin/nologin


And then run the following command to set the password for the “ hacluster” account.

[root@linuxhelp1 ~]# passwd hacluster 
Changing password for user hacluster.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.


Start and enable the service for pacemaker on both the nodes.

[root@linuxhelp1 ~]# systemctl start pcsd
[root@linuxhelp1 ~]# systemctl enable pcsd 
ln -s ' /usr/lib/systemd/system/pcsd.service'  ' /etc/systemd/system/multi-user.target.wants/pcsd.service' 

To create cluster

Before creating clusters authenticate the nodes that is to be added by using the following command.

[root@linuxhelp1 ~]# pcs cluster auth linuxhelp1 linuxhelp2 -u hacluster 
Password:
linuxhelp2: Authorized
linuxhelp1: Authorized


Then utilize the below command to create the Cluster and then add the authenticated nodes into it.

[root@linuxhelp1 ~]# pcs cluster setup --name Cluster linuxhelp1 linuxhelp2 
Shutting down pacemaker/corosync services...
Redirecting to /bin/systemctl stop pacemaker.service
Redirecting to /bin/systemctl stop corosync.service
Killing any remaining services...
Removing all cluster configuration files...
linuxhelp1: Succeeded
linuxhelp2: Succeeded
Synchronizing pcsd certificates on nodes linuxhelp1, linuxhelp2...
linuxhelp2: Success
linuxhelp1: Success

Restaring pcsd on the nodes in order to reload the certificates...
linuxhelp2: Success
linuxhelp1: Success


After the cluster creation, make sure that the nodes added into it by verifying the configuration file.

[root@linuxhelp1 ~]# cat /etc/corosync/corosync.conf 
totem {
version: 2
secauth: off
cluster_name: Cluster
transport: udpu
}

nodelist {
node {
ring0_addr: linuxhelp1
nodeid: 1
}

node {
ring0_addr: linuxhelp2
nodeid: 2
}
}

quorum {
provider: corosync_votequorum
two_node: 1
}

logging {
to_logfile: yes
logfile: /var/log/cluster/corosync.log
to_syslog: yes
}


Run the following command to start the cluster services.

[root@linuxhelp1 ~]# pcs cluster start --all 
linuxhelp2: Starting Cluster...
linuxhelp1: Starting Cluster...
[root@linuxhelp1 ~]# pcs status
Cluster name: Cluster
WARNING: no stonith devices and stonith-enabled is not false
Last updated: Wed Sep 14 16:30:06 2016 Last change: Wed Sep 14 16:29:52 2016 by hacluster via crmd on linuxhelp2
Stack: unknown
Current DC: NONE
2 nodes and 0 resources configured

Node linuxhelp1: UNCLEAN (offline)
Node linuxhelp2: UNCLEAN (offline)

Full list of resources:

PCSD Status:
linuxhelp1: Online
linuxhelp2: Online

Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled


Enable the cluster services by running the following command.

[root@linuxhelp1 ~]# pcs cluster enable --all 
linuxhelp1: Cluster Enabled
linuxhelp2: Cluster Enabled

To add resource into the cluster

Next, lets start to append the resources into the cluster. Here we are going to add two resources namely web server(httpd) and IP address(Virtual IP). These resources are added to the cluster to make the services available without any downtime.

[root@linuxhelp1 ~]# pcs resource create VirtIP IPAddr ip=192.168.5.150 cidr_netmask=24 op monitor interval=30s
[root@linuxhelp1 ~]# pcs resource create Httpd apache configuration=" /etc/httpd/conf/httpd.conf"  op monitor interval=30s 


Run the following command to check the status of the cluster.

[root@linuxhelp1 ~]# pcs status 
Cluster name: Cluster
WARNING: no stonith devices and stonith-enabled is not false
Last updated: Wed Sep 14 17:13:47 2016 Last change: Wed Sep 14 17:11:54 2016 by root via cibadmin on linuxhelp1
Stack: corosync
Current DC: linuxhelp1 (version 1.1.13-10.el7_2.4-44eb2dd) - partition with quorum
2 nodes and 2 resources configured

Online: [ linuxhelp1 linuxhelp2 ]

Full list of resources:

VirtIP (ocf::heartbeat:IPaddr): Stopped
Httpd (ocf::heartbeat:apache): Stopped

PCSD Status:
linuxhelp1: Online
linuxhelp2: Online

Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
Check the status of the resources alone.

[root@linuxhelp1 ~]# pcs status resources 
VirtIP (ocf::heartbeat:IPaddr): Stopped
Httpd (ocf::heartbeat:apache): Stopped
After creating the resources, start the services by running the following command.

[root@linuxhelp1 ~]# pcs constraint colocation add Httpd with VirtIP INFINITY 
Then assign the following values into the cluster.

[root@linuxhelp1 ~]# pcs property set stonith-enabled=false
[root@linuxhelp1 ~]# pcs property set no-quorum-policy=ignore
[root@linuxhelp1 ~]# pcs property set default-resource-stickiness=" INFINITY"  
Run the following command to check the status of the resources and clusters.

[root@linuxhelp1 ~]# pcs status resources 
VirtIP (ocf::heartbeat:IPaddr): Started linuxhelp1
Httpd (ocf::heartbeat:apache): Started linuxhelp1
[root@linuxhelp1 ~]# pcs status 
Cluster name: Cluster
Last updated: Wed Sep 14 17:52:55 2016 Last change: Wed Sep 14 17:40:24 2016 by root via cibadmin on linuxhelp1
Stack: corosync
Current DC: linuxhelp1 (version 1.1.13-10.el7_2.4-44eb2dd) - partition with quorum
2 nodes and 2 resources configured

Online: [ linuxhelp1 linuxhelp2 ]

Full list of resources:

VirtIP (ocf::heartbeat:IPaddr): Started linuxhelp1
Httpd (ocf::heartbeat:apache): Started linuxhelp1

PCSD Status:
linuxhelp1: Online
linuxhelp2: Online

Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled

To check the Fail over

After configuring the cluster, check the Fail over between the nodes. Create different index files on the node1 and node2 with different content as shown below.

[root@linuxhelp1 ~]# vim /var/www/html/index.html 

Entry:

This is Node1
[root@linuxhelp1 ~]# vim /var/www/html/index.html 

Entry:

This is Node2


Trigger the browser with the following link http://< IP_ADDR>



Stop the cluster service for node 1.

[root@linuxhelp1 ~]# pcs cluster stop linuxhelp1 
linuxhelp1: Stopping Cluster (pacemaker)...
linuxhelp1: Stopping Cluster (corosync)...


Again access the web service using the same IP, it automatically fetches the data from the node 2.

Tag : Pacemaker
Comment
muhammadsabiransari
Jan 23 2020
The process and prepared steps are awesome.

Please share the step if we have external storage FS mounted and the same need to use for fail-over for web services?
Add a comment
FAQ
Q
How can I use a different operating system in Pacemaker?
A
yes you can use different Linux distros to make a single cluster in Pacemaker.
Q
How can I return to my previous occupation after having a pacemaker fitted?
A
Most office equipment is safe to use with your pacemaker. This includes the following items and other similar equipment.

Computers such as desktop, laptop, and mainframe
Copy machines
Electric typewriters
Q
What are the key advantages and disadvantages of using Pacemaker?
A
The only disadvantage is that it is new technology, so you need to learn how to work with it. There are many advantages, but the most important one is that you can use Pacemaker in an existing network environment and, in most cases, it only requires a minimal extra investment in hardware resources.
Q
What requirements are there for services to be managed by Pacemaker?
A
You can offer any service in a high-availability cluster if it has a normal startup script that allows the service to be automatically started when your server boots. For some services, a special Oracle Cluster Framework (OCF) script is available. If you can choose between an OCF script and a normal startup script to configure the service in the cluster.
Q
Does Pacemaker work on other operating systems than Linux?
A
It works on some Unix versions, but it is definitely software that comes from the Linux world. I recommend using it on Linux only.