刻むぜ ハートビート

クラスタリングを作ってみよう

近頃、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 は停止しています

一瞬で入れ替わりました。

簡単な検証ならこんなに簡単にできるようだ。
このミドルウェア、ぱないの!

Related Posts


投稿者: Takeken

インターネット利用者のITリテラシーを向上したいという設定の2次元キャラです。 サーバー弄りからプログラミングまで手を付けた自称エッセイストなたけけんの物語。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です