hnakamur’s blog

ものすごい勢いで忘れる私のために未整理でもいいからとりあえずメモ

2009-11-12

CentOSでheartbeatでVIP引き継ぎ

はじめに

Amazon.co.jp: Linux-DB システム構築/運用入門 (DB Magazine SELECTION): 松信 嘉範: 本とググってみつけたHot Linux - heartbeat(1.2.x)のインストール/設定(Redhat9,WhiteBoxEL4)などのページを参考に試しました。heartbeatの設定ファイルはv1形式にしました。

cent1 (192.168.122.21)とcent2 (192.168.122.22)の2台で相互監視する例を試しました。

インストール

$ sudo install heartbeat heartbeat-pils heartbeat-stonith
0002821: "yum install heartbeat" fails - CentOS Bug Trackerのバグのため、heartbeatのインストールはもう一度実行する必要がありました。
$ sudo install heartbeat

設定

ファイアウォールでUDPのポート694を開ける

言わずもがなということで巷の説明では省略されていますが、忘れててはまったので私の場合は注意が必要です。

$ sudo vi /etc/sysconfig/iptables

以下の行を適当なところに挿入します。

-A RH-Firewall-1-INPUT -p udp -m udp --dport 694 -j ACCEPT
$ sudo /etc/init.d/iptables restart
$ sudo /sbin/iptables -L

以下の行が含まれることを確認。

ACCEPT     udp  --  anywhere             anywhere            udp dpt:ha-cluster 

/etc/ha.d/ha.cf

cent1では以下のようにします。

use_logd yes

keepalive 500ms
deadtime 10
warntime 5
initdead 60

ucast eth0 192.168.122.22

auto_failback off
#auto_failback on

node cent1
node cent2

uuidfrom nodename

cent2ではucastの行を以下のようにします。

ucast eth0 192.168.122.21

当初uuidfrom nodenameの行を忘れてはまったので注意。この指定が無いと、/var/lib/heartbeat/hb_uuidをマシンのUUIDとして使うので、仮想イメージファイルをクローンして作ったためか同じ内容になってしまい、以下のようなエラーが延々とログに出ることになります。

heartbeat[14054]: 2009/11/12_18:17:32 WARN: nodename cent1 uuid changed to cent2
heartbeat[14054]: 2009/11/12_18:17:32 WARN: nodename cent2 uuid changed to cent1
heartbeat[14054]: 2009/11/12_18:17:32 WARN: nodename cent1 uuid changed to cent2

/etc/ha.d/haresources

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

cent1 192.168.122.90

/etc/ha.d/authkeys

2台ともLAN内なので認証はcrcにしました。

auth 1
1 crc
$ sudo chmod 600 /etc/ha.d/authkeys

実験

cent1、cent2ともコマンドを実行する端末とは別に端末を起動しておいてtail -f /var/log/ha-logを実行しておくと動きを見られてよいです。

まず、cent1でheartbeatを起動します。

cent1$ sudo /etc/init.d/heartbeat start

起動してしばらくすると、仮想IPアドレスが設定されます。ipコマンドで確認するなら以下のようにします。

cent1$ /sbin/ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.21/24 brd 192.168.122.255 scope global eth0
    inet 192.168.122.90/24 brd 192.168.122.255 scope global secondary eth0:0
    inet6 fe80::5054:ff:fe12:3456/64 scope link 
       valid_lft forever preferred_lft forever

ifconfigで確認する場合は以下のようにします。

cent1$ /sbin/ifconfig -a eth0:0
eth0:0    Link encap:Ethernet  HWaddr 52:54:00:12:34:56  
          inet addr:192.168.122.90  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:10 Base address:0xc000

cent1だけ起動してcent2を起動しない場合はha.cfのinitdeadの設定値、この場合は60秒後に仮想IPアドレスが設定されました。

cent1を起動してすぐにcent2も起動した場合はcent1のログにLink cent2:eth0 upと出力されてから13秒後に仮想IPアドレスが設定されました。ha.cfのdeadtimeが10秒という設定なので、これ+αということのようです。

次に、cent2でheartbeatを起動します。

cent2$ sudo /etc/init.d/heartbeat start

ログを見て起動が完了したことを確認したら、cent1でheartbeatを停止してみます。

cent1$ sudo /etc/init.d/heartbeat stop

ログを見て仮想IPが引き継がれた旨が表示されたらipまたはifconfigで確認してみると無事引き継がれていることを確認できました。

ブログ アーカイブ