[Seri HA 3] Sentuhan Terakhir

DRBD sudah, Heartbeat juga sudah, sekarang tinggal menggabungkan keduanya dan memilih layanan apa saja yang akan tersedia di HA kita. Layanan yang akan kita pasang sebagai HA adalah vitual IP, dimana IP ini yang akan dituju oleh kilen, file server dengan nfs dan samba, web server httpd dengan php-nya serta database server MySQL. Sebelum mengintegrasikan layanan tersebut dengan heartbeat ada baiknya dicobakan dulu tanpa heartbeat dan sudah jalan dengan benar.

Agar semua perubahan data dari layanan tersebut dapat tersinkronisasi dengan baik maka ada beberapa lokasi data layanan diatas akan ditempatkan di folder yang tersinkronisasi oleh drbd, dalam hal ini di folder /drdisk. Untuk file server kita tempatkan di /drdisk/shares. Halaman web kita tempatkan di /drdisk/html dan file untuk php session kita tempatkan di /drdisk/php/session, sementara file upload lewat php tempat penyimpanan sementaranya ada di /drdisk/tmp. MySQL database di folder /drdisk/mysql.

Pada tutorial sebelumnya kita matikan dulu layanan drbd, nah sekarang kita hidupkan di kedua komputer dan kerjakan pembuatan folder diatas pada komputer yang dijadikan primary.

[root@hb1 ~]# drbdadm primary r0
[root@hb1 ~]# mount /dev/drbd1 /drdisk/
[root@hb1 ~]# mkdir -p /drdisk/shares /drdisk/html /drdisk/mysql /drdisk/tmp /drdisk/php/session
[root@hb1 ~]# chmod ugo=rwXt /drdisk/tmp/ /drdisk/shares/
[root@hb1 ~]# chmod 770 /drdisk/php/session/
[root@hb1 ~]# chgrp apache /drdisk/php/session/

/drdisk/tmp dan /drdisk/shares permission-nya kita jadi seperti /tmp. /drdisk/php/session ber-permisson 700 dan group owner adalah apache. Setelah itu kita konfigurasi masing-masing layanan agar menggunakan folder yang telah kita sediakan tersebut. File-file konfigurasi ini harus sama di kedua komputer.

Untuk nfs file konfigurasinya adalah file /etc/exports dan isinya cuma satu baris saja:

/drdisk/shares            *(rw,squash_uids=0-99,sync)

Untuk keterangan variabelnya coba saja cari tutorial tentang nfs di internet 😉

Untuk samba, tambahkan baris berikut pada file /etc/samba/smb.conf:

[shares]
        comment = Shares Stuff
        path = /drdisk/shares
        public = yes
        writable = yes
        printable = no

File-file yang ada di /etc/samba juga perlu diduplikasi di komputer satu lagi.

Untuk apache (httpd) file yang perlu dirubah adalah /etc/httpd/conf/httpd.conf. Cari ‘DocumentRoot’ dan isikan dengan /drdisk/html. Kemudian cari ‘<Directory “/var/www/html”>’ dan ganti menjadi ‘<Directory “/drdisk/html”>’. Untuk konfigurasi php, silahkan rubah file /etc/php.ini pada bagian sbb:

....
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = /drdisk/tmp
....
session.save_path = "/drdisk/php/session"
....

Pada dasarnya itu saja yang dirubah, kalau ternyata masih ada yang perlu dirubah karena terkait dengan modul lain silahkan baca-baca di www.php.net

Untuk MySQL file konfigurasi yang dirubah adalah /etc/my.cnf:

[mysqld]
datadir=/drdisk/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Nah, kalau semua layanan diatas sudah jalan dengan baik tanpa terintegrasi dengan heartbeat, maka kini saatnya mengintegrasikan dengan heartbeat. Layanan-layanan diatas berposisi off pada waktu komputer dinyalakan (termasuk drbd), heartbeat yang akan menyalakannya.

