我是山姆鍋

想要達到系統高可用性 (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
浮動IP位址: 192.168.1.100

安裝 Pacemaker/heartbeat

所需要的 heartbeat 跟 pacemaker 套件已經在 Ubuntu 的套件庫中

1
# apt-get install -y heartbeat pacemaker

設定 Heartbeat

檔案 /etc/heartbeat/ha.cf (Node1)

1
2
3
4
5
6
7
8
9
10
11
12
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)

1
2
3
4
5
6
7
8
9
10
11
12
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

1
2
auth 1
1 sha1 CHANGEME

其中 CHANGEME 要改成您自己系統的密碼。
在 node1 的命令列,執行下列指令:

1
2
3
4
5
# 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"

因為我們只使用兩個節點,所以需要一些特別設定

1
2
# crm configure property stonith-enabled=false
# crm configure property no-quorum-policy=ignore

設定浮動 IP 位址

1
2
3
# crm configure primitive ClusterIP ocf:heartbeat:IPaddr2 \
params ip=192.168.1.100 cidr_netmask=32 \
op monitor interval=30s

結論

由於沒有使用 stonith 裝置,不建議使用在需要同時修改資料的服務, 如資料庫。
只有兩個節點,當兩個節點因為網路問題,彼此無法通訊的話,有可能出現同一個服務在兩個節點都被執行。