HeartBeat + Pacemakerをソースからインストールした時の備忘録です。

■ネットワーク図


■説明
HeartBeat + Pacemakerを利用した冗長構成を構築してみました。
ここでは、メールサーバ(postfix)の簡単な冗長化をしてみたいと思います。
手順の説明は、exampleのものですが、example2でも同じです。

■使用OS
CentOS 5.6 64bit

■IP
ホスト名: example
VIP:192.168.0.103
eht0: 192.168.0.101
eth1: 192.168.1.1 <- インターコネクト
eth2: 192.168.2.1 <- インターコネクト

ホスト名: example2
eth0: 192.168.0.102
eth1: 192.168.1.2 <- インターコネクト
eth2: 192.168.2.2 <- インターコネクト

■glueバージョン
1.0.7

■Resource Agentバージョン
1.0.4

■HertBeatバージョン
3.0.4

※3.0.5を利用しようとしたところ以下のエラーが発生して中断。
・エラー

cc1: warnings being treated as errors
heartbeat.c: In function ‘reset_seqtrack’:
heartbeat.c:5524: 警告: データ型の範囲制限によって、比較が常に false となります
gmake[2]: *** [heartbeat-heartbeat.o] エラー 1
gmake[2]: ディレクトリ `/root/Heartbeat-3-0-545554f6fc0a/heartbeat' から出ます
gmake[1]: *** [all-recursive] エラー 1
gmake[1]: ディレクトリ `/root/Heartbeat-3-0-545554f6fc0a/heartbeat' から出ます
make: *** [all-recursive] エラー 1
■Pacemakerバージョン
1.0.11

■postfixバージョン
2.8.1
※2.5以上のバージョンじゃないとエージェントがうまく動作しないっぽい。

■Linux HA Japan
http://linux-ha.sourceforge.jp/wp/

(1)glue、Resource Agent、HeartBeatは下記アドレスの手順でインストール
http://www.kurobuti.com/blog/?p=3021
※ただし、configureのオプションは以下の通りにしました。
/configure --prefix=/usr --sbindir=/usr/sbin --mandir=/usr/share/man --libdir=/usr/lib64 --oldincludedir=/usr/include --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc

(2)必要なパッケージのインストール
[root@example ~]# yum -y install libxslt-devel

(3)Pacemakerをダウンロード
[root@example ~]# wget http://hg.clusterlabs.org/pacemaker/stable-1.0/archive/6e010d6b0d49.tar.bz2
※最新版は下記アドレスを参照してください。
http://hg.clusterlabs.org/pacemaker/stable-1.0/

(4)Pacemakerのインストール
[root@example ~]# tar jxvf 6e010d6b0d49.tar.bz2
[root@example ~]# cd Pacemaker-1-0-6e010d6b0d49/
[root@example Pacemaker-1-0-6e010d6b0d49]# ./autogen.sh
[root@example Pacemaker-1-0-6e010d6b0d49]# ./configure --prefix=/usr --sbindir=/usr/sbin --mandir=/usr/share/man --libdir=/usr/lib64 --oldincludedir=/usr/include --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc
[root@example Pacemaker-1-0-6e010d6b0d49]# make
[root@example Pacemaker-1-0-6e010d6b0d49]# make install

(5)HeartBeatの設定
[root@example ~]# cd /etc/ha.d/
[root@example ha.d]# vi ha.cf
pacemaker on
logfacility local1

debug 0
udpport 694

keepalive 2
warntime 20
deadtime 24
initdead 48

bcast eth1
bcast eth2

node example
node example2
watchdog /dev/watchdog

[root@example ha.d]# vi authkeys
auth 1
1 sha1 hogehoge

[root@example ha.d]# chmod 600 authkeys


(6)ログの設定
[root@example ~]# vi /etc/syslog.conf
# 以下を最終行にでも追加
local1.*                                                /var/log/ha-log

[root@example ~]# /etc/rc.d/init.d/syslog restart
カーネルロガーを停止中:                                    [  OK  ]
システムロガーを停止中:                                    [  OK  ]
システムロガーを起動中:                                    [  OK  ]
カーネルロガーを起動中:                                    [  OK  ]

