Heartbeat從字面意義就知道這軟體用於服務狀態監測, 有如監測心跳, 監看著online中的db1與standby的db2伺服器; Heartbeat常與DRBD搭配著使用, 在這第三段文章介紹裡, 我們將完成基礎的Linux HA。

本系列文章將分成四段, 避免過於冗長, 方便各位閱讀:
一、DRBD安裝與設定
二、MySQL資料庫安裝與設定
三、Heartbeat服務監測安裝與設定
四、MySQL資料庫伺服器Master-Slave Replication安裝與設定


同樣是db1與db2都需要安裝Heartbeat, 有不同之處我會註明。

安裝Heartbeat
apt-get install heartbeat


變更工作目錄到Heartbeat的resource.d目錄
cd /etc/heartbeat/resource.d


編輯MySQL Server的resource script檔, 命名為mysql
因為Heartbeat沒有對MySQL Server用的resource script, 需要我們自己建立。
nano mysql


貼上以下內容到mysql(完整的路徑是/etc/heartbeat/resource.d/mysql)
#!/bin/bash
#
# This script is inteded to be used as resource script by heartbeat
#
# Mar 2006 by Monty Taylor
#
###


. /etc/ha.d/shellfuncs


case "$1" in
    start)
        res=`/etc/init.d/mysql start`
        ret=$?
        ha_log $res
        exit $ret
        ;;
    stop)
        res=`/etc/init.d/mysql stop`
        ret=$?
        ha_log $res
        exit $ret
        ;;
    status)
        if [[ `ps -ef | grep '[m]ysqld'` > 1 ]] ; then
           echo "running"
        else
           echo "stopped"
        fi
        ;;
    *)
        echo "Usage: mysql {start|stop|status}"
        exit 1
        ;;
esac


exit 0


將此script設為可執行
chmod 755 mysql


設定Heartbeat
有三個檔案需要設定(ha.cf, authkeys, haresources)
回到/etc/heartbeat目錄(其實它是/etc/ha.d的連結)。
cd /etc/heartbeat


編輯ha.cf
nano ha.cf


將以下內容貼到ha.cf
logfile /var/log/ha.log
keepalive 2
deadtime 10
warntime 5
initdead 20
udpport 694
auto_failback off
ucast eth0 192.168.1.191
node db1
node db2


ucast設定值這裡, "eth0"是db1自己的網卡, 對方(db2)的IP 192.168.1.191
node則有db1與db2

所以db2的/etc/heartbeat/ha.cf, 會是以下內容:
logfile /var/log/ha.log
keepalive 2
deadtime 10
warntime 5
initdead 20
udpport 694
auto_failback off
ucast eth0 192.168.1.190
node db1
node db2


簡單的說, 除了ucast這行, 兩台設定一樣


這是db2的ha.cf, 注意兩台機器對應的對方IP位址不要設錯了。

設定authkeys檔案
nano authkeys

將以下內容貼到authkeys
auth 1
1 md5 a1b2c3d4

這代表所有結點(node db1與db2)都使用"a1b2c3d4"以MD5編碼後為驗證密碼。

將authkeys變更權限, 只有root才能讀寫。
chmod 600 authkeys


設定haresources檔案
nano haresources


將以下內容貼到haresources
db1 drbddisk::r0 Filesystem::/dev/drbd0::/srv::xfs::noatime,nodiratime IPaddr::192.168.1.192/255.255.255.0/eth0/192.168.1.255 mysql

因版面關係, 這段設定看起來被換行了, 實際上它是一行而已, 請注意!
這個設定的意思是:
1. 啟動DRBD r0資源
2. 掛載/dev/drbd0到/srv, XFS格式, noatime與nodiratime參數
3. 增加IP 192.168.1.192於介面卡eth0(會產生eth0:0介面)
4. mysql正是前面的MySQL Server resource script, 啟動MySQL Server

(各種資源以空白字元為區隔)

當然您還可以加上自己寫的resource script, 例如E-mail通知, 簡訊通知...之類額外處理的script。

啟動Heartbeat
兩個結點都起動Heartbeat。
/etc/init.d/heartbeat start


Heartbeat安裝與設定就結束了, 我們來手動取得服務, Heartbeat有工具程式hb_takeover可以使用。
/usr/share/heartbeat/hb_takeover



可以看到我們在db2上執行hb_takeover, MySQL Server被啟動了與其資料目錄也正確掛載。


回到db1, 也hb_takeover回來, MySQL Server回到db1上服務。


而這兩台機器切來切去, 所以我們需要第三個IP位址讓應用程式可以連接MySQL Server, 所以haresources裡指定了192.168.1.192為MySQL Server服務IP, 不管是db1或是db2, 都是用192.168.1.192與應用程式連接, 可從ifconfig指令看到Heartbeat掛上eth0:0這個額外的網路介面, 而IP位址正是192.168.1.192。

Heartbeat服務監測安裝與設定就完成了, 如果您有需要, 可以再做MySQL Server的Master-Slave Replication: MySQL資料庫伺服器Master-Slave Replication安裝與設定
Mobile01 FB粉絲團 http://www.facebook.com/TheMobile01