File konfigurasi untuk layanan diatas kita tuliskan (misal) di hb-resources.xml dan hb-constarint.xml. hb-resources.xml untuk mengatur setingan layanan dan hb-constaint.xml untuk mengatur batasan/urutan layanan dinyalakan.

hb-resources.xml:

<resources>
  <master_slave id="ms-drbd1">
    <meta_attributes id="ma-ms-drbd1">
      <attributes>
        <nvpair id="ma-ms-drbd1-1" name="clone_max" value="2"/>
        <nvpair id="ma-ms-drbd1-2" name="clone_node_max" value="1"/>
        <nvpair id="ma-ms-drbd1-3" name="master_max" value="1"/>
        <nvpair id="ma-ms-drbd1-4" name="master_node_max" value="1"/>
        <nvpair id="ma-ms-drbd1-5" name="notify" value="yes"/>
        <nvpair id="ma-ms-drbd1-6" name="globally_unique" value="false"/>
        <nvpair id="ma-ms-drbd1-7" name="target_role" value="stopped"/>
      </attributes>
    </meta_attributes>
    <primitive id="drbd1" class="ocf" provider="heartbeat" type="drbd">
      <instance_attributes id="ia-drbd1">
        <attributes>
          <nvpair id="ia-drbd1-1" name="drbd_resource" value="r0"/>
        </attributes>
      </instance_attributes>
      <operations>
        <op id="op-drbd1-1" name="monitor" interval="59s" timeout="10s" role="Master"/>
        <op id="op-drbd1-2" name="monitor" interval="60s" timeout="10s" role="Slave"/>
      </operations>
    </primitive>
  </master_slave>
  <group id="group0">
    <meta_attributes id="ma-group0">
      <attributes>
        <nvpair id="ma-group0-1" name="target_role" value="started"/>
      </attributes>
    </meta_attributes>
    <primitive class="ocf" provider="heartbeat" type="Filesystem" id="fs0">
      <instance_attributes id="ia-fs0">
        <attributes>
          <nvpair id="ia-fs0-1" name="fstype" value="ext3"/>
          <nvpair id="ia-fs0-2" name="directory" value="/drdisk"/>
          <nvpair id="ia-fs0-3" name="device" value="/dev/drbd1"/>
        </attributes>
      </instance_attributes>
    </primitive>
    <primitive id="vip0" class="ocf" type="IPaddr2" provider="heartbeat">
      <instance_attributes id="ia-vip0">
        <attributes>
          <nvpair id="ia-vip0-1" name="ip" value="192.168.0.10"/>
          <nvpair id="ia-vip0-2" name="broadcast" value="192.168.0.255"/>
          <nvpair id="ia-vip0-3" name="nic" value="eth0"/>
          <nvpair id="ia-vip0-4" name="cidr_netmask" value="32"/>
        </attributes>
      </instance_attributes>
      <operations>
        <op id="op-vip0-1" name="monitor" interval="21s" timeout="5s"/>
      </operations>
    </primitive>
    <primitive class="lsb" id="nfs0" provider="heartbeat" type="nfs"/>
    <primitive class="lsb" id="smb0" provider="heartbeat" type="smb"/>
    <primitive class="lsb" id="httpd0" provider="heartbeat" type="httpd"/>
    <primitive class="lsb" id="mysql0" provider="heartbeat" type="mysqld"/>
  </group>
</resources>

Setingan untuk drbd ada di dalam tag ‘master_slave’, yang perlu diperhatikan pada ‘name=”drbd_resource”‘ value-nya harus sama dengan nama resource pada setingan drbd. Untuk layanan lain tergabung dalam tag “group”.

Selanjutnya kita lihat tag ‘primitve’ dengan tipe “Filesystem”, ini adalah layanan untuk me-mount filesystem drdb. Perhatikan atributnya dan sesuaikan bila perlu. Tag ‘primitive’ dengan tipe “IPaddr2” adalah layanan IP virtual, yaitu IP yang kita tuju untuk mengakses server kita. IP ini berbeda dengan IP kedua komputer yang dijadikan server. Dan sesuaikan bila perlu data-data yang ada pada bagian atribut.

