Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

將 heartbeat 換成 pacemaker+corosync
post by tommy @ 27 三月, 2012 20:48

我用 heartbeat 應該有好幾年了, 好像有 0.x 版開始就用到現在的 3.x 版. 記得剛開始的時候, 功能不多, 不過也沒什麼問題... 現在用的 3.x 版, 最近常常碰到 standby 的機器重新開機 (應該說 heartbeat 的程式停掉再跑), 讓原本正在運作的機器的 heartbeat 突然佔用所有的 CPU, 然後一堆 log 在 ha-log 或 ha-debug 裡頭, 接著... 原本應該正常運作的 heartbeat 就停了.

由於 heartbeat 的 maillist 中看到不少人有類似的情形, 不過... 看起來似乎沒有什麼解決方法. 由於次數越來越多, 所以就想把 heartbeat 換掉.

目前用的替代軟體是 pacemaker + corosync, 機器 (或服務) 的檢查是用 corosync 來處理, 而 pacemaker 負責資源 (或服務) 的管理. 不過... corosync 並不支援 serial port 的使用, 只能用網路來偵測 (人家是設計用來做 cluster 的, 用網路才能多對多, 不像用 serial port 只能一對一), 剛好主機板內建的網卡都沒用到, 就直接拿線接起來用, 這樣跟用 serial port 也差不多.

我用的 corosync.conf:

totem {
version: 2
token: 3000
token_retransmits_before_loss_const: 10
join: 60
consensus: 3600
vsftype: none
max_messages: 20
clear_node_high_bit: yes
secauth: off
threads: 0
rrp_mode: active
interface {
ringnumber: 0
bindnetaddr: 10.0.0.0
mcastaddr: 226.94.1.1
mcastport: 5405
}
interface {
ringnumber: 1
bindnetaddr: 10.0.1.0
mcastaddr: 226.94.2.1
mcastport: 5415
}
}
 
amf {
mode: disabled
}
 
service {
ver: 0
name: pacemaker
use_mgmtd: 1
}
 
aisexec {
user: root
group: root
}

在 pacemaker 裡頭的設定 (透過 crm 這 shell 來設定):

node fw1.teatime.com.tw \
attributes standby="off"
node fw2.teatime.com.tw \
attributes standby="off"
primitive ext_vip ocf:heartbeat:IPaddr2 \
params ip="192.168.1.254" cidr_netmask="24" nic="ethext" \
op monitor interval="10s"
primitive int_vip ocf:heartbeat:IPaddr2 \
params ip="192.168.0.254" cidr_netmask="24" nic="bond0" \
op monitor interval="10s"
primitive my_firewall_script ocf:tommy:MyFirewall \
op start interval="0" timeout="120s" \
op stop interval="0" timeout="120s" \
op monitor interval="10s"
group MyFirewall int_vip ext_vip my_firewall_script
location PreferFW2 MyFirewall 100: fw2.teatime.com.tw
property $id="cib-bootstrap-options" \
dc-version="1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b" \
cluster-infrastructure="openais" \
expected-quorum-votes="2" \
no-quorum-policy="ignore" \
stonith-enabled="false"
rsc_defaults $id="rsc-options" \
resource-stickiness="100"

那個 ocf:tommy:MyFirewall 是我自己在 /usr/lib/ocf/resource.d/ 下, 建立一個 tommy 的目錄, 然後把 /usr/lib/ocf/resource.d/pacemaker/Dummy 這個複製過來改的, 只是在 start/stop 的地方去執行一些應該跑的 script 而已.

跑了幾天, 目前看起來似乎比之前用 heartbeat 穩定多了, 至少機器開開關關的運作都很正常.

PS. corosync 所設定用到的那個 udp port, 記得 firewall 不要擋了, 我之前一直以為我沒擋掉, 結果跑起來一直有問題. 把 iptables 設好後就正常了.

Del.icio.us Furl HEMiDEMi Technorati MyShare
迴響
暱稱:
標題:
個人網頁:
電子郵件:
authimage

迴響

  

Bad Behavior 已經阻擋了 70 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS