You are on page 1of 25

HA クラスタ構築手順書

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
目次

1. はじめに ................................................................................................................................... 4
2. 構築環境 ................................................................................................................................... 4
2.1. OS ....................................................................................................................................... 4
2.2. ソフトウェア ..................................................................................................................... 4
3. ネットワーク構成..................................................................................................................... 5
4. DRBD........................................................................................................................................ 6
4.1. DRBD のインストール....................................................................................................... 6
4.2. DRDB パーティションの作成 ............................................................................................ 6
4.2.1. メタデータ用のパーティションについて ................................................................... 7
4.3. DRBD の設定 ..................................................................................................................... 7
4.3.1. hosts ファイルの編集 .................................................................................................. 7
4.3.2. 設定ファイルのコピー ................................................................................................ 8
4.3.3. drbd.conf...................................................................................................................... 8
4.4. DRBD の起動 ................................................................................................................... 10
4.5. DRBD の動作確認 ............................................................................................................ 11
4.6. プライマリ状態への移行 ................................................................................................. 11
4.7. ファイルシステムの作成 ................................................................................................. 12
4.8. ミラーリングの動作確認 ................................................................................................. 13
5. MySQL.................................................................................................................................... 14
5.1. データディレクトリの変更.............................................................................................. 14
6. Apache..................................................................................................................................... 15
6.1. ドキュメントルートの変更.............................................................................................. 15
7. heartbeat ................................................................................................................................ 16
7.1. heartbeat のインストール ............................................................................................... 16
7.2. heartbeat の設定 .............................................................................................................. 16
7.2.1. 設定ファイルのコピー .............................................................................................. 16
7.2.2. ha.cf ........................................................................................................................... 17
7.2.3. haresources ............................................................................................................... 19
7.2.4. authkeys .................................................................................................................... 20
7.2.5. DRBD 自動起動の設定 .............................................................................................. 20
7.2.6. 外部スクリプトの設定 .............................................................................................. 21
7.2.7. 外部スクリプトの環境設定 ....................................................................................... 22
7.2.8. mysqld の生存確認方法 ............................................................................................. 22
7.2.9. httpd の生存確認方法 ................................................................................................ 22

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
7.3. heartbeat の起動 .............................................................................................................. 23
7.4. heartbeat の動作確認....................................................................................................... 24
7.4.1. フェイルオーバーの確認方法 ................................................................................... 24
7.4.2. フェイルダウンの確認方法 ....................................................................................... 24
8. 参考文献 ................................................................................................................................. 25
8.1. 書籍 .................................................................................................................................. 25
8.2. Web サイト ....................................................................................................................... 25
9. 付属ファイル .......................................................................................................................... 25

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
1. はじめに
本ドキュメントでは DRDB と heartbeat を使用して、Linux を使用して HA クラスタを
構築する手順を記述する。

2. 構築環境
HA クラスタを構築する環境を下記に記述する。

2.1. OS
使用する OS とそのディストリビューション・カーネルのバージョンを下記に記述する。

♦ Linux CentOS 4.5


♦ Kernel 2.6.9-55.0.2.ELsmp

2.2. ソフトウェア
使用するソフトウェアとそのバージョンを下記に記述する。

♦ DRBD 0.7.24
♦ heartbeat 2.1.2
♦ kernel-devel 2.6.9-55.0.2.EL
♦ perl-libwww-perl-5.79-5

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
3. ネットワーク構成
下記のネットワーク構成で HA クラスタの環境を構築する。

仮想 IPeth0 192.168.1.70/24

LAN 192.168.1.0/24

eth0 192.168.1.80/24 eth0 192.168.1.90/24

CentOS 4.5 CentOS 4.5


DRBD 用ネットワーク
lemon.araboth.local orange.araboth.local
eth1 192.168.1.81/24
稼働系(heartbeat) 待機系(heartbeat)
eth1 192.168.1.91/24
プライマリノード(DRBD) セカンダリノード(DRBD)

heartbeat 用ネットワーク

eth2 10.0.0.1/8 eth2 10.0.0.2/8

LAN 10.0.0.0/8

項目 lemon.araboth.local orange.araboth.local
eth0 192.168.1.80/24 192.168.1.81/24
eth1(DRBD) 192.168.1.90/24 192.168.1.91/24
eth2(heartbeat) 10.0.0.1/8 10.0.0.2/8

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
4. DRBD
DRBD のインストール・設定、および動作確認方法を記述する。

4.1. DRBD のインストール


プライマリノードとセカンダリノードに DRBD を「yum コマンド」でインストールする。

# yum –y install drbd

# yum –y install kmod-drdb-smp

4.2. DRDB パーティションの作成


DRDB でミラーリングするパーティションは、IDE・SCSI など、どのような物理ディスク
の上に置いても問題ない。 今回の DRDB でミラーリングするディスクパーティションは SCSI
の第 2 ディスクを想定する。(/dev/sdb)
既存の IDE に物理パーティションを作成する場合や、第二の IDE ディスクをミラーリング
する場合は、適切に設定を読み替えること。 またパーティションの設定には fdisk コマンド
を使用する。 この時点ではパーティションを作成するのみであり、ファイルシステムを作成
する必用はない。

# fdisk /dev/sdb

No. パーティション デバイス

1 メタデータ用 /dev/sdb1

2 データ用 /dev/sdb2

※DRDB のパーティションについては書籍「Linux アドバンスト ネットワークサーバ構築ガイ


ド」の 365P を参考にすること。

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
4.2.1. メタデータ用のパーティションについて
メタデータを格納するパーティションは、ミラーリングするパーティション 1 個につき
128MB 以上の領域を必用とする。 また、データ用のパーティション先頭にメタデータを
配置することも可能である。その場合はメタデータ用のパーティションを作成する必用は
ない。

4.3.DRBD の設定
DRBD の設定方法について記述する。

4.3.1. hosts ファイルの編集


DNS サーバへの名前解決によるパフォーマンス低下を避けるため、hosts ファイルにミラー
リング元のホストとミラーリング先のホストを追加する。

# Do not remove the following line, or various programs


# that require network functionality will fail.
127.0.0.1lemon.araboth.local lemon localhost.localdomain localhost
192.168.1.91 orange.araboth.local orange

# Do not remove the following line, or various programs


# that require network functionality will fail.
127.0.0.1orange.araboth.local orange localhost.localdomain localhost
192.168.1.81 lemon.araboth.local lemon

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
4.3.2. 設定ファイルのコピー
DRBD インストール時に下記の場所に設定ファイルのサンプルがインストールされる
ので、それを「/etc/drbd.conf/」にコピーしてから編集する。

No. ファイル名 コピー元 コピー先


1 drbd.conf /usr/share/doc/drbd-0.7.24/drbd.conf /etc/drbd.conf

4.3.3. drbd.conf
設定ファイルはプライマリノードとセカンダリノードで同じでなければならない。

resource r0 {

protocol C;

incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";

startup {
degr-wfc-timeout 120; # 2 minutes.
}

disk {
on-io-error panic;
}

syncer {
rate 10M;
group 1;
al-extents 257;
}

on lemon.araboth.local {
device /dev/drbd0;
disk /dev/sdb2;
address 192.168.1.81:7788;
meta-disk /dev/sdb1[0];

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
}

on orange.araboth.local {
device /dev/drbd0;
disk /dev/sdb2;
address 192.168.1.91:7788;
meta-disk /dev/sdb1[0];
}
}

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
4.4. DRBD の起動
下記のコマンドでプライマリノードとセカンダリノードの DRBD を起動。

# service drbd start

対称となる DRBD が見つからない場合、下記のメッセージが表示されるが「yes」と入力


してエンターキーを押下する。

# service drbd start

Starting DRBD resources: [ d0 s0 n0 ].

..........

***************************************************************

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' [ 25]:

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
4.5. DRBD の動作確認
プライマリノード・セカンダリノードの DRBD を起動後、/proc/drbd を表示して
Secondary で起動していることを確認する。(st が両方 Secondary になっていることを確認)

# cat /proc/drbd

version: 0.7.24 (api:79/proto:74)

SVN Revision: 2875 build by buildcentos@build-i386, 2007-05-23 09:30:50

0: cs:WFConnection st:Secondary/Secondary ld:Inconsistent

ns:0 nr:0 dw:0 dr:0 al:0 bm:1008 lo:0 pe:0 ua:0 ap:0

1: cs:Unconfigured

4.6. プライマリ状態への移行
プライマリノードで下記のコマンドを実行し、プライマリ状態へ移行する。
DRBD の状態が「Primary/Secondary」になっていることを確認する。 プライマリ状態へ
移行後に同期処理がはじまるので終了するまで待つこと。
同期処理中は接続状態(cs)が「SyncTarget」になっており、同期処理が完了すると接続状態
が「Connected」、ローカルディスクの状態が「Consistent」に変化する。

# drbdadm -- --do-what-I-say primary all

# cat /proc/drbd

version: 0.7.24 (api:79/proto:74)

SVN Revision: 2875 build by buildcentos@build-i386, 2007-05-23 09:30:50

0: cs:WFConnection st:Primary/Secondary ld:Consistent

ns:0 nr:0 dw:0 dr:0 al:0 bm:1008 lo:0 pe:0 ua:0 ap:0

1: cs:Unconfigured

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
4.7.ファイルシステムの作成
セカンダリノードとの同期が完了したら、DRBD の共有ディスク上への読み書きが可能に
なるのでファイルシステムを作成する。 ファイルシステムの作成はプライマリノードで行う
こと。(今回は ext3 で作成)

# mkfs.ext3 /dev/drbd0

ファイルシステムの作成後、作成したファイルシステムを「/data」にマウントする。

# mkdir /data

# mount /dev/drbd0 /data

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
4.8.ミラーリングの動作確認
プライマリノードで共有ディスクにファイルを作成して、そのファイルがセカンダリノード
にミラーリングされていることを確認する。

# touch /data/test

プライマリノードをセカンダリ状態に変更。 もし「/dev/drbd0」をマウント解除できない
場合は「fuser」コマンドを使用してファイルシステムを使用しているプロセスを見つけ、その
プロセスを終了する。(fuser –km /data でファイルシステムを使用しているプロセスを終了)

# umount /dev/drbd0

# drbdadm secondary r0

セカンダリノードをプライマリ状態に変更し、共有ディスクをマウントする。 マウントした
共有ディスクにプライマリノードで作成したファイルが存在すればミラーリングは正常に動作
している。

# drbdadm -- --do-what-I-say primary all

# mount /dev/drbd0 /data

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
5. MySQL
MySQL のデータを DRBD でミラーリングするために、MySQL のデータ保存場所を DRBD
の共有ディスクに変更する。(プライマリ・セカンダリ両方)

5.1.データディレクトリの変更
MySQL の設定ファイル「my.cnf」の「datadir」を共有ディスクへ変更する。

[mysqld]
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

※MySQL が初期状態以外の場合、テーブルデータを共有ディスクに移動する必用がある。

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
6. Apache
Apache のデータを DRBD でミラーリングするために、Apache のドキュメントルートの
場所を共有ディスクに変更する。
(プライマリ・セカンダリ両方)

6.1.ドキュメントルートの変更
Apache の設定ファイル「httpd.conf」の「DocumentRoot」を共有ディスクに変更する。

DocumentRoot “/data/www/html”

※WebObujects の場合、付属の apache.conf も修正する必用がある。


※ScriptAlias のパスも必用に応じて修正すること。

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
7. heartbeat

7.1.heartbeat のインストール

# yum –y install heartbeat

7.2.heartbeat の設定
設定ファイル「haresources・authkeys」はプライマリノード・セカンダリノードの両方に
同じものを配置する。

7.2.1. 設定ファイルのコピー
heartbeat インストール時に下記の場所に設定ファイルのサンプルがインストールされる
ので、それを「/etc/ha.d/」にコピーしてから編集する。

No. ファイル名 コピー元 コピー先


1 ha.cf /usr/share/doc/heartbeat2.1.2/ha.cf /etc/ha.d/ha.cf
2 haresources /usr/share/doc/heartbeat2.1.2/haresources /etc/ha.d/haresources
3 authkeys /usr/share/doc/heartbeat2.1.2/authkeys /etc/ha.d/authkeys

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
7.2.2. ha.cf
クラスタの設定は「ha.cf」ファイルで行う。 稼働系と待機系で個別の設定ファイルを
作成する。

ファイル 1 稼働系の ha.cf

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
baud 19200
ucast eth2 10.0.0.2
auto_failback on
watchdog /dev/watchdog
node lemon.araboth.local orange.araboth.local
ping 192.168.1.254
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
ファイル 2 待機系の ha.cf

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
baud 19200
ucast eth2 10.0.0.2

auto_failback on
watchdog /dev/watchdog
node lemon.araboth.local orange.araboth.local
ping 192.168.1.254

※赤字の項目は環境によって変わるので、適切に読み替えること

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
7.2.3. haresources
共有リソースの定義を「haresources」で行う。

lemon.araboth.local IPaddr::192.168.1.70/24/eth0 drbddisk


Filesystem::/dev/drbd0::/data::ext3 mysqld httpd

上記の設定では「lemon.araboth.local」を稼働系として、仮想 IP「192.168.1.70」を使用
して heartbeat を起動する。
稼働系が何らかの原因でダウンした場合、待機系が仮想 IP を引き継いでフェイルオーバーを
行う。 また、今回の構成では httpd・mysqld をクラスタリングするので、heartbeat から
クラスタリング対称となる httpd・mysqld を起動するため、httpd と mysqld の自動起動を
停止しておく必用がある。

# chkconfig –del httpd

# chkconfig –del mysqld

※赤字の項目は環境によって変わるので、適切に読み替えること

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
7.2.4. authkeys
稼働系と待機系との間で行われる通信の認証方法を設定する。 今回の構成では稼働系
と待機系は物理的に安全なネットワーク内にあると仮定して CRC を使用する。
また、/etc/ha.d/authkeys ファイルのアクセス権は 600 に設定する必用がある。

auth 1
1 crc

7.2.5. DRBD 自動起動の設定


書籍「Linux アドバンスト ネットワークサーバ構築ガイド」の「P444 7.5.9」の問題を回避
するために付属ファイル「drbd-wait」をサービスとして登録し、heartbeart より前に起動する
ように設定する。(稼働系・待機系の両方に対して行う)

※drbd-wait が「/root/drbd-wait」に存在するものとして記述します。

# cp /root/drbd-wait /etc/init.d/

# chmod +x /etc/init.d/drbd-wait

# chkconfig ---del drbd

# chkconfig –-add drbd

# chkconfig drbd on

# chkconfig –del drbd-wait

# chkconfig –add drbd-wait

# chkconfig drbd-wait on

# chkconfig –del heartbeat

# chkconfig –add heartbeat

# chkconfig on heartbeat

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
7.2.6. 外部スクリプトの設定
httpd・mysqld の生存チェックを行うため「/etc/ha.d/ha.cf」に外部スクリプトを設定する。
稼働系・待機系の「/etc/ha.d/ha.cf」の最後に下記の外部スクリプトの起動設定を記述する。

ファイル 3 稼働系(lemon.araboth.local)の ha.cf

respawn root /usr/local/cluster/check_primary

ファイル 4 待機系(orange.araboth.local)の ha.cf

respawn root /usr/local/cluster/check_secondary

付属ファイル「check_primary・check_secondary・httpchk.pl」を「/usr/local/cluster」配下
にコピーする。(付属ファイルは「/root」配下にあるものと仮定する。

コマンド 1 稼働系

# mkdir /usr/local/cluster

# cp /root/check_primary /usr/local/cluster

# cp /root/httpchk.pl /usr/local/cluster

# chmod +x /usr/local/cluster/check_primary

# chmod +x /usr/local/cluster/httpchk.pl

コマンド 2 待機系

# mkdir /usr/local/cluster

# cp /root/check_primary /usr/local/cluster

# cp /root/httpchk.pl /usr/local/cluster

# chmod +x /usr/local/cluster/check_secondary

# chmod +x /usr/local/cluster/httpchk.pl

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
7.2.7. 外部スクリプトの環境設定
構築するサーバの環境に合わせて外部スクリプト(check_primary・check_secondary)の変数
を設定する。

No. 変数名 説明
1 INITWAIT 外部スクリプト起動時に待機する時間(秒)
2 INTERVAL 外部スクリプトを起動する周期(秒)
3 RETRYCOUNT 各種生存チェックが失敗した場合の再生存チェックの回数
4 RETRYINTERVAL 再生存チェックの周期(秒)
5 CVIP 仮想 IP
6 MYSQL_USER mysqld のチェックを行うユーザ(管理者権限が必用)
7 MYSQL_PASSWORD MYSQL_USER で指定したユーザのパスワード
8 HTTP_CHECK_SCRIPT http のステータスコードを確認する Perl スクリプト
9 HTTP_CHECK_URL http のステータスコードを確認する URL

7.2.8. mysqld の生存確認方法


外部スクリプト内で下記のコマンドを実行して結果が“mysqld is alive”以外の場合
mysqld が生存していないと判定する。

# mysqladmin –u root –password password PING 2> /dev/null

7.2.9. httpd の生存確認方法


外部スクリプト内で「httpchk.pl」を呼び出し、HTTP_CHECK_URL で指定された URL に
アクセスしステータスコードが 200 以外の場合、httpd が生存していないと判定する。

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
7.3.heartbeat の起動
稼働系の heartbeat から起動する「httpd・mysqld」が起動していないことを確認し
下記のコマンドで heartbeat を起動する。

# service heartbeat start

heartbeat 起動後、しばらくすると「httpd・mysqld」が起動するので確認する。 稼働系の


heartbeat の起動を確認したら、次は待機系の heartbeat を起動する。 起動方法は稼働系と
同様。 待機系の場合は「httpd・mysqld」が起動していないことを確認する。

heartbeat のプロセス

httpd・mysqld のプロセス

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
7.4.heartbeat の動作確認
稼働系の httpd・mysqld を停止して、待機系がフェイルオーバーされることを確認する。
待機系がファイルオーバーされた後に稼働系の heartbeat を再度起動して、稼働系が
フェイルダウンすることを確認する。

1. ブラウザで「192.168.1.70」にアクセスして正常に表示されることを確認
2. 稼働系の mysqld を停止する(service mysql stop)
3. 待機系がフェイルオーバーされていることを確認
4. 稼働系の heartbeat を起動(service heartbeat start)
5. 稼働系がフェイルダウンされていることを確認
6. 稼働系の httpd を停止
7. 待機系がフェイルオーバーされていることを確認
8. 稼働系の heartbeat を起動(service heartbeat start)
9. 稼働系がフェイルダウンされていることを確認

7.4.1. フェイルオーバーの確認方法
稼働系の httpd・mysqld を停止して、稼働系に「httpd・mysqld」のプロセスが
存在しないことを確認する。 また、待機系に「httpd・mysqld」のプロセスが存在することと、
仮想 IP が引き継がれていることを確認する。

※ 仮想 IP が引き継がれていることの確認は「ifconfig -a」で行う。

7.4.2.フェイルダウンの確認方法
稼働系の heartbeat を起動して、待機系に「httpd・mysqld」のプロセスが存在しないこと
を確認する。 また、稼働系に「httpd・mysqld」のプロセスが存在することと、仮想 IP が
引き継がれていることを確認する。

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.
8. 参考文献
参考にした、書籍・Web サイトを下記に記述する。

8.1. 書籍

♦ Linux アドバンストネットワークサーバ構築ガイド HA サーバ構築編

8.2.Web サイト

♦ http://d.hatena.ne.jp/yoshifumi1975/
♦ http://labs.unoh.net/2006/12/drbd.html
♦ http://femt.ddo.jp/modules/bwiki/index.php?Gentoo%20Linux%A4%CA%C0%B8%B3%E8
%2FDRBD
♦ http://www.blogkid.com/weblog/archives/001507.html
♦ http://cafelounge.net/dev/?Cluster%2FDRBD%2F8
♦ http://lefsy.com/w/?cmd=view;name=DRBD
♦ http://tsuttayo.sytes.net/drbd/drbd_setting.html
♦ http://www.wbc.co.jp/~drbd/
♦ http://www-06.ibm.com/jp/developerworks/linux/041112/j_l-halinux.shtml

9. 付属ファイル
下記のファイルを付属する。 また、下記のファイルのエンコーディングは EUC-JP とし
改行コードは LF とする。

♦ init-wait
♦ check_primary
♦ check_secondary
♦ httpchk.pl

Copyright (C) 2007 River Stone Co. Ltd. All Rights Reserved.