DRBD + HEARTBEAT UNTUK HIGH AVAILABILITY LAMP SERVER

Assalamu’alaikum Wr. Wb.

Alhamdulillah setelah beberapa hari melakukan percobaan gabungin DRBD + Heartbeat untuk keperluan High availability pada server khususnya untuk LAMP (Linux Apache MySQL PHP) server sekarang baru bisa nulis.hehe… maklum banyak trouble selama proses ngelabnya, masalahnya pada service MySQL gak mau konek sama DRBD storage yang saya belajarnya merusuk sumberny dari disni. Sebelumnya udah belajar mengenai DRBD dan Heartbeat sekarang postingan kali ini akan membahas gabungan dari service keduanya untuk membentuk High Availability server. Seperti biasa akan dibahas komponen-komponen pendukung untuk lab antara lain :
  1. 2 Server OS Ubuntu 12.04 64 bit (VirtualBox).
  2. hostname server 1 : akrom server 2 : arum.
  3. IP server 1 : 192.168.42.131 server 2 : 192.168.42.132.
  4. DRBD storage /dev/sdb1.
  5. IP Virtual : 192.168.42.133

Langsung saja untuk langkah pertama bikin identitias hostname untuk masing-masing server edit pada file /etc/hosts.
#nano /etc/hosts
127.0.0.1       localhost
192.168.42.131  akrom
192.168.42.132  arum
 

Kemudian install tools DRBD dan Heartbeat pada masing-masing server. Tool DRBD bisa download disini untuk versi terbaru, sesuaikan distro Linux dan arsitekturnya.

#dpkg -i drbd8-utils_8.3.13-1.1ubuntu1_amd64.deb
#apt-get install heartbeat

Ubah permission directory DRBD agar Heartbeat dapat terhubung ke service DRBD.

#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

Kedua server menggunakan partisi /dev/sdb1 yang digunakan sebagai DRBD Storage yang sama-sama berkapasitas 8GB (hanya contoh walaupun  di implementasi nyata bisa sampai ratusan giga bahkan tera).

#fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000053f8

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    15728639     7863296   83  Linux
/dev/sda2        15730686    16775167      522241    5  Extended
/dev/sda5        15730688    16775167      522240   82  Linux swap / Solaris

Disk /dev/sdb: 8589 MB, 8589934592 bytes
86 heads, 1 sectors/track, 195083 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe102bff1

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    16777215     8387584   83  Linux

Buat file konfigurasi DRBD pada kedua server, yaitu file global_common.conf dan *.res (sebagai contoh server.res)

#nano /etc/drbd.d/global_common.conf

global { usage-count no; }
common { syncer { rate 30M; verify-alg md5; }

#nano /etc/drbd.d/server.res

resource server {
    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-peed-outdater -t 5”;
    }

    startup {
        degr-wfc-timeout 120;
    }

    disk {
        on-io-error detach;
    }

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

    on akrom {
        device /dev/drbd0;
        disk /dev/sdb1;
        address 192.168.42.131:7788;
        meta-disk internal;
    }
   
    on arum {
        device /dev/drbd0;
        disk /dev/sdb1;
        address 192.168.42.132:7788;
        meta-disk internal;
    }
}

Langkah berikutnya adalah menginisialisasi meta disk pada masing-masing server.

#drbadm create-md server

md_offset 8588881920
al_offset 8588849152
bm_offset 8588587008

Found ext3 filesystem
     8387292 kB data area apparently used
     8387292 kB left usable by current configuration

Even though it looks like this would place the new meta data into
unused space, you still need to confirm, as this is only a guess.

Do you want to proceed?
[need to type ‘yes’ to confirm] yes

You want me to create a v08 style flexible-size internal meta data block.
There appears to be a v08 flexible-size internal meta data block
already in place on /dev/sdb1 at byte offset 8588881920
Do you really want to overwrite the existing v08 meta-data?
[need to type ‘yes’ to confirm] yes

