想要達到系統高可用性(high availability)的需求,自然免不了需要採用現成的解決方案。本文說明如何利用 Pacemaker/heartbeat 來建構一個雙節點的從其系統。
系統需求
- 作業系統: Ubuntu 10.04 LTS 64-bit
- Pacemaker 版本: 1.0.8+hg15494-2ubuntu2
- Heartbeat 版本: 1:3.0.3-1ubuntu1
目標
完成後,兩個節點(node)將可以彼此監控狀態,當某節點發生錯誤時,將在該節點上執行的服務自動轉移到另一個節點。同時為了示範目的,某個浮動 IP 位址會綁定到其中一個節點。
假設
假設有兩台伺服器(不管事實體還是虛擬),其名稱
伺服器(一) | 伺服器(二) | |
主機名稱 | node1 | node2 |
內部IP位址 | 192.168.1.10 | 192.168.1.11 |
安裝 Pacemaker/heartbeat
所需要的 heartbeat 跟 pacemaker 套件已經在 Ubuntu 的套件庫中
# apt-get install -y heartbeat pacemaker
設定 Heartbeat
檔案/etc/heartbeat/ha.cf (Node1)
logfacility daemon
keepalive 2
deadtime 15
warntime 5
initdead 120
udpport 694
ucast eth0 192.168.1.11
auto_failback off
node node1
node node2
use_logd yes
crm respawn
檔案/etc/heartbeat/ha.cf (Node2)
logfacility daemon
keepalive 2
deadtime 15
warntime 5
initdead 120
udpport 694
ucast eth0 192.168.1.10
auto_failback off
node node1
node node2
use_logd yes
crm respawn
在 node1 修改或建立檔案 /etc/ha.d/authkeys
auth 1
1 sha1 CHANGEME
其中 CHANGEME 要改成您自己系統的密碼。 在 node1 的命令列,執行下列指令:
# chmod 600 /etc/ha.d/authkeys
# service heartbeat start
# scp /etc/ha.d/authkeys root@node2:/etc/ha.d/
# ssh root@node2 "chmod 600 /etc/ha.d/authkeys"
# ssh root@node2 "service heartbeat start"
因為我們只使用兩個節點,所以需要一些特別設定
# crm configure property stonith-enabled=false
# crm configure property no-quorum-policy=ignore
設定浮動 IP 位址
# crm configure primitive ClusterIP ocf:heartbeat:IPaddr2 \
params ip=192.168.1.100 cidr_netmask=32 \
op monitor interval=30s
結論
由於沒有使用 stonith 裝置,不建議使用在需要同時修改資料的服務, 如資料庫。 只有兩個節點,當兩個節點因為網路問題,彼此無法通訊的話,有可能出現同一個服務在兩個節點都被執行。