(7)HeartBeat + Pacemakerの起動
[root@example ~]# /etc/rc.d/init.d/heartbeat start
Starting High-Availability services: mknod: `/dev/watchdog': File exists
                                                           [  OK  ]
[root@example ~]# chkconfig heartbeat on

(8)状態確認
[root@example ha.d]# crm_mon
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode
============
Last updated: Sun Jun 19 04:13:23 2011
Stack: Heartbeat
Current DC: example2 (d91e1025-5ace-4a48-a233-43066d3584b7) - partition with quorum
Version: 1.0.11-6e010d6b0d49a6b929d17c0114e9d2d934dc8e04
2 Nodes configured, unknown expected votes
0 Resources configured.
============

Online: [ example example2 ]
※Onlineにホスト名が表示されていれば大丈夫。

(9)仮想IPの設定
[root@example ~]# crm
crm(live)# configure
crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 \
> params ip="192.168.0.103" nic="eth0" \
> cidr_netmask="24" \
> op monitor interval="10s"

(10)postfixエージェントの設定
crm(live)configure# primitive postfix ocf:heartbeat:postfix \
> op start interval="0s" timeout="20s" \
> op monitor interval="60s" timeout="20s" \
> op stop interval="0s" timeout="20s"

(11)クラスタの設定
crm(live)configure# property $id="cib-bootstrap-options" \
> stonith-enabled="false" \
> no-quorum-policy="ignore"
crm(live)configure# rsc_defaults resource-stickiness="INFINITY" \
> migration-threshold="1"
※STONITHの設定をしないとエラーになる。

(12)設定をコミットする
crm(live)configure# commit
crm(live)configure# show
node $id="2cb17a26-7b02-4b17-b44d-d8d6e1697c44" example2
node $id="5c25e7f4-65cc-452e-9836-1c008621b687" example
primitive postfix ocf:heartbeat:postfix \
        op start interval="0s" timeout="20s" \
        op monitor interval="3s" timeout="20s" \
        op stop interval="0s" timeout="20s"
primitive vip ocf:heartbeat:IPaddr2 \
        params ip="192.168.0.103" nic="eth0" cidr_netmask="24" \
        op monitor interval="10s"
property $id="cib-bootstrap-options" \
        dc-version="1.0.11-6e010d6b0d49a6b929d17c0114e9d2d934dc8e04" \
        cluster-infrastructure="Heartbeat" \
        stonith-enabled="false" \
        no-quorum-policy="ignore"
rsc_defaults $id="rsc-options" \
        resource-stickiness="INFINITY" \
        migration-threshold="1"

(13)確認
[root@example ~]# crm_mon
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode
============
Last updated: Sun Jun 19 09:28:47 2011
Stack: Heartbeat
Current DC: example2 (2cb17a26-7b02-4b17-b44d-d8d6e1697c44) - partition with quorum
Version: 1.0.11-6e010d6b0d49a6b929d17c0114e9d2d934dc8e04
2 Nodes configured, unknown expected votes
2 Resources configured.
============

Online: [ example example2 ]

 vip    (ocf::heartbeat:IPaddr2):       Started example
 postfix        (ocf::heartbeat:postfix):       Started example

(14)vipの確認
[root@example ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:85:82:a7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.101/24 brd 192.168.0.255 scope global eth0
    inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth0
※IPaddr2で設定されたIPはifconfigコマンドでは表示されません。

(15)exampleを落としてexample2に切り替わるか確かめる
1. vipがexample2に切り替わってること
2. postfixがexample2で立ち上がっていること

■Resource Agentの詳細を見る方法
ここでは、postfixを例にします。
[root@example ~]# crm ra info postfix
Manages a highly available Postfix mail server instance (ocf:heartbeat:postfix)

This script manages Postfix as an OCF resource in a high-availability setup.
Tested with Postfix 2.5.5 on Debian 5.0.

Parameters (* denotes required, [] the default):

binary (string, [/usr/sbin/postfix]): Full path to Postfix binary
    Full path to the Postfix binary.
    For example, "/usr/sbin/postfix".

config_dir (string): Full path to configuration directory
    Full path to a Postfix configuration directory.
    For example, "/etc/postfix".

parameters (string):
    The Postfix daemon may be called with additional parameters.
    Specify any of them here.

Operations' defaults (advisory minimum):

    start         timeout=20s
    stop          timeout=20s
    reload        timeout=20s
    monitor       interval=60s timeout=20s

参考文献
1. http://linux-ha.sourceforge.jp/wp/dl/pm-crm-setting
2. http://linux-ha.sourceforge.jp/wp/archives/1178/2
3. http://gihyo.jp/admin/serial/01/pacemaker/0002?page=1
4. http://www.drbd.jp/pacemaker.pdf
5. http://sourceforge.jp/projects/linux-ha/docs/Pacemaker_OSC2010Hokkaido
_20100626/ja/1/Pacemaker_OSC2010Hokkaido_20100626.pdf


6月 19, 2011 at 10:39 pm by 黒ぶちメガネ
Category: Linux, 冗長化