Friday, April 3, 2015

High Availability Cluster CentOS Menggunakan Heartbeat

Pada lab kali ini saya mau share sedikit implementasi sederhana cluster menggunakan heartbeat di CentOS, percobaan ini dilakukan untuk melakukan cluster pada service httpd.
Topologi yang akan kita gunakan adalah seperti dibawah ini :


Kalo masih bingung, Virtual IP Address adalah IP yang dibentuk oleh heartbeat. Heartbeat sendiri adalah program yang menjalankan special script yang biasanya mengirim signal ke node lain untuk saling mengkontrol dan berkomunikasi satu dengan yang lainnya. 

Metode yang digunakan adalah Active-Standby/Master-Slave, apabila ada satu node master mati maka heartbeat bertugas untuk memberi tahu node yang standby/slave untuk segera mencover si node master tsb. Langsung aja yah dibawah ini konfigurasinya :

Notes :
- Di lab ini konfigurasi IPTABLES dan Selinux dalam keadaan disabled.

Konfigurasi

Pastikan hostname di masing2 node sudah benar.
[root@web1 ~]# uname -n
web1

[root@web2 ~]# uname -n
web2

Tambahkan konfigurasi di /etc/hosts di masing2 node.
[root@web1 ~]# vi /etc/hosts
#tambahkan ini 
192.168.99.91 web1
192.168.99.92 web2

[root@web2 ~]# vi /etc/hosts
#tambahkan ini 
192.168.99.91 web1
192.168.99.92 web2

Install package di masing2 node adalah sebagai berikut ini.
[root@web1 ~]# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@web1 ~]# yum --enablerepo=epel install heartbeat; yum install httpd -y

[root@web2 ~]# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@web2 ~]# yum --enablerepo=epel install heartbeat; yum install httpd -y

Matikan service httpd ketika boot dengan command chkconfig httpd off, hal ini karna httpd akan dinyalakan oleh heartbeat ketika booting.

[root@web1 ~]# chkconfig httpd off

[root@web2 ~]# chkconfig httpd off

Heartbeat yang terinstall di web server saya adalah versi heartbeat-3.0.4, setelah heartbeat di install maka pindahkan tiga file (ha.cf, authkeys, haresources) ini ke /etc/ha.d/.

[root@web1 ~]# cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/; cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/; cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/

[root@web2 ~]# cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/; cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/; cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/

Sekarang mulai konfigurasi heartbeat, dimulai dengan konfigurasi di authkeys.
[root@web1 ~]# vi /etc/ha.d/authkeys
#tambahin konfig ini
auth 2
2 sha1 test-ha

Jangan lupa, ganti permission file ini agar hanya root saja yang bisa ganti2 konfig di file ini
[root@web1 ~]# chmod 600 /etc/ha.d/authkeys

Lalu lanjut konfigurasi di di ha.cf yang merupakan part terpenting, edit file ha.cf sbb.
[root@web1 ~]# vi /etc/ha.d/ha.cf
##tambahin konfig ini
logfile /var/log/ha-log ##(buat logging file)
logfacility local0 ##(severity log)
keepalive 2 ##(keepalive parameter 2s)
deadtime 30 ##(deadtime timer 30s)
initdead 120 ##(initdead timer 120s)
bcast eth0 ##(broadcast interface yg digunakan)
udpport 694 ##(port yang digunakan 694 udp)
auto_failback on ##(auto failback)
node web1 ##(node 1 yaitu web1)
node web2 ##(node 2 yaitu web2)

Terakhir adalah haresources file, kita isi sbg informasi master node dan virtual ip address yg digunakan.
[root@web1 ~]# vi /etc/ha.d/haresources
##tambahin konfig ini
web1 192.168.99.93 httpd

Biar cepet, copy ketiga file atau semua file yang ada di /etc/ha.d di web1 ke web2.
[root@web1 ~]# scp -r /etc/ha.d/ root@web2:/etc/


Setelah itu, konfigurasi file httpd.conf dengan mengubah parameter dibawah ini.
[root@web1 ~]# vi /etc/httpd/conf/httpd.conf
##standarnya adalah 'Listen 80', ubah parameter listen menjadi seperti dibawah ini##
Listen 192.168.99.93:80

Biar cepet juga, copy file httpd.conf di web1 ke web2.
[root@web1 ~]# scp /etc/httpd/conf/httpd.conf root@web2:/etc/httpd/conf/

Buat index file di masing2 node, biar keliatan bedanya saya bedain isinya di masing2 index.html.
[root@web1 ~]# echo "konten di web1" > /var/www/html/index.html

[root@web2 ~]# echo "konten di web2" > /var/www/html/index.html


Sekarang start heartbeat kamu, inget start hearbeatnya aja gak usah start httpdnya. Nanti yang bertugas jalanin httpdnya adalah aplikasi heartbeatnya.

[root@web1 ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO:  Running OK
CRITICAL: Resource 192.168.99.91 is active, and should not be!
CRITICAL: Non-idle resources can affect data integrity!
info: If you don't know what this means, then get help!
info: Read the docs and/or source to /usr/share/heartbeat/ResourceManager for more details.
CRITICAL: Resource 192.168.99.91 is active, and should not be!
CRITICAL: Non-idle resources can affect data integrity!
info: If you don't know what this means, then get help!
info: Read the docs and/or the source to /usr/share/heartbeat/ResourceManager for more details.
CRITICAL: Non-idle resources will affect resource takeback!
CRITICAL: Non-idle resources may affect data integrity!
Done.

[root@web2 ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO:  Running OK
CRITICAL: Resource 192.168.99.92 is active, and should not be!
CRITICAL: Non-idle resources can affect data integrity!
info: If you don't know what this means, then get help!
info: Read the docs and/or source to /usr/share/heartbeat/ResourceManager for more details.
CRITICAL: Resource 192.168.99.92 is active, and should not be!
CRITICAL: Non-idle resources can affect data integrity!
info: If you don't know what this means, then get help!
info: Read the docs and/or the source to /usr/share/heartbeat/ResourceManager for more details.
CRITICAL: Non-idle resources will affect resource takeback!
CRITICAL: Non-idle resources may affect data integrity!
Done.

Testing Apakah Cluster Heartbeat Sudah Berjalan? 

Coba akses Virtual IP Address http://192.168.99.93 dari browser agan.
Output seharusnya adalah "konten di web1"



Sekarang untuk ngetes apakah cluster berjalan dengan baik coba matikan service heartbeat di web1 atau kalo mau ekstrem coba reboot/shutdown web1 lalu akses lagi  http://192.168.99.93
Output seharusnya adalah "konten di web2"


Done!
Semoga bermanfaat.

2 comments:

  1. maksi mas buat ilmunya, mw nanya mas, klu di server centos kita masing2 sudah terinstal whm-cpanel dan sudah berjalan, apakah cara penginstalan diatas tidak mempengaruhi konfigurasi whm-cpanel yang sudah terinstal mas pada centos 7 nya ? atau apakah ada cara lain membuat failover server pada 2 server centos yang sudah terinstal whm-cpanel mas ?, makasi buat jawabannya

    ReplyDelete
  2. Thanks for some other informative blog. Where else may I get that kind of info written in such a perfect approach? I've a venture that I'm just now operating on, and I've been on the look out for such info.

    ReplyDelete