読者です 読者をやめる 読者になる 読者になる

mokky14's IT diary

IT関係の仕事メモ、勉強会の感想など書いてます。

Pacemaker+Heartbeatを試してみる(起動編)

Pacemaker

Pacemaker+Heartbeatを試してみる(インストール編)の続き。
サーバの構成は以下。

ノード名 外向けIPアドレス インターコネクト1 インターコネクト2
ha1.localdomain 192.168.56.10(eth1) 172.35.10.10(eth2) 172.40.20.10(eth3)
ha2.localdomain 192.168.56.20(eth3) 172.35.10.20(eth4) 172.40.20.20(eth5)

それぞれのサーバでha.cfを設定。
ha.cfは雛形になるファイルがあるので、そのファイルをコピーして使用する。
必要な部分のみコメントアウトを外していく。
ucast、nodeは環境に合わせて設定。nodeは、uname -nで出力される名前を指定する。
auto_failbackはoffに変更した。(系切替後に故障サーバが復旧したとき、自動で切り戻る事を防止する)
「pacemaker on」は自分で追加。
両方のサーバの違いはucastの指定部分のみ。

[root@ha1 /]# cp -p /usr/share/doc/heartbeat-3.0.5/ha.cf /etc/ha.d/ha.cf
[root@ha1 /]# vi /etc/ha.d/ha.cf

[root@ha1 /]# cat /etc/ha.d/ha.cf | egrep -v '^#' | egrep -v '^$'
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth2 172.35.10.20
ucast eth3 172.40.20.20
auto_failback off
node    ha1.localdomain
node    ha2.localdomain
pacemaker on
[root@ha2 /]# cp -p /usr/share/doc/heartbeat-3.0.5/ha.cf /etc/ha.d/ha.cf
[root@ha2 /]# vi /etc/ha.d/ha.cf

[root@ha2 /]# cat //etc/ha.d/ha.cf | egrep -v '^#' | egrep -v '^$'
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth4 172.35.10.10
ucast eth5 172.40.20.10
auto_failback off
node    ha1.localdomain
node    ha2.localdomain
pacemaker on

authkeysの設定。こちらは両方のサーバで共通。
コピー後にファイルの権限変更が必要なので注意。
今回はsha1アルゴリズムを使用している。

# cp -p /usr/share/doc/heartbeat-3.0.5/authkeys /etc/ha.d/authkeys
# chown root:root /etc/ha.d/authkeys
# chmod 600 /etc/ha.d/authkeys
# vi /etc/ha.d/authkeys

# cat //etc/ha.d/authkeys | egrep -v '^#' | egrep -v '^$'
auth 2
2 sha1 secret

両系でheartbeatを起動してみる。

# service heartbeat start

で、起動してみたが、crm_monがいつまでも接続できない。
/var/log/ha-logを見ると、以下のようなエラーが。

Oct 07 17:23:52 ha1.localdomain heartbeat: [5107]: ERROR: glib: ucast: error binding socket. Retrying: Permission denied
Oct  7 17:23:52 ha1 heartbeat: [5107]: ERROR: glib: ucast: error binding socket. Retrying: Permission denied
Oct 07 17:23:53 ha1.localdomain heartbeat: [5107]: ERROR: glib: ucast: error binding socket. Retrying: Permission denied
Oct  7 17:23:53 ha1 heartbeat: [5107]: ERROR: glib: ucast: error binding socket. Retrying: Permission denied
Oct 07 17:23:54 ha1.localdomain heartbeat: [5107]: ERROR: glib: ucast: unable to bind socket. Giving up: Permission denied
Oct 07 17:23:54 ha1.localdomain heartbeat: [5107]: ERROR: make_io_childpair: cannot open ucast eth2
Oct  7 17:23:54 ha1 heartbeat: [5107]: ERROR: glib: ucast: unable to bind socket. Giving up: Permission denied
Oct  7 17:23:54 ha1 heartbeat: [5107]: ERROR: make_io_childpair: cannot open ucast eth2
Oct 07 17:23:55 ha1.localdomain heartbeat: [5111]: CRIT: Emergency Shutdown: Master Control process died.
Oct 07 17:23:55 ha1.localdomain heartbeat: [5111]: CRIT: Killing pid 5107 with SIGTERM
Oct 07 17:23:55 ha1.localdomain heartbeat: [5111]: CRIT: Emergency Shutdown(MCP dead): Killing ourselves.
Oct  7 17:23:55 ha1 heartbeat: [5111]: CRIT: Emergency Shutdown: Master Control process died.
Oct  7 17:23:55 ha1 heartbeat: [5111]: CRIT: Killing pid 5107 with SIGTERM
Oct  7 17:23:55 ha1 heartbeat: [5111]: CRIT: Emergency Shutdown(MCP dead): Killing ourselves.
Oct  7 17:26:59 ha1 heartbeat: [5179]: info: Pacemaker support: on

SELinuxが悪さをしているという情報があった。SELinuxiptablesを無効にしてみる。

# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive
# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
# service iptables stop

再度チャレンジ。
両方のサーバでheartbeatを起動。

# service heartbeat start

crm_monの内容を確認。

# crm_mon -1r
============
Last updated: Tue Oct  7 18:09:46 2014
Stack: Heartbeat
Current DC: ha2.localdomain (8b5fa310-2ad6-6504-5874-35e498f88c61) - partition with quorum
Version: 1.0.13-30bb726
2 Nodes configured, unknown expected votes
0 Resources configured.
============

Online: [ ha1.localdomain ha2.localdomain ]

Full list of resources:

サーバ2台がOnlineになった。起動出来たっぽい。

SELinuxは特に要らないので、iptablesともどもOFFにする。

# vi /etc/selinux/config

SELINUX=enforcing
↓
SELINUX=permissive
# chkconfig iptables off
# chkconfig --list iptables
iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off

(追記)
/etc/ha.d/ha.cfの内容を変更してpacemaker再起動を繰り返すと、crm_monの結果に

Node ha1.localdomain (994f9fdb-49d2-458f-a26f-3d7ace82063b): UNCLEAN (offline)
Node ha2.localdomain (701f93e2-b2e2-4c22-b5e7-57f88fd864b6): UNCLEAN (offline)

のような出力が現れる。
これを削除するには、crm configure edit でcrm設定を開き、該当のnode定義を削除する必要がある。
参考:
OSごとコピーしてLinux-HA環境作りTai! « Linux-HA Japan