ลง Zimbra แบบ High Availability ด้วย DRBD, Heartbeat และ Pacemaker บน Ubuntu

Tags: 

Linux

หลังจากตอนที่แล้ว ลง 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