Setelah itu perhatikan tipe-tipe ‘nfs’, ‘smb’, ‘httpd’ dan ‘mysqld’. Ini sebetulnya nama script yang kita gunakan waktu menjalankan layanan, kalau di centos dan fedora based itu adalah variabel yang dipakai setelah perintah service, untuk debian based bisa dilihat di folder /etc/init.d.

Kalau semua sudah beres tinggal mengintegrasikan kedalam layanan heartbeat yang sedang jalan dengan perintah:

cibadmin -C -o resources -x hb-resources.xml

Ganti ‘-C’ dengan ‘-R’ kalau setelah itu perlu merubah file hb-resources.xml dan ingin mengupdate setingan.

hb-constarint.xml:

<constraints>
  <rsc_order id="drbd1_before_group0" from="group0" action="start" to="ms-drbd1" to_action="promote"/>
  <rsc_colocation id="group0_on_drbd1" to="ms-drbd1" to_role="master" from="group0" score="infinity"/>
</constraints>

Setingan ini untuk mengatur agar layanan dalam group0 dijalankan apabila drbd-nya sudah jalan dengan baik. Hal ini perlu dibatasi karena kalau drbd tidak jalan maka semua layanan di atas akan bermasalah waktu dijalankan. Integrasikan juga kedalam heartbeat yang sudah jalan dengan perintah

cibadmin -C -o constraints -x hb-constarint.xml

Semua sudah beres, tinggal mencobanya. Oh ya untuk memantau heartbeat kita gunakan aplikasi hb_gui, biasanya disediakan oleh paket heartbeat-gui. Misalkan kita akan mencoba file sharing lewat nfs, kita salin file lagu, terus mainkan lewat komputer klien dan matikan komputer heartbeat yang sedang jadi master, dari hb_gui biasanya terlihat komputer mana yang sedang jadi master. Mestinya waktu peralihan heartbeat master dari satu komputer ke komputer lain akan ada jeda saat mendengarkn musik, tetapi musik tetap jalan terus. Kalau itu berhasil maka setingan HA kita bisa dibilang sukses! Fuih… 😀

Join the Conversation

11 Comments

  1. hmmmm….
    bro, gimana cara setting heartbeat pake hb_gui, soalnya klo pake xml suka pusing bacanya….
    BTW nice post, right on target!

  2. @WeNG
    Tinggal ‘Resource’ > ‘Add new item’ pada bagian yang dikehendaki. Ini dilakukan pada satu komputer saja, nanti yang kedua akan otomatis ter-update. Tetapi ada bagian tertentu yang tidak bisa diseting lewat gui, kalau tidak salah tentang konstrain. Silahkan coba-coba.

  3. Om, gmn klo primary and secondarynya sama2 mati. Apa data2nya hilang semua..? sy sdang nyoba dan yg tampil bukan primary/secondary, tp secondary/secondary.. akhirnya data di /drbddidk/(tempat mount dr /dev/drbd0) hilang semua.. kira2 apa sy salah konfigurasinya..

    Makasih tanggapannya..!

  4. @ilyas
    Data masih tetap ada. Pada dasarnya filesystemnya masih bisa diakses secara biasa, misal di /dev/sdb2, cuma kalau di mount lewat /dev/sdb2 nantinya tidak tersinkronkan. Kalau lagi jadi secondary, /dev/drbd0-nya gak ada, harus dijadikan primary dulu, ‘drbdadm primary r0’ disalah satu komputer misalnya, baru di mount lagi /dev/drbd0-nya.

  5. Mas,, untuk login ke hb_gui, gimana ya mas?

    server apa yang diisi?
    usename ?
    passwordnya apa?

    aq udah selesaiin tahap 3 tapi pengen monitoring pake hb_gui, tapi ga bisa login.
    Mohon pencerahannya…
    Terima kAsih

Leave a comment

Leave a Reply