Konfigurasi Apache High Availability Cluster Menggunakan Pacemaker Pada CentOS 7 / RHEL 7


High Availability merupakan sebuah sistem yang dirancang untuk meningkatkan suatu layanan agar tetap tersedia "available". Secara garis besar, teknologi high availability ini dapat meminimalisir terjadinya downtime pada suatu node. (Single Point of Failure).

Dalam implementasi HA, biasanya melibatkan lebih dari 1 komputer artinya komputer tersebut akan berkerja secara redundan, jika suatu node mengalami kegagalan maka service akan dialihkan ke node yang lain. Oleh karena itu diperlukan minimal 2 buah node (Cluster).

Baca Juga :
Install Linux, Apache, Mysql, PHP (LAMP) Stack di CentOS
Konfigurasi Rsyslog di CentOS (Centralized Logging Server)
Cara Mengaktifkan Service Iptables pada CentOS 7

Pada kesempatan kali ini dimasrio.com akan menjelaskan bagaimana cara melakukan konfigurasi high availability cluster pada service http (apache) menggunakan pacemaker.
Pacemaker adalah sebuah cluster resource manager.
Oke, sebelum kita mulai perhatikan gambar topologi kali ini.


Dalam keadaan normal web server akan di respon oleh node 1, jika node 1 mengalami crash maka webserver pada node 2 akan active. Nah, skenario seperti ini disebut active - passive.
Node 1
192.168.56.254
dmz1.local-zone.net
Node 2
192.168.56.253
dmz2.local-zone.net

Konfigurasi Apache High Availability Cluster

Step 1 - Installasi
 
Tambahkan hostname dibawah ini pada masing-masing node ( node 1 dan node 2 ) pada file /etc/hosts.
192.168.56.254 dmz1.local-zone.net dmz1
192.168.56.253 dmz2.local-zone.net dmz2
Install pacemaker di kedua node.
# yum install pacemaker pcs
Disabled selinux di kedua node.
#  nano /etc/sysconfig/selinux
[...]
SELINUX=disabled
[...]
Start service pcsd di kedua node dan jalankan sebagai startup.
# systemctl start pcsd
# systemctl enable pcs
Setelah service pcsd dijalankan, pcs akan secara default membuat sebuah user hacluster. Set password hacluster di kedua node.
# passwd hacluster

Changing password for user hacluster.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

Step 2 - Firewall

Open port untuk komunikasi ha cluster dan http pada semua node.
# systemctl restart firewalld
# firewall-cmd --permanent --add-service=high-availability
# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload
# firewall-cmd --list-service
[...]
dhcpv6-client high-availability http ssh
[...]
Jika anda sudah menjalankan perintah diatas, maka anda Tidak Perlu lagi menambahkan perintah di bawah ini. Rule iptables ini hanya alternatif jika anda tidak menggunakan firewalld.

Open UDP Port 5404 dan 5405 disemua node untuk Corosync.
iptables -I INPUT -m state --state NEW -p udp -m multiport --dports 5404,5405 -j ACCEPT
Open TCP Port 2224 disemua node untuk PCS.
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 2224 -j ACCEPT
Allow igmp dan multicast traffic.
iptables -I INPUT -p igmp -j ACCEPT
iptables -I INPUT -m addrtype --dst-type MULTICAST -j ACCEPT
Allow Http Port
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
Simpan konfigurasi iptablesnya.
service iptables save

Step 3 - Konfigurasi (hanya di Node1)

Otorisasikan masing-masing node.
# pcs cluster auth dmz1.local-zone.net dmz2.local-zone.net -u hacluster
Password:
dmz1.local-zone.net: Authorized
dmz2.local-zone.net: Authorized
Selanjutnya buat clusternya dari masing-masing node. Sebagai contoh saya menggunakan nama HaCluster.
# pcs cluster setup --name HaCluster dmz1.local-zone.net dmz2.local-zone.net --force
[...]
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...
dmz1.local-zone.net: Succeeded
dmz2.local-zone.net: Succeeded
[...]
Jalankan dan enable service clusternya.
# pcs cluster start --all
# pcs cluster enable --all
Sekarang cek apakah status clusternya sudah aktif.
# pcs status cluster
[...]
Cluster Status:
Last updated: Thu Nov 5 21:33:32 2015
Last change: Sat Oct 31 14:54:39 2015 by root via cibadmin on dmz1.local-zone.net
Stack: corosync
Current DC: dmz1.local-zone.net (version 1.1.13-a14efad) - partition with quorum
2 nodes and 0 resources configured
Online: [ dmz1.local-zone.net dmz2.local-zone.net ]
[...]

