Heartbeatをインストールした時の備忘録です。

動作環境


使用OS
CentOS 5.5 64bit

NICに割り当てたIP
master.local: eth0 192.168.0.50,eth1 192.168.100.2,eth0:0 192.168.0.25(仮想IP)
slave.local: eth0 192.168.0.51,eth1 192.168.100.3

Hertbeatバージョン
Heartbeat-3-0-STABLE-3.0.3
※設定はバージョン1系で行います

説明
ここでは、「Postfix」を対象にした冗長構成にします。
「Postfix」のプロセスが落ちた場合かネットワークダウン(pingがGATEWAYに届かなくなった)に「master.local」と「slave.local」が切り替わります。
切り替わりとしては、仮想IP(192.168.0.25[図の赤いIP])が「master.local」から「slave.local」に切り替わった後に「slave.local」側で「Postfix」が立ち上がります。

Heartbeatでのお互いの監視は「192.168.100.2[master.local]」「192.168.100.3[slave.local]」で行います。

また、切り替わり後の動作として「master.local」から「slave.local」へのフェイルオーバーは自動で行いますが、復旧後の「slave.local」から「master.local」への切り戻りは自動で行わないようにします。

Heartbeatはとても便利です。
無料でこんなHAが作れちゃうなんてイイですね(´ω`)b

前提条件
Postfixがインストール済みであること
「/etc/hosts」に名前解決できるように記述してあること

インストールしたパッケージグループ
ちなみに、OSインストール初期時のインストールしたパッケージグループです。

[root@master ~]# yum grouplist
Loaded plugins: fastestmirror
Setting up Group Process
Loading mirror speeds from cached hostfile
 * addons: ftp.riken.jp
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
base/group                                                         | 920 kB     00:00
extras/group                                                       | 9.7 kB     00:00
Installed Groups:
   GNOME ソフトウェア開発
   Yum Utilities
   システムツール
   ダイヤルアップネットワークサポート
   ネットワークサーバー
   メールサーバー
   開発ライブラリ

推奨
今回の環境では、「Heartbeat」監視に1系統しか用意していませんが、監視は2系統が推奨されています。
もし、1系統の場合だと、スプリットブレインが起きるてしまうかもしれません。


以下からインストール手順です。

(1)必要なパッケージのインストール
[root@master ~]# yum -y install gcc flex net-snmp-devel OpenIPMI-devel python python-devel glib2-devel libxml2-devel bzip2-devel e2fsprogs-devel openssl-devel

(2)「Heartbeat」に必要なユーザ作成
[root@master ~]# groupadd haclient
[root@master ~]# useradd -g haclient -d /etc/ha.d -M hacluster

(3)「Heartbeat」インストールに必要な「glue」のダウンロード
[root@master ~]# wget http://hg.linux-ha.org/glue/archive/1c87a0c58c59.tar.bz2
※最新版は下記URLで確認すること。
http://hg.linux-ha.org/glue/

(4)「glue」インストール
[root@master ~]# tar jxvf 1c87a0c58c59.tar.bz2
[root@master ~]# cd Reusable-Cluster-Components-1c87a0c58c59/
[root@master Reusable-Cluster-Components-1c87a0c58c59]# ./autogen.sh
[root@master Reusable-Cluster-Components-1c87a0c58c59]# ./configure --sysconfdir=/etc
---インストール先---
  Prefix                   = /usr
  Executables              = /usr/sbin
  Man pages                = /usr/man
  Libraries                = /usr/lib64
  Header files             = /usr/include
  Arch-independent files   = /usr/share
  Documentation            = /usr/share/doc
  State information        = /usr/var
  System configuration     = /etc

[root@master Reusable-Cluster-Components-1c87a0c58c59]# make
[root@master Reusable-Cluster-Components-1c87a0c58c59]# make install
※下記エラーが発生する場合
cc1: warnings being treated as errors
main.c:64: 警告: function declaration isn’t a prototype
main.c:78: 警告: function declaration isn’t a prototype
gmake[2]: *** [main.o] エラー 1
gmake[2]: ディレクトリ `/root/Reusable-Cluster-Components-1c87a0c58c59/lib/stonith' から出ます
gmake[1]: *** [all-recursive] エラー 1
gmake[1]: ディレクトリ `/root/Reusable-Cluster-Components-1c87a0c58c59/lib' から出ます
make: *** [all-recursive] エラー 1
こちらに対象を記載しています。
上記エラーは、無引数関数のプロトタイプ宣言で、引数部に「void」を指定していない場合に発生するエラーです。
# バグでしょうか?

(5)「Hertbet」インストールに必要な「Resource Agent」のダウンロード
[root@master ~]# wget http://hg.linux-ha.org/agents/archive/5ae70412eec8.tar.bz2
※最新版は下記URLで確認すること。
http://hg.linux-ha.org/agents/

(6)「Resource Agent」のインストール
[root@master ~]# tar jxvf 5ae70412eec8.tar.bz2
[root@master ~]# cd Cluster-Resource-Agents-5ae70412eec8/
[root@master Cluster-Resource-Agents-5ae70412eec8]# ./autogen.sh
[root@master Cluster-Resource-Agents-5ae70412eec8]# ./configure --sysconfdir=/etc
---インストール先---
  Prefix                   = /usr
  Executables              = /usr/sbin
  Man pages                = /usr/man
  Libraries                = /usr/lib64
  Header files             = /usr/include
  Arch-independent files   = /usr/share
  Documentation            = /usr/share/doc
  State information        = /usr/var
  System configuration     = /etc

[root@master Cluster-Resource-Agents-5ae70412eec8]# make
[root@master Cluster-Resource-Agents-5ae70412eec8]# make install

(7)「Heartbeat」のダウンロード
[root@master ~]# wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/STABLE-3.0.3.tar.bz2
※最新版は下記URLで確認すること。
http://hg.linux-ha.org/dev/

(8)「Heartbeat」のインストール
[root@master ~]# tar jxvf STABLE-3.0.3.tar.bz2
[root@master ~]# cd Heartbeat-3-0-STABLE-3.0.3/
[root@master Heartbeat-3-0-STABLE-3.0.3]# ./bootstrap
[root@master Heartbeat-3-0-STABLE-3.0.3]# ./ConfigureMe configure --sysconfdir=/etc
---インストール先---
  Executables              = "/usr/sbin"
  Man pages                = "/usr/share/man"
  Libraries                = "/usr/lib64"
  Header files             = "/usr/include"
  Arch-independent files   = "/usr/share"
  Documentation files      = "/usr/share/doc/"
  State information        = "/var"
  System configuration     = "/etc"
  Init (rc) scripts        = "/etc/init.d"
  Init (rc) defaults       = "/etc/sysconfig"

[root@master Heartbeat-3-0-STABLE-3.0.3]# make
[root@master Heartbeat-3-0-STABLE-3.0.3]# make install

(9)「master.local」側の設定
[root@master ~]# cd /etc/ha.d/
[root@master ha.d]# vi ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth1 192.168.100.3
auto_failback off
node master.local
node slave.local
watchdog /dev/watchdog

ping 192.168.0.1
respawn hacluster /usr/lib64/heartbeat/ipfail
respawn root /usr/local/bin/check_active_postfix

apiauth ipfail gid=haclient uid=hacluster
apiauth check_active_postfix gid=root uid=root

[root@master ha.d]# vi authkeys
auth 1
1 md5 password

[root@master ha.d]# chmod 600 authkeys
[root@master ha.d]# vi haresources
master.local    192.168.0.25/24/eth0 postfix

[root@master ha.d]# vi /usr/local/bin/check_active_postfix ← Postfix監視用スクリプト作成
#!/bin/sh
#
#サービス監視
#
#サービス監視の間隔
INTERVAL=60
#サービス提供IPアドレス
CHECK=/etc/init.d/postfix
GREP=/bin/grep

sleep ${INTERVAL}
while true
do
${CHECK} status | ${GREP} 'pid' > /dev/null
if test $? -ne 0
then
/usr/lib64/heartbeat/heartbeat -k
exit 100
else
echo "postfix is running"
fi
sleep ${INTERVAL}
done

[root@master ha.d]# chmod 755 /usr/local/bin/check_active_postfix
※ここで使用する「Postfix」プロセス監視スクリプトは参考文献4の物を使用させて頂いています。また、パラメータについては参考文献3を参照してください。
※ここでは、「ha.cf」を直接作成していますが「ha.cf」のサンプルは「/usr/share/doc/ha.cf」にあります。


(10)「slave.local」側の設定
[root@slave ~]# cd /etc/ha.d/
[root@slave ha.d]# vi ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth1 192.168.100.2
auto_failback off
node master.local
node slave.local
watchdog /dev/watchdog

ping 192.168.0.1
respawn hacluster /usr/lib64/heartbeat/ipfail

apiauth ipfail gid=haclient uid=hacluster
※「slave.local」側では、「ha.cf」以外はすべて「master.local」と同じで大丈夫です。

(11)「master.local」側の「Heartbeat」を起動する。
[root@master ~]# /etc/rc.d/init.d/heartbeat start
Starting High-Availability services: IPaddr[17222]: INFO:  Resource is stopped
                                                           [  OK  ]
[root@master ~]# chkconfig heartbeat on

(12)「slave.local」側の「Heartbeat」を起動する。
[root@slave ~]# /etc/rc.d/init.d/heartbeat start
Starting High-Availability services: IPaddr[13556]: INFO:  Resource is stopped
                                                           [  OK  ]
[root@slave ~]# chkconfig heartbeat on

(13)「master.local」の動作確認
[root@master ~]# ps aux | grep heartbeat
root     20701  1.0  0.6  53544  6500 ?        SLs  00:10   0:00 heartbeat: master control process
root     20704  0.0  0.6  53492  6448 ?        SL   00:10   0:00 heartbeat: FIFO reader
root     20705  0.0  0.6  53488  6444 ?        SL   00:10   0:00 heartbeat: write: ucast eth1
root     20706  0.0  0.6  53488  6444 ?        SL   00:10   0:00 heartbeat: read: ucast eth1
root     20707  0.0  0.6  53488  6444 ?        SL   00:10   0:00 heartbeat: write: ping 192.168.0.1
root     20708  0.0  0.6  53488  6444 ?        SL   00:10   0:00 heartbeat: read: ping 192.168.0.1
500      20728  0.0  0.1  35696  1360 ?        S    00:10   0:00 /usr/lib64/heartbeat/ipfail
root     20734  0.0  0.0  65388   816 pts/1    R+   00:10   0:00 grep heartbeat

[root@master ha.d]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:B6:7B:8E
          inet addr:192.168.0.50  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: 2408:c8:1fff:659:20c:29ff:feb6:7b8e/64 Scope:Global
          inet6 addr: fe80::20c:29ff:feb6:7b8e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:126838 errors:0 dropped:0 overruns:0 frame:0
          TX packets:121915 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:88904103 (84.7 MiB)  TX bytes:10857081 (10.3 MiB)

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:B6:7B:8E
          inet addr:192.168.0.25  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

[root@master ha.d]# ps aux | grep postfix
root     18512  0.0  0.1  10800  1128 ?        S    23:35   0:00 /bin/sh /usr/local/bin/check_active_postfix
root     18914  0.0  0.2  54152  2320 ?        Ss   23:35   0:00 /usr/libexec/postfix/master
postfix  18915  0.0  0.2  54216  2300 ?        S    23:35   0:00 pickup -l -t fifo -u
postfix  18916  0.0  0.2  54276  2352 ?        S    23:35   0:00 qmgr -l -t fifo -u
root     18962  0.0  0.0  65388   816 pts/1    R+   23:36   0:00 grep postfix
※Heartbeatが起動していること。仮想IP(192.168.0.25/24)が付与されていること。Postfixが立ち上がっていること。

(14)「slave.local」の動作確認
[root@slave ha.d]# ps aux | grep heartbeat
root     16039  0.2  0.6  53544  6500 ?        SLs  00:12   0:00 heartbeat: master control process
root     16041  0.0  0.6  53492  6448 ?        SL   00:12   0:00 heartbeat: FIFO reader
root     16042  0.0  0.6  53488  6444 ?        SL   00:12   0:00 heartbeat: write: ucast eth1
root     16043  0.0  0.6  53488  6444 ?        SL   00:12   0:00 heartbeat: read: ucast eth1
root     16044  0.0  0.6  53488  6444 ?        SL   00:12   0:00 heartbeat: write: ping 192.168.0.1
root     16045  0.0  0.6  53488  6444 ?        SL   00:12   0:00 heartbeat: read: ping 192.168.0.1
500      16065  0.0  0.1  37788  1528 ?        S    00:12   0:00 /usr/lib64/heartbeat/ipfail
root     16084  0.0  0.0  65428   816 pts/0    R+   00:12   0:00 grep heartbeat

[root@slave ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:5E:DE:4A
          inet addr:192.168.0.51  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: 2408:c8:1fff:659:20c:29ff:fe5e:de4a/64 Scope:Global
          inet6 addr: fe80::20c:29ff:fe5e:de4a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:145912 errors:0 dropped:0 overruns:0 frame:0
          TX packets:138544 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:96497290 (92.0 MiB)  TX bytes:12840673 (12.2 MiB)

[root@slave ~]# ps aux | grep postfix
root     13744  0.0  0.0  65428   816 pts/0    R+   23:36   0:00 grep postfix
※Heartbeatが起動していること。仮想IPが付与されていないこと。Postfixが立ち上がっていないこと。

(15)「Heartbeat」動作確認
1.「master.local」側で「Postfix」をダウンさせ、「slave.local」に切り替わること。
2.「master.local」側で「eth0(GATEWAYにping出力しているeth)」をダウンまたはLANケーブルを引っこ抜いて「slave.local」に切り替わること。
3.「slave.local」に切り替わった後で、「master.local」の「Heartbeat」を起動しても自動でフェイルオーバーしないこと。


ちかれた・・・orz


参考文献
インストール時に参考にした文献
1. http://www.linux-ha.org/doc/ch-install-from-source.html
2. http://www.clusterlabs.org/wiki/Install

設定時に参考にした文献
3. http://www.asahi-net.or.jp/~aa4t-nngk/ultramonkey2.html
4. http://www.howgry.com/page/view/id/547


11月 22, 2010 at 12:45 am by 黒ぶちメガネ
Category: Linux, 冗長化