Writing meta data…
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
 
Start service DRBD dengan perintah berikut di kedua server.

#/etc/init.d/drbd start

Dari kedua sever pilih salah satu untuk dijadikan sebagai server primary (utama), sebagai contoh pada server akrom. Jadikan server tersebut dengan perintah berikut.

#drbadm — –overwrite-data-of-peer primary server

Setelah itu akan tindakan sinkronisasi storage antara kedua server, kita bisa memonitoring proses sinkronisasi melalui terminal.
#watch cat /proc/drbd
Every 2.0s: cat /proc/drbd                                        Mon Dec  9 10:00:20 2013

version: 8.3.13 (api:88/proto:86-96)
srcversion: 697DE8B1973B1D8914F04DB
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r—–
    ns:734208 nr:0 dw:0 dr:734880 al:0 bm:44 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:7653084
        [>……………….] sync’ed:  8.8% (7472/8188)Mfinish: 0:03:57 speed: 32,192 (3
0,592) K/sec
  

Setelah proses sinkronisasi kedua server storage selesai kemudian format storage tersebut ke sebuah file system (contoh : ext4).
#mkfs.ext4 /dev/drbd0

mke2fs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2096823 blocks
104841 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                           
Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
Kemudian lakukan mounting ke sebuah directory /media/data.

#mkdir -p /media/data
#mount /dev/drbd0 /media/data
#chmod 777 /media/data 

Langkah berikutnya adalah install LAMP server di kedua server.

#apt-get install tasksel
#tasksel install lamp-server

Setelah instalasi lamp server sudah selesai sekarang pindah semua direktori tempat database dan web servernya ke DRBD storage, tapi sebelumnya hentikan terlebih dahulu service-nya. Lakukan pada server primary terlebih dahulu

root@akrom#service apache2 stop
root@akrom#update-rc.d -f apache2 remove
root@akrom#service mysql stop
root@akrom#update-rc.d -f mysql remove

root@akrom#mkdir -p /media/data/mysql
root@akrom#mkdir -p /media/data/www
root@akrom#mv /var/www/* /media/data/www/
root@akrom#mv /var/lib/mysql/* /media/data/mysql

root@akrom#ln -s /media/data/www /var

Ubah sedikit pada konfigurasi MySQL pada file /etc/mysql/my.conf dan /etc/apparmor.d/usr.sbin.mysqld.
root@akrom#nano /etc/mysql/my.conf

