
หลังจากตอนที่แล้ว ลง Zimbra บน Ubuntu เพื่อใช้งานเป็นอีเมลเซิร์ฟเวอร์แบบมืออาชีพ ในความเป็นจริงหลายๆ บริษัทถือว่าอีเมลเซิร์ฟเวอร์ถือเป็นสิ่งที่มีความสำคัญมาก บางบริษัทถ้าอีเมลล่มไปก็อาจจะทำให้บริษัทแทบจะล้มละลายได้เลยทีเดียว (ว่าไปนั่น แต่ก็จริงนะเออ) เพราะฉะนั้นเทคนิคในการทำให้เซิร์ฟเวอร์สามารถให้บริการได้ตลอดเวลานั้นเราเรียกว่า High Availability ซึ่งในทางปฏิบัติจริงนั้นสามารถทำได้หลายรูปแบบมากๆ แต่สำหรับบทความนี้ผมจะแนะนำการทำ High Availability บน Zimbra ด้วยซอฟต์แวร์สามตัวที่มีชื่อว่า DRBD, Heartbeat และ Pacemaker
DRBD เป็นซอฟต์แวร์สำหรับทำสำเนาข้อมูลฮาร์ดดิสก์ทั้งสองลูกให้เหมือนกันผ่านทางระบบเครือข่าย หรือพูดแบบง่ายๆ คือ RAID1 ผ่านทางระบบเครือข่ายนั่นเอง ซึ่งในทาง High Availability แล้ว DRBD คือการทำให้เซิร์ฟเวอร์สองเครื่องมีข้อมูลเหมือนกันอยู่เสมอ ถ้ามีเครื่องใดเครื่องหนึ่งล่มไป ก็สามารถนำอีกเครื่องหนึ่งเข้ามาทำงานแทนได้ทันที โดยที่ข้อมูลไม่มีการสูญหาย
ส่วน Heartbeat และ Pacemaker จะมีหน้าที่ตามชื่อเลยครับ Heartbeat คือส่วนของการดูการทำงานของหัวใจ ในที่นี้หัวใจก็คือเซิร์ฟเวอร์ ถ้าเซิร์ฟเวอร์มีปัญหาอย่างใดอย่างหนึ่งที่ไม่สามารถให้บริการตามปกติได้ Pacemaker จะทำการกระตุ้นหัวใจ ซึ่งในที่นี้ก็คือการทำให้เซิร์ฟเวอร์สำรองเข้ามาทำงานแทนโดยอัตโนมัติโดยที่ผู้ดูแลระบบไม่จำเป็นต้องเข้ามาจัดการอะไรเลยแม้แต่อย่างเดียว
บทความนี้จะเน้นเอา Zimbra มาทำ High Availability ด้วย DRBD, Heartbeat และ Pacemaker โดยให้อ้างอิงจากวิธีการลง Zimbra บน Ubuntu เพื่อใช้งานเป็นอีเมลเซิร์ฟเวอร์แบบมืออาชีพ นำมาปรับแต่งบางขั้นตอนนะครับ
เราจะต้องมีไอพีอย่างน้อย 3 ไอพีสำหรับการทำ High Availability
- เป็นไอพีสำหรับ Zimbra ที่เอาไว้ใช้งานจริงๆ 1 ไอพี สำหรับในตัวอย่างนี้ผมใช้ไอพี 61.19.246.187
- อีกสองไอพีที่เหลืออาจจะเป็นไอพีภายในที่จะให้เซิร์ฟเวอร์ทั้งสองตัวไว้ติดต่อกัน สำหรับในตัวอย่างนี้ผมใช้ไอพี 192.168.111.1 และ 192.168.111.2
ขั้นตอนแรกที่จะต้องทำตั้งแต่ลง Ubuntu คือการตั้งค่าพาร์ทิชันที่จะต้องแยก /opt ซึ่งเป็นไดเร็กทอรี่ที่เก็บข้อมูลของ Zimbra ทั้งหมดแยกออกมาเป็นพาร์ทิชันต่างหาก ซึ่งในตัวอย่างนี้ผมมีฮาร์ดดิสก์อยู่ทั้งหมด 200GB และแบ่งพาร์ทิชันดังนี้ครับ
Filesystem Size Mounted on /dev/sda1 100M /boot /dev/sda2 10G / /dev/sda5 10G swap /dev/sda6 150M /dev/sda7 179G
/dev/sda7 คือพาร์ทิชันที่เราจะเอาไว้ mount /opt ในภายหลัง
/dev/sda6 ที่มีขนาดพาร์ทิชัน 150MB คือ meta-disk ของ DRBD ที่สามารถคำนวณคร่าวๆ ได้จากสูตร พื้นที่ฮาร์ดดิสก์ (MB) / 32768 + 1 ก็จะได้ขนาดของ meta-disk ของ DRBD ในหน่วยของ MB ซึ่งในความเป็นจริงแล้ว ถ้าเราแบ่งพาร์ทิชันไว้ที่ 150MB ก็จะรองรับจำนวนฮาร์ดดิสก์สูงสุดของ DRBD นั่นคือ 4TB เรียบร้อยแล้ว
ข้อสำคัญคือ ห้ามตั้งค่าให้ /dev/sda6 และ /dev/sda7 ทำการ mount อัตโนมัติเมื่อบูทเครื่องเป็นอันขาด ซึ่งทำได้โดยตั้งค่า Do not mount it ตั้งแต่ลง Ubuntu ในขั้นตอนการแบ่งพาร์ทิชัน หรือมาแก้ไขไฟล์ /etc/fstab ทีหลังก็ได้ครับ
- เมื่อจะเริ่มลง Zimbra อย่าลืมทำการ mount /opt ก่อน
sudo mount /dev/sda7 /opt
แล้วลง Zimbra ตามขั้นตอนปกติ
- หลังจากลง Zimbra เสร็จเรียบร้อยแล้วให้รันคำสั่งปิดไม่ให้ Zimbra รันอัตโนมัติทุกครั้งที่เปิดเครื่อง
sudo update-rc.d -f zimbra remove
ในกรณีถ้าลง bind9 เพื่อทำ Split DNS ด้วย ก็ต้องปิดไม่ให้ bind รันทุกครั้งที่เปิดเครื่องด้วยเช่นกัน
sudo update-rc.d -f bind9 remove
เมื่อเตรียมเครื่องหนึ่งเสร็จแล้ว สิ่งที่ต้องทำต่อมาคือ เตรียมเซิร์ฟเวอร์อีกเครื่องหนึ่งที่ทำตามขั้นตอนเดียวกันทั้งหมดตั้งแต่ต้น หรือถ้าทำบน Virtualization ก็สามารถใช้วิธี Clone VM ออกมาได้เลย
ต่อมาเราจะต้องตั้งค่าเซิร์ฟเวอร์แต่ละเครื่องตามนี้
- ตั้งค่าไอพีใน /etc/network/interfaces ใหม่
- ตั้ง /etc/hostname ใหม่ให้แตกต่างกัน เช่น webmail-1 และ webmail-2
- ตั้งค่า /etc/hosts ทั้งสองเครื่องใหม่เป็น
61.19.246.187 webmail.wingfoss.com webmail 192.168.111.1 webmail-1 192.168.111.2 webmail-2
อย่าลืม restart เซิร์ฟเวอร์ทั้งสองเครื่องหนึ่งรอบ หลังจากตั้งค่าเสร็จ
- เริ่มติดตั้งและตั้งค่า DRBD โดยให้ทำเหมือนกันทั้งสองเครื่องไปจนถึงคำสั่งให้ drbd start
sudo apt-get install drbd8-utils
แก้ไขไฟล์ /etc/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
#include "drbd.d/global_common.conf";
#include "drbd.d/*.res";
global { usage-count no; }
common { syncer { rate 100M; } }
resource r0 {
protocol C;
startup {
wfc-timeout 30;
degr-wfc-timeout 120; # 2 minutes
}
net {
cram-hmac-alg sha1;
shared-secret "!GzektYGX(9[";
}
on webmail-1 {
device /dev/drbd0;
disk /dev/sda7;
address 192.168.111.1:7788;
meta-disk /dev/sda6[0];
}
on webmail-2 {
device /dev/drbd0;
disk /dev/sda7;
address 192.168.111.2:7788;
meta-disk /dev/sda6[0];
}
}on webmail-1 กับ on webmail-2 ให้เปลี่ยนเป็นชื่อ hostname ตามเซิร์ฟเวอร์แต่ละเครื่อง
disk /dev/sda7; ให้เปลี่ยน /dev/sda7 เป็นพาร์ทิชันที่ต้องการทำ mirror
address 192.168.111.1:7788; ให้เปลี่ยนเป็นไอพีกับพอร์ตที่ตรงกับ hostname ของแต่ละเซิร์ฟเวอร์
meta-disk /dev/sda6[0]; ให้เปลี่ยน /dev/sda6 เป็นพาร์ทิชันของ meta-disk
เสร็จแล้วให้รันคำสั่งเพื่อเตรียม meta-disk และเริ่มรัน drbd
sudo dd if=/dev/zero of=/dev/sda6 bs=1M count=128 sudo drbdadm create-md r0 sudo /etc/init.d/drbd start
- พอ drbd เริ่มทำงานในเซิร์ฟเวอร์ทั้งสองเครื่องแล้ว ให้สั่งคำสั่งเริ่ม mirror ข้อมูลที่เซิร์ฟเวอร์ primary เพียงตัวเดียว
sudo drbdadm -- --overwrite-data-of-peer primary all
- เสร็จแล้วให้รอให้ข้อมูลทั้งสองเครื่องทำการซิงค์กัน โดยใช้คำสั่ง
watch -n1 cat /proc/drbd
ในการดูความก้าวหน้าของการซิงค์ข้อมูล ซึ่งจะแล้วแต่ความเร็วของระบบเครือข่ายและฮาร์ดดิสก์ ซึ่งปกติแล้วข้อมูล 200GB จะใช้เวลาซิงค์ประมาณ 2 ชั่วโมง
- ต่อมาจะเป็นขั้นตอนการลง heartbeat และ pacemaker โดยให้ทำที่เซิร์ฟเวอร์ทั้งสองเครื่อง
sudo apt-get install heartbeat
เสร็จแล้วแก้ไขไฟล์ /etc/heartbeat/authkeys
auth 1 1 sha1 yourpassword
โดยที่ yourpassword คือรหัสผ่านที่จะต้องตั้งให้ตรงกันทั้งสองเครื่อง เสร็จแล้วเปลี่ยน permission ไฟล์เป็น 600
sudo chmod 600 /etc/heartbeat/authkeys
- แก้ไขไฟล์ sudo vi /etc/heartbeat/ha.cf
use_logd on keepalive 2 deadtime 10 warntime 10 initdead 30 bcast eth0 node webmail-1 webmail-2 auto_failback on
bcast eth0 แก้ให้ตรงกับอินเทอร์เฟซที่เราใช้งานอยู่ node webmail-1 webmail-2 แก้ชื่อให้ตรงกับ hostname ของเซิร์ฟเวอร์แต่ละตัว
- แก้ไขไฟล์ /etc/heartbeat/haresources
webmail-1 IPaddr::61.19.246.187/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/opt::ext4 zimbra bind9
จะสังเกตเห็นว่าเซิร์ฟเวอร์แต่ละเครื่องจะต้องตั้งค่า webmail-1 เหมือนกัน ส่วน bind9 ด้านท้ายสุดถ้าไม่ได้ลงก็ไม่ต้องใส่ครับ
IPaddr::61.19.246.187/24/eth0 อันนี้คือไอพีจริง ซับเน็ต และอินเทอร์เฟสที่ต้องการใช้งานจริงๆ บนเซิร์ฟเวอร์ที่ active อยู่
zimbra bind9 ตัวนี้คือเซอร์วิสที่ต้องการให้รันขึ้นมา ถ้าเครื่องไหน active
- เสร็จแล้วสั่ง restart เครื่องเซิร์ฟเวอร์ทั้งสองเครื่องหนึ่งรอบ แล้วทดสอบด้วยการใช้คำสั่ง df -h หรือ ifconfig เซิร์ฟเวอร์หลักก่อน หลังจากนั้นลองสั่ง shutdown -h now กับเครื่องหลัก แล้วรอสักประมาณสองสามนาที แล้วลองใช้คำสั่ง df -h หรือ ifconfig เพื่อดูว่าเครื่องรองขึ้นมา active แทนหรือไม่

Add new comment