Step 4 - Install dan Konfigurasi Apache

Setelah membuat clusternya sekarang install apache dan tambahkan sedikit konfigurasinya di masing-masing node. (node1 dan node 2).
yum install httpd
Buat file /etc/httpd/conf.d/server-status.conf dan isikan perintah di bawah ini.
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Allow from All
</Location>
Buat file /var/www/html/index.php pada masing-masing node dan isikan perintah berikut pada index.php.

Node 1
<?php echo "<h1>dmz1.local-zone.net</h1>"; ?>
Node 2
 <?php echo "<h1>dmz2.local-zone.net</h1>"; ?>

Step 5 - Property

Pada langkah kali ini anda akan menentukan property / fitur yang akan digunakan. Untuk lebih jelasnya anda dapat mendapatkan penjelasan lengkap mengenai istilah - istilah dalam clustering.

Baca disini :
Konsep Cluster Server
Set property pada pcs hanya pada node 1.
# pcs property set stonith-enabled=false
# pcs property set no-quorum-policy=ignore
# pcs property set default-resource-stickiness="INFINITY"
# pcs property list
[...]
Cluster Properties:
cluster-infrastructure: corosync
cluster-name: HaCluster
dc-version: 1.1.13-a14efad
default-resource-stickiness: INFINITY
have-watchdog: false
last-lrm-refresh: 1446276258
no-quorum-policy: ignore
stonith-enabled: false
[...]
Step 6 - Resource dan Colocation

Buat virtual ip dan service http untuk clusternya hanya pada node 1. Note : ens192 adalah interfacenya, anda bisa merubahnya sesuai dengan nic anda misalnya eth0 dsb.
# pcs resource create VirtIP IPaddr2 ip=192.168.56.100 cidr_netmask=24 nic=ens192 op monitor interval=30s
# pcs resource create Httpd apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" op monitor interval=30s
Selanjutnya arahkan virtual ip tersebut ke service web servernya.
# pcs constraint colocation add Httpd with VirtIP INFINITY
# pcs constraint order VirtIP then Httpd
Setelah resource dibuat ketikan perintah di bawah ini untuk memastikan resource sudah berjalan.
# pcs status
[...]
Cluster name: HaCluster
Last updated: Fri Nov 6 04:54:36 2015
Last change: Thu Nov 5 20:25:10 2015 by root via cibadmin on dmz1.local-zone.net
Stack: corosync
Current DC: dmz1.local-zone.net (version 1.1.13-a14efad) - partition with quorum
2 nodes and 2 resources configured

Online: [ dmz1.local-zone.net dmz2.local-zone.net ]

Full list of resources:

VirtIP (ocf::heartbeat:IPaddr2): Started dmz1.local-zone.net
Httpd (ocf::heartbeat:apache): Started dmz1.local-zone.net

PCSD Status:
dmz1.local-zone.net: Online
dmz2.local-zone.net: Online

Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
[...]
Restart clusternya.
pcs cluster stop --all
pcs cluster start --all
Step 7 - Testing 

Sekarang akses virtual ip pada browser.


Web server akan secara default berjalan pada node1. Sekarang kita coba matikan node 1.
# pcs cluster stop dmz1.local-zone.net
[...]
dmz1.local-zone.net: Stopping Cluster (pacemaker)...
dmz1.local-zone.net: Stopping Cluster (corosync)...
[...]
Sekarang coba akses kembali virtual ip nya, maka node2 yang akan menjawab service httpnya.


Nah, untuk lebih detailnya saya sudah buatkan video live demonya.

Video :
High Availability HA Cluster Linux Web Server on Centos 7 / RHEL 7
Demikian tutorial linux server kali ini mengenai konfigurasi apache high availability cluster menggunakan pacemaker pada centos 7 / rhel 7. Semoga bermanfaat bagi kita semua dan selamat mencoba..!!!


EmoticonEmoticon