High Availability Linux LAMP

Setelah berhasil melakukan instalasi Ubuntu Server 12.04, kali ini kita akan melakukan konfigurasi High availability Linux Apache MySQl PHP Server atau yang biasa dikenal dengan LAMP Server. LAMP adalah istilah yang merupakan singkatan dari Linux, Apache HTTP Server, MySQL dan Perl/PHP/Phyton. LAMP merupakan paket perangkat lunak bebas yang digunakan untuk menjalankan sebuah aplikasi secara lengkap. Secara prinsip dan umumnya sebagai webserver.

Kombinasi yang pasti dari perangkat lunak yang disertakan dalam paket LAMP dapat bervariasi, terutama berkenaan dengan perangkat lunak scripting web, seperti PHP dapat diganti atau dilengkapi dengan Perl dan / atau Phyton. Istilah serupa dengan dasar perangkat lunak yang sama (AMP) berjalan pada sistem operasi lainnya, seperti Microsoft Windows (WAMP), Mac OS (MAMP), Solaris (SAMP), iSeries (iAMP), atau OpenBSD (OAMP).

Meskipun penulis asli dari program ini tidak merancang mereka semua untuk bekerja secara khusus dengan satu sama lain. Kombinasi perangkat lunak ini menjadi populer karena bebas dari biaya, --open source, dan karena itu mudah beradaptasi, dan karena di mana-mana komponennya yang dibundel dengan distribusi Linux terbaru.

Komponen-komponen dari LAMP diantaranya:

  •  Linux sebagai sistem operasi
  •  Apache HTTP Server sebagai web server
  •  MySQL sebagai sistem basis data
  •  Perl atau PHP atau Pyton sebagai bahasa pemrograman yang dipakai

Pada tulisan ini kita akan mempelajari bagaimana me-konfigurasi sebuah server High availability dengan Linux, Apache, MySQL, and PHP (LAMP). Sehingga ketika ada server yang menjadi tidak aktif, service AMP akan diberikan oleh cluster yang kita miliki sehingga service AMP akan tetap tersedia. 

High Availability Linux LAMP (Ubuntu Server 12.04) - Bagian 1

Pada tulisan ini kita akan mempelajari bagaimana me-konfigurasi sebuah server High availability dengan Linux, Apache, MySQL, and PHP (LAMP). Sehingga ketika ada server yang menjadi tidak aktif, service AMP akan diberikan oleh cluster yang kita miliki sehingga service AMP akan tetap tersedia. Sebelum memulai, ada baiknya membaca bagaimana konfigurasi/instalasi sebuah LAMP Server pada beberapa link berikut:

http://www.howtoforge.com/ubuntu_lamp_for_newbies
https://help.ubuntu.com/community/ApacheMySQLPHP

 

Persiapan konfigurasi

Konfigurasi sistem high availability yang akan kita bangun secara umum akan tersusun sebagai berikut:

  • LAMP Server 1:
    hostname: node1.karedok.net
    IP Address LAN: 10.10.1.101
    IP Address private (untuk drbd): 126.10.1.1
  • LAMP Server 2:
    hostname: node2.karedok.net
    IP Address: 10.10.1.102
    IP Address private (untuk drbd): 126.10.1.2
    LAMP Server Virtual IP Address: 10.10.1.10
  • Sebuah konfigurasi Distributed Replicated Block Device (DRBD) akan melakukan mirror /srv/data antara node1 and node2

Untuk memulai, siapkan dua unit PC dan install server Ubuntu 12.04 (Precise Pangolin). Saya melakukan simulasi dalam lingkungan virtual dengan proxmox. Hal ini mempermudah ketika ingin menambah Harddisk atau LAN Card.

Kapasitas harddisk yang saya gunakan sebesar 250GB, dengan skema partisi seperti berikut:

/dev/sda1 -- 100 MB -- /boot (primary)
/dev/sda2 -- 50 GB -- Partisi LVM
/dev/sda3 --  198GB -- untuk drbd

Tentu saja kita bisa menggunakan dua buah harddisk dengan memisahkan antara harddisk yang digunakan oleh sistem dan data yang akan dibuat mirror. Misalkan kita memiliki duah buah harddisk 250 GB & 2 TB, kita bisa menempatkan OS pada harddisk yang 250 GB dan data pada Harddisk yang 2 TB. Semua bisa disesuaikan dengan kebutuhan. 

Setelah selesai dua buah installasi minimal Ubuntu server, lakukan update sistem & matikan apparmor.

sudo apt-get update
sudo apt-get upgrade
sudo service apparmor teardown
sudo update-rc.d -f apparmor remove

Langkah lajutan yang harus kita lakukan adalah pastikan isi dari file /etc/hosts identik (alamat IP dari kedua server/node). Berikut adalah isi dari file /etc/hosts yang harus kita buat untuk konfigurasi kita:

127.0.0.1     localhost
10.10.1.101   node1.karedok.net    node1
10.10.1.102   node2.karedok.net    node2
126.10.1.1    node1-private
126.10.1.2    node2-private

Langkah ini berguna agar kedua server bisa dengan mudah berkomunikasi tanpa perlu bertanya ke DNS Server, yang mana ada potensi kesalahan dalam resolve hostname.

Install NTP untuk memastikan kedua server memiliki waktu yang sama.

apt-get -y install ntp

Untuk memverifikasi apakah kedua server sudah menggunakan waktu yang sama, gunakan perintah date.

2 Node HA ClusterInstall DRBD dan heartbeat

Install paket DRBD dan heartbeat yang akan mengatur failover system.

apt-get -y install drbd8-utils heartbeat

Karena kita akan menggunakan heartbeat dan DRBD, kita perlu merubah kepemilikan (ownership) dan hak akses pada beberapa file terkait dengan DRBD pada kedua server.

chgrp haclient /sbin/drbdsetup
chmod o-x /sbin/drbdsetup
chmod u+s /sbin/drbdsetup
chgrp haclient /sbin/drbdmeta
chmod o-x /sbin/drbdmeta
chmod u+s /sbin/drbdmeta

File yang mengatur DRBD yaitu drbd.conf terletak di direktori /etc/. Secara default isi file tersebut hanya memuat pengaturan umum saja. Kita akan membuat konfigurasi yang sesuai dengan kebutuhan kita, yaitu resource tunggal. Maksudnya hanya terdapat satu partisi / harddisk yang akan kita buat sebagai DRBD.

Konfigurasi DRBD

Buka dan edit file drbd.conf dengan teks editor, (bisa vi, vim, pico, atau nano) dengan  perintah:

nano /etc/drbd.conf

Jika terbiasa dengan vi/vim silakan ubah nano dengan vi/vim.Contoh konfigurasi /etc/drbd.conf yang akan kita gunakan:

resource r0 {
 protocol C;
 
 handlers {
  pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
  pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
  local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
  outdate-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 5";      
 }

 startup {
  degr-wfc-timeout 120;
 }

 disk {
  on-io-error detach;
 }

 net {
  cram-hmac-alg sha1;
  shared-secret "password";
  after-sb-0pri disconnect;
  after-sb-1pri disconnect;
  after-sb-2pri disconnect;
  rr-conflict disconnect;
 }

 syncer {
  rate 100M;
  verify-alg sha1;
  al-extents 257;
 }

 on node1 {
  device  /dev/drbd0;
  disk    /dev/vdb1;
  address 10.10.10.51:7788;
  meta-disk internal;
 }

 on node2 {
  device  /dev/drbd0;
  disk    /dev/vdb1;
  address 10.10.10.52:7788;
  meta-disk internal;
 }
}

Catatan:
- ubah bagian password dari baris shared-secret.
- sesuaikan dengan hostname saat pertama install, nilai didapat dengan menggunakan perintah uname -n

Duplikat file konfigurasi DRBD ke server satunya dengan perintah:

Duplikat file konfigurasi DRBD ke server satunya dengan perintah:

scp /etc/drbd.conf [email protected]:/etc/

Lakukan inisialisasi meta-data harddisk pada kedua server

[node1] drbdadm create-md r0
[node2] drbdadm create-md r0

Jalankan service DRBD pada kedua server.

[node1] /etc/init.d/drbd start
[node2] /etc/init.d/drbd start

Tentukan server mana yang akan bertindak sebagai server primer untuk perangkat yang akan memuat file konfigurasi paket LAMP dan kita perlu melakukan sinkronisasi penuh untuk pertama kali antara kedua server. Jalankan perintah berikut pada node1 (server primer):

[node1] drbdadm -- --overwrite-data-of-peer primary r0

Lalu lihat status dari proses sinkronisasi dengan menjalankan perintah:

cat /proc/drbd

Contoh hasil perintah diatas:

IT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by [email protected], 2009-01-17 07:49:56
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---
    ns:761980 nr:0 dw:0 dr:769856 al:0 bm:46 lo:10 pe:228 ua:256 ap:0 ep:1 wo:b oos:293604
        [=============>......] sync'ed: 72.3% (293604/1048292)K
        finish: 0:00:13 speed: 21,984 (19,860) K/sec
 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:10485692

Kita bisa juga memonitor secara real-time proses diatas dengan menggunakan perintah watch:

watch cat /proc/drbd

Perintah diatas akan menampilkan setiap perubahan yang terjadi secara real-time tiap 2 detik. Untuk keluar dari mode watch gunakan perintah ctrl+c Tunggu sampai proses sinkronisasi selesai sebelum melanjutkan ke langkah berikutnya. Proses ini akan memakan waktu tergantung dari spek dan kapasitas harddisk yang digunakan. Jika proses sinkronisasi telah selesai, kita perlu memformat drive drbd dan mounting ke salah satu direktori. Lakukan hanya di server primer.

[node1] mkfs.ext4 /dev/drbd0
[node1] mount /dev/drbd0 /srv/

Untuk mengetes apakah konfigurasi sudah benar, kita akan buat sebuah file pada direktori dimana drbd kita pasang. Dalam hal ini berarti pada direktori /srv/.

[node1] dd if=/dev/zero of=/srv/test.zeros bs=1M count=100

Perintah diatas akan membuat satu file berukuran 100MB dengan nama file test.zeros. Masuk ke direktori /srv/ dan lihat apakah file yang tadi kita buat ada disana.

[node1] cd /srv/
[node1] ls

Selanjutnya kita akan coba pindah ke node2 apakah file yang tadi kita buat juga ikut pindah kesana. Tapi sebelumnya kita harus unmount DRBD di node1 dan jadikan sebagai secondary, lalu buat node dua sebagai primary dan mount ke salah satu direktori. Pada node1:

[node1]cd /
[node1]umount /srv
[node1]drbdadm secondary r0

Pada node2:

[node2]drbdadm primary r0
[node2]mount /dev/drbd0 /srv
[node2]ls –lh /srv/

Sekarang seharusnya kita bisa melihat file test.zeros berukuran 100MB pada node2. Langkah berikutnya kita akan lihat apakah konfigurasi DRBD sudah berjalan dengan baik dalam dua arah. Kita hapus file test.zeros tersebut dan kembalikan node 1 sebagai server primer. Hapus dan kembalikan mode primer ke server1. Pada node2:

[node2]rm /srv/test.zeros
[node2]umount /srv
[node2]drbdadm secondary r0

On node1:

[node1]drbdadm primary r0
[node1]mount /dev/drbd0 /srv

Lakukan perintah ls /srv/ pada node1 untuk melihat apakah file yang tadi kita hapus masih ada atau sudah hilang dan apakah sinkronisasi berjalan sukses pada kedua arah.

High Availability Linux LAMP (Ubuntu Server 12.04) - Bagian 2

Langkah selanjutnya kita akan install paket yang mendukung rangkaian LAMP. Tujuan akhir kita adalah memiliki service heartbeat yang mengatur service dari paket rangkaian LAMP dan mencegah rangkaian LAMP ini dari aturan normal yang diatur dalam init. Kita kemudian akan menempatkan konfigurasi LAMP dan file data pada perangkat DRBD sehingga kedua server akan memiliki informasi yang sama saat salah satu dari server yang kita miliki menjadi primer dari perangkat DRBD. Install paket LAMP pada node1 dan node2.

[node1]tasksel install lamp-server
[node2]tasksel install lamp-server

Catatan: Selama proses instalasi kita akan mendapatkan notifikasi untuk membuat password root MySQL. Tes apakah instalasi berhasil dengan membuka jendela browser ( Firefox / Chrome / IE ) dan arahkan ke alamat IP salah satu server. Stop Sementara semua service LAMP.

[node1]/etc/init.d/apache2 stop
[node1]/etc/init.d/mysql stop
[node2]/etc/init.d/apache2 stop
[node2]/etc/init.d/mysql stop

Pastikan semua service LAMP sudah berhenti dengan melihat proses yang sedang berjalan dan koneksi jaringan yang sedang terhubung.

[node1]ps aux | grep mysql
[node1]ps aux | grep apache
[node1]ss -at

Hapus LAMP dari skrip init.

[node1]update-rc.d -f apache2 remove
[node1]update-rc.d -f mysql remove
[node2]update-rc.d -f apache2 remove
[node2]update-rc.d -f mysql remove

Pindahkan konfigurasi LAMP ke /srv.

[node1]mv /etc/apache2 /srv/etc
[node1]mv /etc/php5 /srv/etc
[node1]mv /etc/mysql /srv/etc
[node1]mv /var/lib/mysql /srv/var/lib
[node1]mv /var/lib/php5 /srv/var/lib
[node1]mv /var/www /srv/var
[node1]mv /var/log/apache2 /srv/var/log
[node1]mv /var/log/mysql /srv/var/log

Buat symlink ke lokasi baru

[node1]ln -s /srv/etc/apache2 /etc/apache2
[node1]ln -s /srv/etc/php5 /etc/php5
[node1]ln -s /srv/etc/mysql /etc/mysql
[node1]ln -s /srv/var/lib/mysql /var/lib/mysql
[node1]ln -s /srv/var/lib/php5 /var/lib/php5
[node1]ln -s /srv/var/www /var/www
[node1]ln -s /srv/var/log/apache2 /var/log/apache2
[node1]ln -s /srv/var/log/mysql /var/log/mysql

Buat direktori backup pada node2 dan pindahkan file konfigurasi LAMP ke direktori tersebut.

[node2]mkdir /backup
[node2]mv /etc/apache2 /backup/etc
[node2]mv /etc/php5 /backup/etc
[node2]mv /etc/mysql /backup/etc
[node2]mv /var/lib/mysql /backup/var/lib
[node2]mv /var/lib/php5 /backup/var/lib
[node2]mv /var/www /backup/var
[node2]mv /var/log/apache2 /backup/var/log
[node2]mv /var/log/mysql /backup/var/log

Buat symlink ke lokasi baru

[node2]ln -s /srv/etc/apache2 /etc/apache2
[node2]ln -s /srv/etc/php5 /etc/php5
[node2]ln -s /srv/etc/mysql /etc/mysql
[node2]ln -s /srv/var/lib/mysql /var/lib/mysql
[node2]ln -s /srv/var/lib/php5 /var/lib/php5
[node2]ln -s /srv/var/www /var/www
[node2]ln -s /srv/var/log/apache2 /var/log/apache2
[node2]ln -s /srv/var/log/mysql /var/log/mysql

Setelah ini kita akan melakukan konfigurasi Heartbeat.

High Availability Linux LAMP (Ubuntu Server 12.04) - Bagian 3

Berikutnya kita lakukan konfigurasi heartbeat yang kaan mengatur failover sistem, alamat IP virtual, Apache, dan MySQL jika terjadi gagal booting salah satu sistem.

ada node1, tentukan cluster yang disertakan dalam file /etc/heartbeat/ha.cf. Contoh /etc/heartbeat/ha.cf:

Logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
bcast eth0
bcast eth0
node node1
node node2

Catatan: nilai yang dimuat pada bagian node didapat dengan mengetikkan perintah uname -n .

Pada node1, tentukan mekanisme autentikasi yang akan digunakan oleh cluster dalam file /etc/heartbeat/authkeys. Contoh /etc/heartbeat/authkeys:

auth3
3 md5 password


Ubah hak akses dari file /etc/heartbeat/authkeys.

[node1]chmod 600 /etc/heartbeat/authkeys


Pada node1, definisikan resource yang akan berjalan dalam cluster, konfigurasi disimpan di /etc/heartbeat/haresources. Kita akan mendefinisikan node master untuk resource, alamat IP virtual, filesystem yang digunakan, dan service apa saja yang akan berjalan. Contoh /etc/heartbeat/haresources:

node1 IPaddr::10.10.1.50/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/srv::ext4 mysql apache2


Salin file konfigurasi cluster dari node1 ke node2.

[node1]scp /etc/ha.d/ha.cf [email protected]:/etc/ha.d/
[node1]scp /etc/ha.d/authkeys [email protected]:/etc/ha.d/
[node1]scp /etc/ha.d/haresources [email protected]:/etc/ha.d/


Pada tahap ini, kita sudah bisa melepas mounting /dev/drbd0 dari /srv, membuat kedua node sebagai secondary drbd, dan jalankan heartbeat.

[node1] umount /srv
[node1]drbdadm secondary r0
[node1]/etc/init.d/heartbeat start
[node2]/etc/init.d/heartbeat start

Terakhir, restart kedua server.