クラスタリングを作ってみよう
近頃、HA( High Availability )というのを良く目にしますが、簡単に言うと止まらないシステムという事のようで、言い換えれば、ここは俺に任せてお前は先にいけ。という事で片方に何か起きても大丈夫にできている。私はたぶん3人目だと思うから。ならば冗長化されていて尚良いとでも言うのでしょうか。
てなわけで、Heartbeetを利用したクラスタリングに挑戦したいと思います。
今回の対象はHTTPDのみです。NFS、NAS、DRBDなどなど設定さえすればストレージだってHAクラスタ構成にできるようなの!まずは最初の一歩。
もうずいぶんと昔、KeepAlivedとLVSでロードバランシング というネタをやった時に出てきたKeepAlivedもこのHeartbeetの仲間だと思われますが、前回はLVSで負荷分散が目的だったので、片方が落ちたときの挙動は考えてなかったな。
今回の参考サイト
UnixLife HeartBeatによるHAクラスタの設定
ITPRO 実際に作って理解する!Linuxサーバーのクラスタリング
用意したもの
VMwareでCentOS64Bitを2台分構築 NIC2個
ホストA hb02 eth0 192.168.0.1 eth1 192.168.24.70
ホストB hb03 eth0 192.168.0.2 eth1 192.168.24.71
仮想IP 192.168.24.80
My PC
|
スイッチ ーーーホストA
| |
ーーーーーホストB
こんな感じの構成を作りました。お互いにPingで疎通が取れれば準備OK。
ハートビートのインストール
modprobe.conf に options softdog nowayout=0 を記述する。
vi modprobe.conf
options softdog nowayout=0
lm_sensors のインストール。
yum -y install lm_sensors mlocate
本体をインストール。Linux-HA Japanさんのリポジトリを利用しました。
[root@hb02 pacemaker-1.0.13-2.1.el6.x86_64.repo]# yum -c pacemaker.repo install heartbeat
Installed:
heartbeat.x86_64 0:3.0.5-1.1.el6
Dependency Installed:
OpenIPMI-libs.x86_64 0:2.0.16-14.el6 PyXML.x86_64 0:0.8.4-19.el6
cluster-glue.x86_64 0:1.0.11-1.el6 cluster-glue-libs.x86_64 0:1.0.11-1.el6
heartbeat-libs.x86_64 0:3.0.5-1.1.el6 libaio.x86_64 0:0.3.107-10.el6
libtool-ltdl.x86_64 0:2.2.6-15.5.el6 net-snmp-libs.x86_64 1:5.5-49.el6_5.3
openhpi-libs.x86_64 0:2.14.1-6.el6 perl-TimeDate.noarch 1:1.16-11.1.el6
resource-agents.x86_64 0:3.9.5-1.310.0d443.el6
Complete!
割と昔の記事だったららしく、参考サイトからバージョンはずいぶんと上がっていた。
[root@hb02 pacemaker-1.0.13-2.1.el6.x86_64.repo]# rpm -qa | grep heartbeat
heartbeat-libs-3.0.5-1.1.el6.x86_64
heartbeat-3.0.5-1.1.el6.x86_64
chkconfigへの追加は不要で、既にchkconfigに入っていた。
[root@hb02 pacemaker-1.0.13-2.1.el6.x86_64.repo]# chkconfig --list heartbeat
heartbeat 0:off 1:off 2:on 3:on 4:on 5:on 6:off
参考サイトを模範に進めるにょで、自動起動をOFFる。
[root@hb02 pacemaker-1.0.13-2.1.el6.x86_64.repo]# chkconfig heartbeat off
[root@hb02 pacemaker-1.0.13-2.1.el6.x86_64.repo]# chkconfig --list heartbeat
heartbeat 0:off 1:off 2:off 3:off 4:off 5:off 6:off
設定その他うんぬん
rcスクリプトへ、追加処理のための2行を追加。
+++ /etc/init.d/heartbeat 2014-09-21 17:40:23.788639897 +0900
@@ -501,6 +501,7 @@
restart)
sleeptime=`ha_parameter deadtime`
+ RunStartStop "pre-stop"
StopHA
if ! CrmEnabled ; then
echo
@@ -510,6 +511,7 @@
echo_success
fi
echo
+ RunStartStop "pre-start"
StartHA
echo
;;
authkeys:ハートビート認証設定ファイル。の記述。
[root@hb02 ~]# cat /etc/ha.d/authkeys | egrep -v "^#|^$"
auth 1
1 sha1 takeken
ha.cf:クラスタ基本設定ファイル。
[root@hb02 ~]# cat /etc/ha.d/ha.cf | egrep -v "^#|^$"
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
bcast eth0 # Linux
ucast eth0 192.168.0.2
auto_failback on
node hb02
node hb03
では動かしてみよう
本番系、待機系の順に起動させるる。
[root@hb02 ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
Done.
httpdが動いて、仮想IPが振られマスタ。
[root@hb02 ~]# ifconfig eth1:0
eth1:0 Link encap:Ethernet HWaddr 00:0C:29:5C:C4:E2
inet addr:192.168.24.80 Bcast:192.168.24.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:16 Base address:0x2000
[root@hb02 ~]# netstat -tl | grep http
tcp 0 0 *:http *:* LISTEN
待機系は待機してます。変な日本語だな。
[root@hb03 ~]# ifconfig eth1:0
eth1:0 Link encap:Ethernet HWaddr 00:0C:29:4F:89:17
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:16 Base address:0x2000
[root@hb03 ~]# netstat -tl | grep http
[root@hb03 ~]#
[root@hb03 ~]# service httpd status
httpd は停止しています
では本番系のハートビートを停止し、本番系から待機系にフェールオーバさせます。
ドキドキ。
[root@hb02 ~]# /usr/lib64/heartbeat/heartbeat -k
[root@hb02 ~]#
[root@hb03 ~]# ifconfig eth1:0
eth1:0 Link encap:Ethernet HWaddr 00:0C:29:4F:89:17
inet addr:192.168.24.80 Bcast:192.168.24.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:16 Base address:0x2000
[root@hb03 ~]# service httpd status
httpd (pid 2091) を実行中...
わ~お。記事だとこの感動は伝わらないと思いますが、見事に待機系が動いてます。
では、本番系に戻したいと思います。戻すには本番系でハートビートを起動すればいいだけとのこと。
[root@hb02 ~]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
Done.
[root@hb02 ~]# ifconfig eth1:0
eth1:0 Link encap:Ethernet HWaddr 00:0C:29:5C:C4:E2
inet addr:192.168.24.80 Bcast:192.168.24.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:16 Base address:0x2000
[root@hb02 ~]# service httpd status
httpd (pid 2634) を実行中...
[root@hb03 ~]# service httpd status
httpd は停止しています
一瞬で入れ替わりました。
簡単な検証ならこんなに簡単にできるようだ。
このミドルウェア、ぱないの!