[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /media/data/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking

root@akrom#nano /etc/apparmor.d/usr.sbin.mysqld

  /etc/mysql/*.pem r,
  /etc/mysql/conf.d/ r,
  /etc/mysql/conf.d/* r,
  /etc/mysql/*.cnf r,
  /usr/lib/mysql/plugin/ r,
  /usr/lib/mysql/plugin/*.so* mr,
  /usr/sbin/mysqld mr,
  /usr/share/mysql/** r,
  /var/log/mysql.log rw,
  /var/log/mysql.err rw,
# /var/lib/mysql/ r,
# /var/lib/mysql/** rwk,
  /media/data/mysql/ r,       
  /media/data/mysql/** rwk,
Start kembali semua service lamp pada server primary.
root@akrom#/etc/init.d/apparmor reload
root@akrom#/etc/init.d/mysql start
root@akrom#/etc/init.d/apache2 start
Kemudian pada server secondary (server arum) lakukan beberapa perintah berikut tapi sebelumnya ubah dulu mode DRBD pada server akrom menjadi secondary dan server arum menjadi primary:
root@akrom#service apache2 stop
root@akrom#service mysql stop
root@akrom#umount /media/data
root@akrom#drbdadm secondary server
root@arum#service mysql stop
root@arum#service apache2 stop
root@arum#mkdir /media/data
root@arum#drbadm primary server
root@arum#rm -r /var/www
root@arum#rm -r /var/lib/mysql
root@arum#ln -s /media/data/www /var
root@arum#nano /etc/mysql/my.conf
[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /media/data/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
 
 
 
root@arum#nano /etc/apparmor.d/usr.sbin.mysqld
/etc/mysql/*.pem r,
  /etc/mysql/conf.d/ r,
  /etc/mysql/conf.d/* r,
  /etc/mysql/*.cnf r,
  /usr/lib/mysql/plugin/ r,
  /usr/lib/mysql/plugin/*.so* mr,
  /usr/sbin/mysqld mr,
  /usr/share/mysql/** r,
  /var/log/mysql.log rw,
  /var/log/mysql.err rw,
# /var/lib/mysql/ r,
# /var/lib/mysql/** rwk,
  /media/data/mysql/ r,       
  /media/data/mysql/** rwk,
 
root@arum#/etc/init.d/apparmor reload
root@arum#/etc/init.d/apache2 start
root@arum#/etc/init.d/mysql start

Berikutnya adalah konfigurasi heartbeat yang berfungsi sebagai failover server bila terjadi down. Ada beberapa file konfigurasi heartbeat yang harus dibuat di kedua antara lain /etc/hearbeat/authkeys, /etc/heartbeat/ha.cf dan /etc/heartbeat/haresources.
#nano /etc/heartbeat/authkeys
auth 1
1 md5 rahasiadong
#chmod 600 /etc/heartbeat/authkeys
root@akrom#nano /etc/heartbeat/ha.cf
logfacility local0
keepalive 2
deadtime 5
ping 192.168.42.132
udpport 694
bcast eth0
node akrom
node arum
auto_failback on
root@arum#nano /etc/heartbeat/ha.cf
logfacility local0
keepalive 2
deadtime 5
ping 192.168.42.132
udpport 694
bcast eth0
node akrom
node arum
auto_failback on
 
#nano /etc/heartbeat/haresources
akrom IPaddr::192.168.42.133/24/eth0 drbddisk::server Filesystem::/dev/drbd0::/media/data::ext4 mysql apache2

Konfigurasi DRBD dan Heartbeat kali ini sudah selesai tinggal install contentnya tapi sebelum itu restart kedua server dengan cara berikut.
#/etc/init.d/apache2 stop
#/etc/init.d/mysql stop
#umount /media/data
#drbdadm secondary server
#/etc/init.d/heartbeat start
#reboot
Setelah proses reboot selesai kita bisa install content dalam server. Sebagai contoh saya akan install wordpress. Download dulu installernya disini.
#unzip wordpress-3.7.1.zip
#cp -r wordpress/* /media/data/var/ 
Buat sebuah database yang akan digunakan untuk wordpress yang akan diinstall.
#mysql -u root -p
mysql> create databse coba;
mysql> quit
Buka browser kemudian lakukan instalasi wordpress, akses web dengan IP address 192.168.42.133. Bila sudah selesai melakukan proses instalasi wordpress akses web tersebut dan sebagai percobaan failover matikan server pertama (primary) kemudian coba akses terus dengan alamat yang sama yaitu 192.168.42.133. Seharusnya akan langsung fail over walaupun ada downtime beberapa detik.

2 thoughts on “DRBD + HEARTBEAT UNTUK HIGH AVAILABILITY LAMP SERVER

  1. Mau tanya ya mas, kenapa setelah melakukan konfigurasi drbd, kok service apache saya error…muncul pesan seperti di bawah ini:
    dadanirwan@slave:/etc/ha.d$ sudo service apache2 start
    /etc/init.d/apache2: 64: .: Can't open /etc/apache2/envvars
    /etc/init.d/apache2: 76: .: Can't open /etc/apache2/envvars
    ERROR: APACHE_PID_FILE needs to be defined in /etc/apache2/envvars
    mohon jawaban nya mas..

Leave a Reply

Your email address will not be published. Required fields are marked *