Heartbeatのインストール及び設定

# yum install heartbeat

+ha.cfの設定
# /usr/share/doc/heartbeat-*/ha.cf /etc/ha.d/
/etc/ha.d/ha.cfは最初からないので、↑のようにサンプルファイルをコピーする必要があるらしい
# vi /etc/ha.d/ha.cf
以下のように設定

crm yes
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
keepalive 2
deadtime 30
#warntime 10
initdead 120
udpport 694
#baud   19200
#serial /dev/ttyS0      # Linux
#serial /dev/cuaa0      # FreeBSD
#serial /dev/cuad0      # FreeBSD 6.x
#serial /dev/cua/a      # Solaris
#bcast  eth0            # Linux
bcast   eth1            # Linux
#bcast  le0             # Solaris
#bcast  le1 le2         # Solaris
#ucast eth0 192.168.1.2
auto_failback on
#stonith baytech /etc/ha.d/conf/stonith.baytech
#stonith_host *     baytech 10.0.0.3 mylogin mysecretpassword
#stonith_host ken3  rps10 /dev/ttyS1 kathy 0 
#stonith_host kathy rps10 /dev/ttyS1 ken3 0 
#watchdog /dev/watchdog
node    z151.drbd
node    z152.drbd
#ping 10.10.10.254
#ping_group group1 10.10.10.254 10.10.10.253
#hbaping fc-card-name
#respawn userid /path/name/to/run
#respawn hacluster /usr/lib/heartbeat/ipfail
#apiauth client-name gid=gidlist uid=uidlist
#apiauth ipfail gid=haclient uid=hacluster
#hopfudge 1
#deadping 30
#hbgenmethod time
#realtime off
#debug 1
#apiauth ipfail uid=hacluster
#apiauth ccm uid=hacluster
#apiauth cms uid=hacluster
#apiauth ping gid=haclient uid=alanr,root
#apiauth default gid=haclient
#msgfmt  classic/netstring
# use_logd yes/no
#conn_logd_time 60
#compression    bz2
#compression_threshold 2
apiauth mgmtd uid=root
respawn root /usr/lib/heartbeat/mgmtd -v
↑Pacemaker Python GUIを使用するための設定

+logd.cfの設定
# cp /usr/share/doc/heartbeat-*/logd.cf /etc/
# vi /etc/logd.cf
以下のように設定

debugfile /var/log/ha-debug
logfile /var/log/ha-log
#logfacility    daemon
logfacility     none
#entity logd
#useapphbd no
#sendqlen 256 
#recvqlen 256

+authkeysの設定
# cp /usr/share/doc/heartbeat-*/authkeys /etc/ha.d/ ← authkeysのサンプルをコピー
# vi /etc/ha.d/authkeys 
以下のように設定

auth 2
#1 crc
2 sha1 HI!
#3 md5 Hello!

# ll /etc/ha.d/authkeys
-rw-r--r-- 1 root root 39  9月 27 17:12 /etc/ha.d/authkeys
# chmod 600 /etc/ha.d/authkeys
# ll /etc/ha.d/authkeys
-rw------- 1 root root 39  9月 27 17:12 /etc/ha.d/authkeys

↑これらを相手(セカンダリ)にコピー

# scp /etc/ha.d/ha.cf 192.168.11.181:/etc/ha.d/
# scp /etc/logd.cf 192.168.11.181:/etc/
# scp /etc/ha.d/authkeys 192.168.11.181:/etc/ha.d/

これでheartbeatを起動させると、下記のエラーが出た

# /etc/init.d/heartbeat start
Starting High-Availability services: 
                                                           [失敗]
heartbeat[30911]: 2010/09/30_10:24:59 info: Version 2 support: yes
heartbeat: udpport setting must precede media statementsheartbeat[30911]: 2010/09/30_10:24:59 ERROR: Duplicate apiauth directive for API client mgmtd: [mgmtd uid=root]
heartbeat[30911]: 2010/09/30_10:24:59 ERROR: Invalid apiauth directive [mgmtd uid=root]
heartbeat[30911]: 2010/09/30_10:24:59 info: Syntax: apiauth client [uid=uidlist] [gid=gidlist]
heartbeat[30911]: 2010/09/30_10:24:59 info: Where uidlist is a comma-separated list of uids,
heartbeat[30911]: 2010/09/30_10:24:59 info: and gidlist is a comma-separated list of gids
heartbeat[30911]: 2010/09/30_10:24:59 info: One or the other must be specified.
heartbeat[30911]: 2010/09/30_10:24:59 ERROR: Heartbeat not started: configuration error.
heartbeat[30911]: 2010/09/30_10:24:59 ERROR: Configuration error, heartbeat not started.

どうやらharesourcesもサンプルをコピーしないといけないらしい
heartbeat/出遭ったエラー - PukiWiki

# cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/

heartbeat起動後、crm_monを実行すると下記のエラーが

# crm_mon
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode
Critical: Unable to connect to the CIB

hnakamur’s blog: CentOSでheartbeatを使おうとしたがうまくいかずによると、これどうやらCentOS(特に5.x系)の既知のバグらしい
やまいった。だが対処法が用意されている
Heartbeat+α - Linuxめもがっき
しかしこの通りにやると

# /usr/lib/heartbeat/haresources2cib.py /etc/ha.d/haresources > /var/lib/heartbeat/crm/cib.xml
can not parse this line:z151.drbd
can not parse this line:IPaddr2::192.168.1.180/24/eth0/192.168.1.255
can not parse this line:drbddisk::r0
can not parse this line:Filesystem::/dev/drbd0::/mnt 
cib.xml or cib.xml.sig exist in /var/lib/heartbeat/crm/
please remove them before generating new cib.xml

どうしてもcib.xmlが自動生成されてしまい邪魔
しかもharesourcesは次のように1行で書かないといけないらしい(これは恥ずかしい)

z151.drbd IPaddr2::192.168.1.180/24/eth0/192.168.1.255 drbddisk::r0 Filesystem::/dev/drbd0::/mnt

ちなみにこのharesources、両ノードとも同じ内容にしなければならないというのだが・・
hnakamur’s blog: CentOSでheartbeatでVIP引き継ぎ

/etc/ha.d/haresources
プライマリのノードと仮想IPアドレスを設定します。ですのでcent1でもcent2でも同じ内容にします。

しかしHAクラスタシステム構築(Heartbeat+DRBD+Apache) - CentOSで自宅サーバー構築では、違う内容になっている・・

[root@cl1 ~]# vi haresources ← haresources新規作成※ノード1
cl1.centossrv.com \ ← ノード1ホスト名(「uname -n」コマンドで表示される名前)
[root@cl2 ~]# vi haresources ← haresources新規作成※ノード2
cl2.centossrv.com \ ← ノード2ホスト名(「uname -n」コマンドで表示される名前)

基本的にはHAクラスタシステム構築(Heartbeat+DRBD+Apache) - CentOSで自宅サーバー構築に従えばOK

# rm -f /var/lib/heartbeat/crm/cib.xml* ; /usr/lib/heartbeat/haresources2cib.py /etc/ha.d/haresources
# cd /var/lib/heartbeat/crm/
# ll
合計 8
-rw-r--r-- 1 hacluster haclient 3962 10月  5 14:04 cib.xml
-rw-r--r-- 1 root      root     3962 10月  5 14:03 cib.xml_back
# diff -C 0  cib.xml  cib.xml_back
*** cib.xml     2010-10-05 14:04:28.000000000 +0900
--- cib.xml_back        2010-10-05 14:03:49.000000000 +0900
***************
*** 38,39 ****
!                                                       <nvpair id="IPaddr2_1_attr_1" name="nic" value="eth0"/>
!                                                       <nvpair id="IPaddr2_1_attr_2" name="cidr_netmask" value="24"/>
--- 38,39 ----
!                                                       <nvpair id="IPaddr2_1_attr_1" name="nic" value="24"/>
!                                                       <nvpair id="IPaddr2_1_attr_2" name="cidr_netmask" value="eth0"/>
# crm_verify -x /var/lib/heartbeat/crm/cib.xml
# mv /etc/ha.d/haresources /etc/ha.d/haresources_back
# /etc/rc.d/init.d/heartbeat start
Starting High-Availability services: 
                                                           [  OK  ]
# chkconfig heartbeat on
# ip addr show eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:af:ea:67 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.180/24 brd 192.168.11.255 scope global eth0
    inet6 fe80::20c:29ff:feaf:ea67/64 scope link 
       valid_lft forever preferred_lft forever
# crm_mon
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode


============
Last updated: Tue Oct  5 14:08:11 2010
Current DC: z152.drbd (252d3c17-5fce-4ca1-ba4d-42d3adc90b3a)
2 Nodes configured.
0 Resources configured.
============

Node: z152.drbd (252d3c17-5fce-4ca1-ba4d-42d3adc90b3a): online
Node: z151.drbd (d2c277ef-9c3f-42f0-84ad-e4575ae0390d): online

上記の「chkconfig heartbeat on」をやったところ、セカンダリのほうでリブートを何度も繰り返すというおかしな現象が

z152 heartbeat: [3791]: EMERG: Rebooting system.  Reason: /usr/lib/heartbeat/crmd

heartbeat - PukiWikiによると

ha.cfにてcrm onとする(yesでも可)。
すると起動に失敗し、システムが自動的に再起動してしまう。
調べてみると、crm respawnにすれば再起動はしない模様。

確かにこうすれば無限自動リブート現象は起きなくなったが、今回はそもそもPacemakerを使用するので、「crm respawn」ではなく「pacemaker on」とした。これでも現象は起きなくなった

※こうしてみるとDRBDのファイルをソースから理解するにはXMLの知識があるとよりよい。XMLの資格でも取るかなあ・・

  • cib.xml編集時の注意点

アナログを愛するデジタル生活室(別館) 2010年02月

/var/lib/heartbeat/cib.xml
このxmlファイルにリソースの設定や、リソースの持ち分に関する記述をしていくのですが、
この設定ファイルはheartbeatの再起動では再読み込みしてくれません。
専用のコマンドを使用します。
cibadmin -U -x /cib.xml
気をつけなければならないのは
/var/lib/heartbeat/cib.xml
を直接編集して、heartbeatを再起動した場合、cib.xmlデグレします。