HAクラスタシステム構築(Heartbeat+DRBD+Apache)

最終更新日: 2009.09.15

<<トップページ <<新着情報 <<質問掲示板 <<アンケート <<サイト内検索 <<管理人へメール <<Fedoraで自宅サーバー構築

■概要

Heartbeat+DRBDでアクティブ・スタンバイ型のHA(High Availability:高可用性)クラスタシステムを構築する。
ここでは、2台のサーバーでクラスタシステムを構築し、アクティブ側サーバーダウン時に自動でスタンバイ側サーバーにサービスを切り替え(フェイルオーバー)、スタンバイ側でサービスを継続できるようにする。対象サービスはDRBDとApacheとする。

【heartbeat+DRBDによるクラスタシステム構成】


■DRBD前提

DRBDはマウントレベル(/home等)ではなく、デバイスレベル(/dev/VolGroup00/lvol0等)でデータの二重化を行うため、ハードディスク追加または、既存論理ボリュームサイズ縮小してDRBD用に空きの論理ボリュームを追加する。
※空き論理ボリュームにはファイルシステムを作成しないこと
[root@cl1 ~]# df ← マウント状況照会
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                       3428080   1557756   1693380  48% / ← 論理ボリューム(/dev/mapper/VolGroup00-LogVol00)に/が割当てられている
/dev/sda1               101086     17832     78035  19% /boot
tmpfs                   127796         0    127796   0% /dev/shm

[root@cl1 ~]# grep swap /etc/fstab ← swap割当てボリューム照会
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0 ← 論理ボリューム(/dev/VolGroup00/LogVol01)にswapが割当てられている

[root@cl1 ~]# lvdisplay -C ← 論理ボリューム一覧
  LV       VG         Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  LogVol00 VolGroup00 -wi-ao   3.38G ← /に割当て済※上記照会結果より
  LogVol01 VolGroup00 -wi-ao 512.00M ← swapに割当て済※上記照会結果より
  lvol0    VolGroup00 -wi-a- 992.00M ← どこにも割当てられていない論理ボリューム※上記照会結果より

■DRBDインストール

(1)DRBDインストール
[root@cl1 ~]# yum -y install drbd82 kmod-drbd82 ← DRBDインストール

(2)DRBD対応kernelインストール
DRBDに必要なkmod-drbd82とkernelはバージョンの同期が必要なので、kmod-drbd82対応kernelバージョンを確認し、必要に応じてkmod-drbd82が対応するバージョンのkernelをインストールし、該当バージョンのkernelでシステムを起動する。
[root@cl1 ~]# rpm -qi kmod-drbd82 ← kmod-drbd82対応kernelバージョン確認
Name        : kmod-drbd82                  Relocations: (not relocatable)
Version     : 8.2.6                             Vendor: CentOS
Release     : 2                             Build Date: 2008年10月04日 01時46分57秒
Install Date: 2009年02月10日 23時01分54秒      Build Host: c5-i386-build
Group       : System Environment/Kernel     Source RPM: drbd82-kmod-8.2.6-2.src.rpm
Size        : 2047377                          License: GPL
Signature   : DSA/SHA1, 2008年10月04日 01時47分52秒, Key ID a8a447dce8562897
URL         : http://www.drbd.org/
Summary     : drbd82 kernel module(s)
Description :
This package provides the drbd82 kernel modules built for the Linux
kernel 2.6.18-92.1.13.el5 for the i686 family of processors. ← kernel-2.6.18-92.1.13.el5対応

[root@cl1 ~]# uname -r ← 起動中kernelバージョン確認
2.6.18-92.1.22.el5 ← kmod-drbd82対応kernelバージョンと異なる

[root@cl1 ~]# rpm -q kernel ← インストール済kernelバージョン確認
kernel-2.6.18-92.el5
kernel-2.6.18-92.1.22.el5
kmod-drbd82対応kernelバージョンはインストールされていない

[root@cl1 ~]# yum -y install yum-allowdowngrade ← 古いバージョンのkernelをインストールできるようにする

[root@cl1 ~]# yum --allow-downgrade -y install kernel-2.6.18-92.1.13.el5 ← kmod-drbd82対応kernelインストール

[root@cl1 ~]# reboot ← 再起動

ブートローダーGRUBのメニューでkmod-drbd82対応kernelバージョンを選択してシステムを起動する

[root@cl1 ~]# uname -r ← 起動中kernelバージョン確認
2.6.18-92.1.13.el5 ← kmod-drbd82対応kernelバージョン
※以後、yumによるkernelアップデート時は、kernel、kmod-drbd82のバージョンが揃ったら、該当kernelバージョンでシステムを再起動する

■DRBD設定

[root@cl1 ~]# vi /etc/drbd.conf ← DRBD設定ファイル作成
#
# please have a a look at the example configuration file in
# /usr/share/doc/drbd82/drbd.conf
#
global { usage-count yes; }
common { syncer { rate 10M; } }
resource r0 {
    protocol C;
    startup {
         degr-wfc-timeout 120;
    }
    net {
         cram-hmac-alg sha1;
         shared-secret "FooFunFactory";
    }
    on cl1.centossrv.com { ← ノード1ホスト名(「uname -n」コマンドで表示される名前)
         device    /dev/drbd0;
         disk      /dev/VolGroup00/lvol0; ← ノード1論理ボリューム名
         address   192.168.1.100:7789; ← ノード1IPアドレス
         meta-disk  internal;
    }
    on cl2.centossrv.com { ← ノード2ホスト名(「uname -n」コマンドで表示される名前)
         device    /dev/drbd0;
         disk      /dev/VolGroup00/lvol0; ← ノード2論理ボリューム名
         address   192.168.1.200:7789; ← ノード2IPアドレス
         meta-disk  internal;
    }
}

[root@cl1 ~]# drbdadm create-md r0 ← DRBDメタデータ作成
md_offset 1040183296
al_offset 1040150528
bm_offset 1040117760

Found some data
 ==> This might destroy existing data! <==

Do you want to proceed?
[need to type 'yes' to confirm] yes ← yes応答

v07 Magic number not found
v07 Magic number not found
You want me to create a v08 style flexible-size internal meta data block.
There apears to be a v08 flexible-size internal meta data block
already in place on /dev/VolGroup00/lvol0 at byte offset 1040183296
Do you really want to overwrite the existing v08 meta-data?
[need to type 'yes' to confirm] yes ← yes応答

Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.

■DRBDディスク初期同期スキップ

DRBDディスク初回使用時はノード間でディスクのフル同期が行なわれる。ディスクの不良箇所検知にもなるが、ディスクサイズによっては大量の時間がかかる(1GBで約10分)ため、擬似的にDRBDディスク同期済にする。なお、DRBDディスク初期同期を行なう場合は本項をスキップする。
[root@cl1 ~]# drbdadm -- 6::::1 set-gi r0 ← DRBDメタデータ上ディスク同期済にする
previously 0000000000000004:0000000000000000:0000000000000000:0000000000000000:0:0:0:0:0:0
set GI to  0000000000000006:0000000000000000:0000000000000000:0000000000000000:1:0:0:0:0:0

Write new GI to disk?
[need to type 'yes' to confirm] yes ← yes応答

[root@cl1 ~]# drbdadm dump-md r0 > /tmp/md ← DRBDメタデータを/tmp/mdへ保存

[root@cl1 ~]# sed -i -r -e 's/0xF{16}/0x0000000000000000/g' /tmp/md ← /tmp/md上ディスク同期済にする

[root@cl1 ~]# drbdmeta /dev/drbd0 v08 /dev/VolGroup00/lvol0 internal restore-md /tmp/md ; rm -f /tmp/md
 ← /tmp/mdをDRBDメタデータに書き込む

Valid meta-data in place, overwrite?
[need to type 'yes' to confirm] yes ← yes応答

Successfully restored meta data

■DRBD起動

[root@cl1 ~]# /etc/rc.d/init.d/drbd start ← DRBD起動
Starting DRBD resources:    [ d(r0) s(r0) n(r0) ].
..........
***************************************************************
 DRBD's startup script waits for the peer node(s) to appear.
 - In case this node was already a degraded cluster before the
   reboot the timeout is 120 seconds. [degr-wfc-timeout]
 - If the peer was available before the reboot the timeout will
   expire after 0 seconds. [wfc-timeout]
   (These values are for resource 'r0'; 0 sec -> wait forever)
 To abort waiting enter 'yes' [  29]:yes ← yes応答※ノード1のみ

[root@cl1 ~]# chkconfig drbd on ← DRBD自動起動設定

DRBDインストール〜DRBD起動までをノード2側でも実施する。

■DRBDディスク初期同期

※「DRBDディスク初期同期スキップ」を実施した場合は本項は実施不要。
[root@cl1 ~]# drbdadm -- --overwrite-data-of-peer primary all ← ノード1側をプライマリ化&DRBDディスク初期同期実施
※時間がかかる(1GBで約10分)

[root@cl1 ~]# /etc/rc.d/init.d/drbd status ← DRBD状態確認
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
m:res  cs          st                 ds                     p  mounted  fstype
0:r0   SyncSource  Primary/Secondary  UpToDate/Inconsistent  C
...    sync'ed:    7.3%               (942492/1015740)K ← 同期中

・
・
・

[root@cl1 ~]# /etc/rc.d/init.d/drbd status ← DRBD状態確認
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
m:res  cs         st                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C ← 同期完了

■DRBD確認

[root@cl1 ~]# drbdadm primary all ← ノード1側をプライマリ化※DRBDディスク初期同期でプライマリ化済の場合は実施不要

[root@cl1 ~]# /etc/rc.d/init.d/drbd status ← ノード1側DRBD状態確認
drbd driver loaded OK; device status:
version: 8.2.5 (api:88/proto:86-88)
GIT-hash: 9faf052fdae5ef0c61b4d03890e2d2eab550610c build by buildsvn@c5-i386-build, 2008-03-09 10:27:36
m:res  cs         st                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C ← ノード1側がプライマリ

[root@cl2 ~]# /etc/rc.d/init.d/drbd status ← ノード2側DRBD状態確認
drbd driver loaded OK; device status:
version: 8.2.5 (api:88/proto:86-88)
GIT-hash: 9faf052fdae5ef0c61b4d03890e2d2eab550610c build by buildsvn@c5-i386-build, 2008-03-09 10:27:36
m:res  cs         st                 ds                 p  mounted  fstype
0:r0   Connected  Secondary/Primary  UpToDate/UpToDate  C ← ノード2側がセカンダリ

[root@cl1 ~]# mkfs -t ext3 /dev/drbd0 ← ノード1側でDRBDディスクへファイルシステム作成
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
126976 inodes, 253935 blocks
12696 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=260046848
8 block groups
32768 blocks per group, 32768 fragments per group
15872 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@cl1 ~]# mount /dev/drbd0 /mnt ← ノード1側でDRBDディスクを/mntへマウント

[root@cl1 ~]# df ← ノード1側でDRBDディスクマウント確認
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                       3428080   1600832   1650304  50% /
/dev/sda1               101086     23800     72067  25% /boot
tmpfs                   127796         0    127796   0% /dev/shm
/dev/drbd0              999764     17652    931328   2% /mnt ← マウントしたDRBDディスク

[root@cl1 ~]# touch /mnt/test.txt ← ノード1側で/mnt(DRBDディスク)へテストファイル作成

[root@cl1 ~]# ll /mnt/ ← ノード1側で/mnt(DRBDディスク)照会
合計 16
drwx------ 2 root root 16384  2月 11 00:01 lost+found
-rw-r--r-- 1 root root     0  2月 11 00:02 test.txt ← 作成したファイル

[root@cl1 ~]# umount /mnt ← ノード1側でDRBDディスクマウント解除

[root@cl1 ~]# df ← ノード1側でDRBDディスクマウント解除確認
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                       3428080   1600832   1650304  50% /
/dev/sda1               101086     23800     72067  25% /boot
tmpfs                   127796         0    127796   0% /dev/shm
DRBDディスクがない

[root@cl1 ~]# drbdadm secondary all ← ノード1側をセカンダリ化

[root@cl2 ~]# drbdadm primary all ← ノード2側をプライマリ化

[root@cl1 ~]# /etc/rc.d/init.d/drbd status ← ノード1側DRBD状態確認
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
m:res  cs         st                 ds                 p  mounted  fstype
0:r0   Connected  Secondary/Primary  UpToDate/UpToDate  C ← ノード1側がセカンダリ

[root@cl2 ~]# /etc/rc.d/init.d/drbd status ← ノード2側DRBD状態確認
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
m:res  cs         st                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C ← ノード2側がプライマリ

[root@cl2 ~]# mount /dev/drbd0 /mnt ← ノード2側でDRBDディスクを/mntへマウント

[root@cl2 ~]# ll /mnt/ ← ノード2側で/mnt(DRBDディスク)照会
合計 16
drwx------ 2 root root 16384  2月 11 00:01 lost+found
-rw-r--r-- 1 root root     0  2月 11 00:02 test.txt ← ノード1側で作成したファイル

[root@cl2 ~]# umount /mnt ← ノード2側でDRBDディスクマウント解除

[root@cl2 ~]# drbdadm secondary all ← ノード2側をセカンダリ化

[root@cl1 ~]# drbdadm primary all ← ノード1側をプライマリ化

[root@cl1 ~]# /etc/rc.d/init.d/drbd status ← ノード1側DRBD状態確認
drbd driver loaded OK; device status:
version: 8.2.5 (api:88/proto:86-88)
GIT-hash: 9faf052fdae5ef0c61b4d03890e2d2eab550610c build by buildsvn@c5-i386-build, 2008-03-09 10:27:36
m:res  cs         st                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C ← ノード1側がプライマリ

[root@cl2 ~]# /etc/rc.d/init.d/drbd status ← ノード2側DRBD状態確認
drbd driver loaded OK; device status:
version: 8.2.5 (api:88/proto:86-88)
GIT-hash: 9faf052fdae5ef0c61b4d03890e2d2eab550610c build by buildsvn@c5-i386-build, 2008-03-09 10:27:36
m:res  cs         st                 ds                 p  mounted  fstype
0:r0   Connected  Secondary/Primary  UpToDate/UpToDate  C ← ノード2側がセカンダリ

■heartbeatインストール

[root@cl1 ~]# yum -y install heartbeat ← heartbeatインストール

※以下のようなエラーメッセージが出力されてheartbeatのみインストールが失敗するので再度インストールを行う
useradd: ユーザ hacluster は存在します
error: %pre(heartbeat-2.1.3-3.el5.centos.i386) scriptlet failed, exit status 9
error:   install: %pre scriptlet failed (2), skipping heartbeat-2.1.3-3.el5.centos

[root@cl1 ~]# yum -y install heartbeat ← heartbeatインストール再試行

■heartbeat設定

[root@cl1 ~]# cp /usr/share/doc/heartbeat-*/ha.cf /etc/ha.d/ ← ha.cfのサンプルをコピー

[root@cl1 ~]# vi /etc/ha.d/ha.cf ← ha.cf編集
keepalive 2 ← コメント解除(ノード間死活監視時間(秒))
deadtime 30 ← コメント解除(ノードダウン検知時間(秒))
initdead 120 ← コメント解除(起動時ノードダウン検知時間(秒))
udpport        694 ← コメント解除(ブロードキャスト使用ポート番号)
bcast  eth0            # Linux ← コメント解除(ブロードキャスト使用ネットワークインタフェース名)
watchdog /dev/watchdog ← コメントアウト(heartbeat自身の異常時にシステムを再起動する)
node cl1.centossrv.com ← 追加(ノード1ホスト名(「uname -n」コマンドで表示される名前))
node cl2.centossrv.com ← 追加(ノード2ホスト名(「uname -n」コマンドで表示される名前))
use_logd yes ← 追加(ログデーモンの有効化)※ログデーモンの設定は後述のlogd.cfで行う
crm yes ← 追加(クラスタマネージャの有効化)
※ha.cfの詳細はheartbeatのページを参照

[root@cl1 ~]# cp /usr/share/doc/heartbeat-*/logd.cf /etc/ ← logd.cfのサンプルをコピー

[root@cl1 ~]# vi /etc/logd.cf ← logd.cf編集
debugfile /var/log/ha-debug ← コメント解除(デバッグメッセージ用ファイル名)
logfile        /var/log/ha-log ← コメント解除(ログファイル名)
logfacility    none ← コメント解除&変更(syslogへログを出力しない)

[root@cl1 ~]# cp /usr/share/doc/heartbeat-*/authkeys /etc/ha.d/ ← authkeysのサンプルをコピー

[root@cl1 ~]# vi /etc/ha.d/authkeys ← authkeys編集
auth 1 ← コメント解除(ノード間認証方式は1(crc))
1 crc ← コメント解除(ノード間認証方式1はcrc)
※authkeysの詳細はheartbeatのページを参照

[root@cl1 ~]# chmod 600 /etc/ha.d/authkeys ← authkeysパーミッション変更

[root@cl1 ~]# vi haresources ← haresources新規作成※ノード1
cl1.centossrv.com \ ← ノード1ホスト名(「uname -n」コマンドで表示される名前)
        IPaddr2::192.168.1.80/24/eth0/192.168.1.255 \ ← 仮想IPアドレス(例:192.168.1.80/24)をeth0に設定
        MailTo::root::centossrv.com \ ← フェイルオーバーをメール通知する場合
        drbddisk::r0 \ ← DRBDディスク
        Filesystem::/dev/drbd0::/mnt ← /dev/drbd0を/mntへマウント

[root@cl2 ~]# vi haresources ← haresources新規作成※ノード2
cl2.centossrv.com \ ← ノード2ホスト名(「uname -n」コマンドで表示される名前)
        IPaddr2::192.168.1.80/24/eth0/192.168.1.255 \ ← 仮想IPアドレス(例:192.168.1.80/24)をeth0に設定
        MailTo::root::centossrv.com \ ← フェイルオーバーをメール通知する場合
        drbddisk::r0 \ ← DRBDディスク
        Filesystem::/dev/drbd0::/mnt ← /dev/drbd0を/mntへマウント

[root@cl1 ~]# rm -f /var/lib/heartbeat/crm/cib.xml* ;\
/usr/lib/heartbeat/haresources2cib.py haresources ← haresourcesからcib.xml作成

[root@cl1 ~]# vi /var/lib/heartbeat/crm/cib.xml ← cib.xml編集
               <nvpair id="IPaddr2_1_attr_0" name="ip" value="192.168.1.80"/>
               <nvpair id="IPaddr2_1_attr_1" name="nic" value="24"/>
               ↓
               <nvpair id="IPaddr2_1_attr_1" name="nic" value="eth0"/> ← nicのvalueをeth0へ修正※バグ?
               <nvpair id="IPaddr2_1_attr_2" name="cidr_netmask" value="eth0"/>
               ↓
               <nvpair id="IPaddr2_1_attr_2" name="cidr_netmask" value="24"/> ← cidr_netmaskのvalueを24へ修正※バグ?
               <nvpair id="IPaddr2_1_attr_3" name="broadcast" value="192.168.1.255"/>

[root@cl1 ~]# crm_verify -x /var/lib/heartbeat/crm/cib.xml ← cib.xmlチェック

[root@cl1 ~]# rm -f haresources ← haresources削除

■heartbeat起動

[root@cl1 ~]# /etc/rc.d/init.d/heartbeat start ← heartbeat起動
Starting High-Availability services:
                                                           [  OK  ]

[root@cl1 ~]# chkconfig heartbeat on ← heartbeat自動起動設定

heartbeatインストール〜heartbeat起動までをノード2側でも実施する。

■heartbeat確認

(1)heartbeat確認
[root@cl1 ~]# ip addr show eth0 ← ノード1側IPアドレス確認
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:33:f8:9f brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.80/24 brd 192.168.1.255 scope global secondary eth0 ← 仮想IPアドレス(例:192.168.1.80/24)が設定されている
    inet6 fe80::20c:29ff:fe33:f89f/64 scope link
       valid_lft forever preferred_lft forever

[root@cl1 ~]# df ← ノード1側DRBDディスクマウント確認
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                       3428080   1665096   1586040  52% /
/dev/sda1               101086     23800     72067  25% /boot
tmpfs                   127796         0    127796   0% /dev/shm
/dev/drbd0              999764     18780    930200   2% /mnt ← マウントされたDRBDディスク

[root@cl1 ~]# crm_mon ← ノード1側heartbeat状態確認
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode


============
Last updated: Wed Feb 11 00:42:17 2009
Current DC: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd)
2 Nodes configured.
1 Resources configured.
============

Node: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd): online
Node: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be): online

Resource Group: group_1
    IPaddr2_1   (heartbeat::ocf:IPaddr2):       Started cl1.centossrv.com ← ノード1側で仮想IPアドレスがアクティブ
    MailTo_2    (heartbeat::ocf:MailTo):        Started cl1.centossrv.com ← ノード1側でメール通知がアクティブ
    drbddisk_3  (heartbeat:drbddisk):   Started cl1.centossrv.com ← ノード1側でDRBDディスクがアクティブ
    Filesystem_4        (heartbeat::ocf:Filesystem):    Started cl1.centossrv.com ← ノード1側でファイルシステムがアクティブ

[root@cl2 ~]# ip addr show eth0 ← ノード2側IPアドレス確認
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:c6:44:03 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.200/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::20c:29ff:fec6:4403/64 scope link
       valid_lft forever preferred_lft forever
仮想IPアドレスは設定されていない

[root@cl2 ~]# df ← ノード2側DRBDディスクマウント確認
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                       3428080   1669496   1581640  52% /
/dev/sda1               101086     23800     72067  25% /boot
tmpfs                   127796         0    127796   0% /dev/shm
DRBDディスクはマウントされていない

[root@cl2 ~]# crm_mon ← ノード2側heartbeat状態確認
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode


============
Last updated: Wed Feb 11 00:43:54 2009
Current DC: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd)
2 Nodes configured.
1 Resources configured.
============

Node: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd): online
Node: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be): online

Resource Group: group_1
    IPaddr2_1   (heartbeat::ocf:IPaddr2):       Started cl1.centossrv.com ← ノード1側で仮想IPアドレスがアクティブ
    MailTo_2    (heartbeat::ocf:MailTo):        Started cl1.centossrv.com ← ノード1側でメール通知がアクティブ
    drbddisk_3  (heartbeat:drbddisk):   Started cl1.centossrv.com ← ノード1側でDRBDディスクがアクティブ
    Filesystem_4        (heartbeat::ocf:Filesystem):    Started cl1.centossrv.com ← ノード1側でファイルシステムがアクティブ

(2)フェイルオーバー確認
ノード1側システム停止

[root@cl2 ~]# ip addr show eth0 ← ノード2側IPアドレス確認
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:c6:44:03 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.200/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.80/24 brd 192.168.1.255 scope global secondary eth0 ← 仮想IPアドレス(例:192.168.1.80/24)が設定されている
    inet6 fe80::20c:29ff:fec6:4403/64 scope link
       valid_lft forever preferred_lft forever

[root@cl2 ~]# df ← ノード2側DRBDディスクマウント確認
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                       3428080   1669496   1581640  52% /
/dev/sda1               101086     23800     72067  25% /boot
/dev/drbd0              999764     18780    930200   2% /mnt ← マウントされたDRBDディスク

[root@cl2 ~]# crm_mon ← ノード2側heartbeat状態確認
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode


============
Last updated: Wed Feb 11 00:43:54 2009
Current DC: cl2.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd)
2 Nodes configured.
1 Resources configured.
============

Node: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be): online
Node: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd): OFFLINE

Resource Group: group_1
    IPaddr2_1   (heartbeat::ocf:IPaddr2):       Started cl2.centossrv.com ← ノード2側で仮想IPアドレスがアクティブ
    MailTo_2    (heartbeat::ocf:MailTo):        Started cl2.centossrv.com ← ノード2側でメール通知がアクティブ
    drbddisk_3  (heartbeat:drbddisk):   Started cl2.centossrv.com ← ノード2側でDRBDディスクがアクティブ
    Filesystem_4        (heartbeat::ocf:Filesystem):    Started cl2.centossrv.com ← ノード2側でファイルシステムがアクティブ

(3)フェイルバック確認
ノード1側システム起動

[root@cl1 ~]# ip addr show eth0 ← ノード1側IPアドレス確認
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:33:f8:9f brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.80/24 brd 192.168.1.255 scope global secondary eth0 ← 仮想IPアドレス(例:192.168.1.80/24)が設定されている
    inet6 fe80::20c:29ff:fe33:f89f/64 scope link
       valid_lft forever preferred_lft forever

[root@cl1 ~]# df ← ノード1側DRBDディスクマウント確認
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                       3428080   1665096   1586040  52% /
/dev/sda1               101086     23800     72067  25% /boot
tmpfs                   127796         0    127796   0% /dev/shm
/dev/drbd0              999764     18780    930200   2% /mnt ← マウントされたDRBDディスク

[root@cl1 ~]# crm_mon ← ノード1側heartbeat状態確認
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode


============
Last updated: Fri Feb 20 15:59:11 2009
Current DC: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be)
2 Nodes configured.
1 Resources configured.
============

Node: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be): online
Node: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd): online

Resource Group: group_1
    IPaddr2_1   (heartbeat::ocf:IPaddr2):       Started cl1.centossrv.com ← ノード1側で仮想IPアドレスがアクティブ
    MailTo_2    (heartbeat::ocf:MailTo):        Started cl1.centossrv.com ← ノード1側でメール通知がアクティブ
    drbddisk_3  (heartbeat:drbddisk):   Started cl1.centossrv.com ← ノード1側でDRBDディスクがアクティブ
    Filesystem_4        (heartbeat::ocf:Filesystem):    Started cl1.centossrv.com ← ノード1側でファイルシステムがアクティブ

[root@cl2 ~]# ip addr show eth0 ← ノード2側IPアドレス確認
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:c6:44:03 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.200/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::20c:29ff:fec6:4403/64 scope link
       valid_lft forever preferred_lft forever
仮想IPアドレスは設定されていない(フェイルバックにより解除された)

[root@cl2 ~]# df ← ノード2側DRBDディスクマウント確認
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                       3428080   1669496   1581640  52% /
/dev/sda1               101086     23800     72067  25% /boot
tmpfs                   127796         0    127796   0% /dev/shm
DRBDディスクはマウントされていない(フェイルバックにより解除された)

[root@cl2 ~]# crm_mon ← ノード2側heartbeat状態確認
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode


============
Last updated: Fri Feb 20 15:55:02 2009
Current DC: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be)
2 Nodes configured.
1 Resources configured.
============

Node: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be): online
Node: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd): OFFLINE

Resource Group: group_1
    IPaddr2_1   (heartbeat::ocf:IPaddr2):       Started cl1.centossrv.com ← ノード1側で仮想IPアドレスがアクティブ
    MailTo_2    (heartbeat::ocf:MailTo):        Started cl1.centossrv.com ← ノード1側でメール通知がアクティブ
    drbddisk_3  (heartbeat:drbddisk):   Started cl1.centossrv.com ← ノード1側でDRBDディスクがアクティブ
    Filesystem_4        (heartbeat::ocf:Filesystem):    Started cl1.centossrv.com ← ノード1側でファイルシステムがアクティブ

(4)自動フェイルバック設定
自動フェイルバックを無効化する場合(ノード1が復旧しても自動でフェイルバックしない)※手動によるフェイルバックは次項参照
[root@cl1 ~]# cibadmin -o crm_config -U -X '<nvpair id="cib-bootstrap-options-default-resource-stickiness" name="default-resource-stickiness" value="INFINITY"/>' ← 自動フェイルバック無効化

自動フェイルバックを有効化する場合※デフォルト
[root@cl1 ~]# cibadmin -o crm_config -U -X '<nvpair id="cib-bootstrap-options-default-resource-stickiness" name="default-resource-stickiness" value="0"/>' ← 自動フェイルバック有効化

(5)アクティブ/スタンバイ状態手動切替
[root@cl1 ~]# crm_standby -U `hostname` -v on ← ノード1側をスタンバイ状態へ切替
crm_standby[5608]: 2008/01/25_11:38:51 info: Invoked: crm_standby -U cl1.centossrv.com -v on

[root@cl1 ~]# crm_mon ← ノード1側heartbeat状態確認
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode


============
Last updated: Wed Feb 11 00:44:49 2009
Current DC: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd)
2 Nodes configured.
1 Resources configured.
============

Node: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd): standby
Node: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be): online

Resource Group: group_1
    IPaddr2_1   (heartbeat::ocf:IPaddr2):       Started cl2.centossrv.com ← ノード2側で仮想IPアドレスがアクティブ
    MailTo_2    (heartbeat::ocf:MailTo):        Started cl2.centossrv.com ← ノード2側でメール通知がアクティブ
    drbddisk_3  (heartbeat:drbddisk):   Started cl2.centossrv.com ← ノード2側でDRBDディスクがアクティブ
    Filesystem_4        (heartbeat::ocf:Filesystem):    Started cl2.centossrv.com ← ノード2側でファイルシステムがアクティブ

[root@cl1 ~]# crm_standby -U `hostname` -v off ← ノード1側をアクティブ状態へ切替
crm_standby[5604]: 2008/01/25_11:38:24 info: Invoked: crm_standby -U cl1.centossrv.com -v off

[root@cl1 ~]# crm_mon ← ノード1側heartbeat状態確認
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode


============
Last updated: Wed Feb 11 00:46:38 2009
Current DC: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd)
2 Nodes configured.
1 Resources configured.
============

Node: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd): online
Node: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be): online

Resource Group: group_1
    IPaddr2_1   (heartbeat::ocf:IPaddr2):       Started cl1.centossrv.com ← ノード1側で仮想IPアドレスがアクティブ
    MailTo_2    (heartbeat::ocf:MailTo):        Started cl1.centossrv.com ← ノード1側でメール通知がアクティブ
    drbddisk_3  (heartbeat:drbddisk):   Started cl1.centossrv.com ← ノード1側でDRBDディスクがアクティブ
    Filesystem_4        (heartbeat::ocf:Filesystem):    Started cl1.centossrv.com ← ノード1側でファイルシステムがアクティブ

■Apacheインストール

ノード1、ノード2両方にApacheインストール

■Apache監視設定

(1)Apache設定
[root@cl1 ~]# /etc/rc.d/init.d/httpd stop ← ノード1側Apache停止
Stopping httpd:                                            [  OK  ]

[root@cl1 ~]# chkconfig httpd off ← ノード1側Apache自動起動解除

[root@cl2 ~]# /etc/rc.d/init.d/httpd stop ← ノード2側Apache停止
Stopping httpd:                                            [  OK  ]

[root@cl2 ~]# chkconfig httpd off ← ノード2側Apache自動起動解除

[root@cl1 ~]# rsync -avz -e ssh --delete /var/www/ /mnt/ ← ドキュメントルートのデータをDRBDディスク(/mnt)へコピー

(2)heartbeat設定※ノード1側のみ作業
[root@cl1 ~]# vi haresources ← haresources新規作成
cl1.centossrv.com \
        IPaddr2::192.168.1.80/24/eth0/192.168.1.255 \
        MailTo::root::centossrv.com \
        drbddisk::r0 \
        Filesystem::/dev/drbd0::/var/www \ ← /dev/drbd0を/var/wwwへマウント
        httpd ← Apache

[root@cl1 ~]# /usr/lib/heartbeat/haresources2cib.py --stdout haresources > /tmp/cib.xml ← haresourcesから/tmp/cib.xml作成

[root@cl1 ~]# vi /tmp/cib.xml ← /tmp/cib.xml編集
               <nvpair id="IPaddr2_1_attr_0" name="ip" value="192.168.1.80"/>
               <nvpair id="IPaddr2_1_attr_1" name="nic" value="24"/>
               ↓
               <nvpair id="IPaddr2_1_attr_1" name="nic" value="eth0"/> ← nicのvalueをeth0へ修正※バグ?
               <nvpair id="IPaddr2_1_attr_2" name="cidr_netmask" value="eth0"/>
               ↓
               <nvpair id="IPaddr2_1_attr_2" name="cidr_netmask" value="24"/> ← cidr_netmaskのvalueを24へ修正※バグ?
               <nvpair id="IPaddr2_1_attr_3" name="broadcast" value="192.168.1.255"/>

[root@cl1 ~]# crm_verify -x /tmp/cib.xml ← /tmp/cib.xmlチェック

[root@cl1 ~]# cibadmin -R -o resources -x /tmp/cib.xml ← /tmp/cib.xml反映

[root@cl1 ~]# rm -f haresources ← haresources削除

■Apache監視確認

[root@cl1 ~]# echo test > /var/www/html/index.html ← テストページ作成

[root@cl1 ~]# crm_mon ← ノード1側heartbeat状態確認
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode


============
Last updated: Fri Feb 20 16:32:15 2009
Current DC: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be)
2 Nodes configured.
1 Resources configured.
============

Node: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be): online
Node: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd): online

Resource Group: group_1
    IPaddr2_1   (heartbeat::ocf:IPaddr2):       Started cl1.centossrv.com
    MailTo_2    (heartbeat::ocf:MailTo):        Started cl1.centossrv.com
    drbddisk_3  (heartbeat:drbddisk):   Started cl1.centossrv.com
    Filesystem_4        (heartbeat::ocf:Filesystem):    Started cl1.centossrv.com
    httpd_5     (lsb:httpd):    Started cl1.centossrv.com ← ノード1側でhttpdがアクティブ

http://192.168.1.80へアクセスしてwebページが表示されることを確認

ノード1側システム停止

[root@cl2 ~]# crm_mon ← ノード2側heartbeat状態確認
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode


============
Last updated: Fri Feb 20 15:55:02 2009
Current DC: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be)
2 Nodes configured.
1 Resources configured.
============

Node: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be): online
Node: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd): OFFLINE

Resource Group: group_1
    IPaddr2_1   (heartbeat::ocf:IPaddr2):       Started cl2.centossrv.com
    MailTo_2    (heartbeat::ocf:MailTo):        Started cl2.centossrv.com
    drbddisk_3  (heartbeat:drbddisk):   Started cl2.centossrv.com
    Filesystem_4        (heartbeat::ocf:Filesystem):    Started cl2.centossrv.com
    httpd_5     (lsb:httpd):    Started cl2.centossrv.com ← ノード2側でhttpdがアクティブ

http://192.168.1.80へアクセスしてwebページが表示されることを確認

ノード1側システム起動

[root@cl1 ~]# crm_mon ← ノード1側heartbeat状態確認
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode


============
Last updated: Fri Feb 20 16:01:22 2009
Current DC: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be)
2 Nodes configured.
1 Resources configured.
============

Node: cl2.centossrv.com (1e6245d4-01f6-42f0-b2aa-5811a88cc9be): online
Node: cl1.centossrv.com (b431343b-5a3a-4ab6-9ad1-d1c21584eefd): online

Resource Group: group_1
    IPaddr2_1   (heartbeat::ocf:IPaddr2):       Started cl1.centossrv.com
    drbddisk_2  (heartbeat:drbddisk):   Started cl1.centossrv.com
    Filesystem_3        (heartbeat::ocf:Filesystem):    Started cl1.centossrv.com
    httpd_4     (lsb:httpd):    Started cl1.centossrv.com ← ノード1側でhttpdがアクティブ

http://192.168.1.80へアクセスしてwebページが表示されることを確認

ルーター側で外部からのTCP80番ポートへのアクセスを192.168.1.80へ転送するように設定する



▲このページのトップへ戻る

LPIロゴ Copyright© 2005-2009 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします