刻むぜ ハートビート

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

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

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

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

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *