วันนี้ ว่าจะมาอัฟข้อมูลเกี่ยวกับ เรื่องของ heartbeat version 3 + drbd + pacemaker ครับ
ซึ่งใช้งานบน production จริงๆ ครับ แล้วก็มีประสิทธิภาพในการใช้งานดี ทีเดียว
เลยอยากนำมาแบ่งปัน เพื่อนๆ ดูครับ เผื่อจะได้นำไปประยุกต์ใช้ เพื่อให้เกิดประโยชน์แก่ สังคม ต่อไป
###โจทย์
1. ให้ทำระบบ web ที่ใช้งานกับ ldap ให้มีประสิทธิภาพในการใช้งาน คือถ้า node หลักตาย ให้ย้ายการทำงานไป node รองได้ โดยที่ส่วนของ database ต้องใช้งานได้ปกติ
###ทรัพยากร
1. มีเครื่องserver ldap 2 ตัว ทำ virtual ip กัน
###Main Application:
Heartbeat V.3 : ทำหน้าที่ fail over service เช่น node master ตายจะ เช๊ค process แล้วย้ายไปทำงาน slave node แทน
drbd83 : ทำหน้าที่ disk replicate block data คือทำหน้าที่เก็บ data ไว้ใน path ที่เป็น drbd เวลาที่ heartbeat ย้ายไปทำงานที่ slave node ก็จะทำการย้าย path นี้ไปด้วย
Pacemaker : ทำหน้าที่ เพิ่มประสิทธิภาพในการทำ fail over service ให้กับ heartbeat ครับ
apache2 : ทำหน้าที่ให้บริการเว็บเพจ
openldap : เก็บ database ของลูกค้าเป็นรูปแบบ ldap
#####เริ่มกันเลย
1. ทำการ install OS = ผมใช้เป็น centos 5.4 AMD 64bit (ลงไว้ในรูปแบบนี้ ทั้งสองเครื่อง )
2. ตอนแบ่ง partition ต้องกันพื้นที่ disk ไว้ประมาณ 5G เพื่อใช้เป็น drbd path เก็บข้อมูล database
[root@ha0 etc]# fdisk -l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 1305 10482381 83 Linux
/dev/sda2 1306 1958 5245222+ 83 Linux ==> อันนี้เป็น drbd path ครับ ไม่ต้อง mount ไว้ใน fstab นะครับ heartbeat จะทำให้เองหลังจากinstallเสร็จ
/dev/sda3 1959 1991 265072+ 82 Linux swap / Solaris ==> Swap path
### ส่วนของ network ครับ
eth0 10.0.1.143 10.0.1.144 (Connected to switch) ###สำหรับ service และ physical ip
eth1 192.168.56.101 192.168.56.102 (Directly connected with cross cable) ###สำหรับ heartbeat #0
eth2 10.1.0.1 10.1.0.2 (Directly connected with cross cable) ###สำหรับ heartbeat #1 และ ใช้ในการ sync data drbd ครับ
## เริ่มทำการ ลง application drbd ครับ (ตัวนี้ต้องลง ทั้ง kernel module ของ drbd ด้วยนะครับ) ลงเสร็จทำการปิด service ตอน startup ด้วยครับ ป้องกันไม่ให้ heartbeat สับสน
[root@ha0 ~]# yum install drbd83.x86_64 kmod-drbd83.x86_64
[root@ha0 ~]# chkconfig drbd off
หลังจากลง drbd เสร็จทำการ ปรับ full zero partition ที่ใช้ทำ drbd เพื่อให้พร้อมกับการใช้งานครับ
[root@ha0 etc]# dd if=/dev/zero of=/dev/sda2
dd: writing to `/dev/sda2': No space left on device
10490446+0 records in
10490445+0 records out
5371107840 bytes (5.4 GB) copied, 163.096 seconds, 32.9 MB/s
[root@ha0 etc]#
ทำการแก้ไข config "drbd.conf" ดังนี้ครับ
โดยที่ 1 DRBD resource (r0) – DRBD target block device (/dev/sda2) - DRBD device name(/dev/drbd0).
#vi /etc/drbd.conf
global {
usage-count no;
}
common {
syncer { rate 30M;}
}
resource r0 {
protocol C;
disk {
on-io-error pass_on;
}
device /dev/drbd0;
disk /dev/sda2;
on ha0.test.aaa {
address 10.1.0.1:7788;
meta-disk internal;
}
on ha1.test.aaa {
address 10.1.0.2:7788;
meta-disk internal;
}
}
หลังจากทำ config เสร็จใน ldap server ทั้ง สองเครื่อง
ต่อไปทำการ สร้าง meta data ให้กับ drbd ครับ (รัน command นี้ทั้งสองเครื่อง)
[root@ha0 etc]# drbdadm create-md r0
เมื่อรันเสร็จแล้ว ถ้าเจอข้อความนี้แสดงว่าเสร็จ
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
ต่อไปทำการ สั่ง start drbd service ให้ทำงาน โดย manual command (รัน command นี้ทั้งสองเครื่อง)
[root@ha0 etc]# /etc/init.d/drbd start
ถ้ารันได้สำเร็จจะขึ้น ข้อความแบบข้างล่าง ( ทั้งสองเครื่อง)
Starting DRBD resources: [
r0
Found valid meta data in the expected location, 5371101184 bytes into
/dev/sda2.
d(r0) s(r0) n(r0) ].
[root@ha0 etc]#
เสร็จแล้วทำการ check process drbd ว่าทำงานหรือเปล่า
[root@ha0 ~]# cat /proc/drbd
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by
mockbuild@builder10.centos.org, 2010-06-04 08:04:09
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---- ==> แสดงว่ายังไม่เริ่ม sync ข้อมูลกันครับ
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:5245020
### สำคัญ รัน command นี้ที่ master node นะครับ (เครื่องเดียวเท่านั้น)
[root@ha0 ~]# drbdadm -- --overwrite-data-of-peer primary r0
###เมื่อเสร็จแล้วทำการ check process drbd อีกครั้งครับ จะเห็นว่า เริ่ม sync data กันแล้วระหว่างสอง node
[root@ha0 ~]# cat /proc/drbd
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by
mockbuild@builder10.centos.org, 2010-06-04 08:04:09
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---- ==> ทำงานเป็น primary/secondary แล้ว
ns:544768 nr:0 dw:0 dr:544768 al:0 bm:33 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:4700252
[=>..................] sync'ed: 10.5% (4588/5120)M delay_probe: 104 ==> เริ่ม sync data กันแล้วครับ
finish: 0:07:09 speed: 10,868 Sync pro g(1re0s,s2 76) K/sec