1327463 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

パソコン王者

パソコン王者

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Recent Posts

Free Space

Apr 27, 2006
XML
カテゴリ:カテゴリ未分類
HeartBeat とDRBD によるHAクラスタの構築

HeartBeat (相手先の稼働状況を監視し、サーバが落ちると自動的に自サーバで処理を引き継ぐ)
DRBD(ネットワークRAIDディスク)

メリット
すべてフリーの環境で構築が可能
相手サーバマシーンの死活監視可能
フェイルバック(現状復帰)時にサービスの停止が必要ない

デメリット
障害検知からフェイルオーバするまの時間(30秒がデフォルト)サービス停止する・・・調整は可能だが0秒にはできない
ポートの監視などには対応していないため、サーバは正常に動いていて、Postgres のみ落ちるなどといった現象には対応できない

構築手順と設定です。

実現した構成
ホスト名 debian-420 IP:192.168.0.95
ホスト名 debian-566 IP:192.168.0.73

仮想ホストIPアドレス IP:192.168.0.222

drbd パッケージ、heartbeat パッケージともにapt-get で取得できます。
ソースをダウンロードしてコンパイルする事も可能ですが、稼動するホスト
のDRBD パッケージは両方とも同じバージョンに合わせる必要があります。

ホスト情報 カーネルバージョン、debianバージョン

debian-420:/etc/heartbeat# uname -r
2.6.8-2-386
debian-420:/etc/heartbeat# cat /etc/debian_version
3.1

debian-566:/etc/heartbeat# uname -r
2.4.27-2-386
debian-566:/etc/heartbeat# cat /etc/debian_version
3.1


□□□□□ DRBDの構築 □□□□□

ネットワークミラーディスクの作成です。データベースサーバ側でレプリケーションができれば
特に設定する必要がありません。(この点から、レプリケーションのできないデータベースサーバ
でも同期を取ることが可能になります。)

debian-420:/mnt# dpkg -l |egrep '*drbd*'
ii drbd0.7-module-source0.7.10-4 RAID 1 over tcp/ip for Linux module source
ii drbd0.7-utils 0.7.10-4 RAID 1 over tcp/ip for Linux utilities
ii module-assistant 0.9sarge1 tool to make module package creation easier

設定ファイル
両PCともに同じ設定にする
/etc/drbd.conf
resource drbd0 { #DRBD リソース名
protocol C; #リモート、ローカルディスクに書込みを確認後、書込み完了とする
incon-degr-cmd "halt -f"; #縮退した時には停止する

syncer { #同期条件
rate 20M; #同期時の速度上限
group 1; #同じグループのデバイスをすべて同期する
al-extents 7; #
}

on debian-420 { #ホスト debian-420 上の設定
device /dev/drbd1; #共有デバイス名を /dev/drbd1 とする
disk /dev/sdb1; #ローカルのディスク /dev/sdb1 を共有スペースにする
address 192.168.0.95:7789; #自分のIPアドレスと待ちうけポート
meta-disk internal;
}

on debian-566 {
device /dev/drbd1;
disk /dev/hda3;
address 192.168.0.73:7789;
meta-disk internal;
}
}

2台のマシーンでdrbd をスタートする
/etc/init.d/drbd start

以下は、DRBD の基本操作
(heartbeat によるフェイルオーバを実現するときには、heartbeat でスクリプトを実行する
形になるため、以下の設定はしなくても良い)

primary にしたいマシーンで
drbdadm -- --do-what-I-say privary al
と実行すると、DRBDのプライマリディスクとなる

ファイルシステムの作成とネットワークraid ディスクのマウント
mke2fs -j /dev/drbd1 #ext3 にて作成して
mkdir /mnt/nd0 #nd0ディレクトリを作成し
mount /dev/drbd1 /mnt/nd0 #マウントしてみた

注意:drbd デバイスは、両方のサーバで同時にマウントする事はできない

何か書き込んだ後に、相手方のハードディスクに反映されているかを確認する

現在マウントしているサーバで、

drbdドライブをアンマウントし、
# umount /mnt/drbd1
drbdリソースをセカンダリにする
# drbdadm secondary drbd0

相手方のサーバでdrbdリソースをプライマリ設定にし
# drbdadm primary drbd0
drbdドライブをマウントする
# mount /dev/drbd0 /mnt/drbd

# ls /dev/drbd0 とすると、別サーバで書き込んだ内容が分かる


□□□□□ HeartBeatの構築(DRBDとの連携) □□□□□

HeartBeat の仕組みは、preferred nodes(優先サーバ)が仮想IPアドレス(linuxのIPエイリアス)
を持ち、preferred nodesが落ちたらsecondary nodes(待機サーバ)が仮想IPアドレスを引き継ぎ
設定されたスクリプトを実行します。

preferred nodesのIPalias 状況
eth0:0 リンク方法:イーサーネット ハードウェアアドレス 00:13:20:18:29:62
inetアドレス:192.168.0.222 ブロードキャスト:192.168.0.255 マスク:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
割り込み:169

heartbeatパッケージ
ii heartbeat 1.2.3-9sarge4 Subsystem for High-Availability Linux

設定ファイルは3つ
/etc/heartbeat
ha.cf #基本設定ファイル オプションの設定を行う
haresources #フェイルオーバするときのスクリプト実行など設定
authkeys #認証ファイル フェイルオーバするサーバ同士の認証方法、キーを設定する(アクセス権は600とする事)

上記設定ファイルのテンプレートは
/usr/share/doc/heartbeat/
にあるので必要があればコピーして利用する


■基本設定ファイル
/etc/heartbeat/ha.cf
debugfile /var/log/ha-debug #デバッグログの表示
logfile /var/log/ha-log #heartbeat ログの表示
logfacility local0 #ローカルのシスログにも表示
keepalive 2 #2秒ごとにheartbeatパケットを送出する
deadtime 30 #クラスタ先が停止していると判断するまでの時間(秒)
udpport 694 #クラスタ先とコミュニケーションするポート
ucast eth0 192.168.0.73 #ユニキャストでeth0 を使って192.168.0.73 にコミュニケーションパケットを送出
auto_failback on #primary ノードが復旧した際に自動的にprimary ノードにフェイルバックする
node debian-420 debian-566 #クラスターになるコンピュータ名を列挙 uname -n で表示される名前にする


■認証設定ファイル
/etc/heartbeat/authkeys #認証ファイル 権限は600 にすべし
auth 3 #認証形式を3 md5 とする
3 md5 Hello! #認証キー Hello!(他クラスタでも同等の値を設定)

■フェイルオーバリソース設定ファイル
/etc/heartbeat/haresource を書き換える
debian-420 192.168.0.222 drbdisk::drbd0
#優先ホスト 仮想IPアドレス スクリプト::引数 スクリプト::引数 スクリプト::引数 ・・・
#フェイルオーバして、自ホストが優先になった場合に実行するスクリプトなどの指定

スクリプトファイルは、resource.d に設置する

drbd との連携が最初から考えられていて、drbddisk というスクリプトが準備
されているが、このファイルはdrbd のプライマリ、セカンダリを設定するところ
までは書いてあるが、ドライブとしてマウントするところまで書いていない
スクリプトにmount /dev/drbd1 を書き加えた。

(ここにDB2 なりPostgres なりのスクリプトを書き込む事で、処理を引き継いだ時に実行する事もできる)

フェイルオーバした時に実行されるスクリプト
/etc/heartbeat/resource.d/drbddisk
#!/bin/bash
#
# This script is inteded to be used as resource script by heartbeat # # Jan 2003 by Philipp Reisner.
#
###

DEFAULTFILE="/etc/default/drbd"
DRBDADM="/sbin/drbdadm"

if [ -f $DEFAULTFILE ]; then
. $DEFAULTFILE
fi

if [ "$#" -eq 2 ]; then
RES="$1"
CMD="$2"
else
RES="all"
CMD="$1"
fi

case "$CMD" in
start)
# try several times, in case heartbeat deadtime
# was smaller than drbd ping time
try=6
while true; do
$DRBDADM primary $RES && break
let "--try" || exit 20
sleep 1
done
mount /dev/drbd1 #書き加えた行
;;
stop)
# exec, so the exit code of drbdadm propagates
umount /dev/drbd1 #書き加えた行
exec $DRBDADM secondary $RES
;;
status)
if [ "$RES" = "all" ]; then
echo "A resource name is required for status inquiries."
exit 10
fi
ST=$( $DRBDADM state $RES 2> /dev/null )
ST=${ST%/*}
if [ "$ST" = "Primary" ]; then
echo "running"
else
echo "stopped"
fi
;;
*)
echo "Usage: drbddisk [resource] {start|stop|status}"
exit 1
;;
esac

exit 0


■■■■■ 実際の動作 ■■■■■

今回のDRBD と HeartBeat の設定により以下のように動作する

1.2台のパソコンが仮想IPアドレス192.168.0.222 1台として動作しているように見える
2.2台のパソコンには /dev/drbd1 という共有ディスクがある
3.preferred nodes が落ちた時には secondary nodes に処理が引き継がれる(フェイルオーバ)
(secondary nodes が落ちても何も起こらない)
4.preferred nodes が復旧したときには自動的にpreferred nodesに処理が戻る(フェイルバック)
(設定によって手動にてフェイルバックする事が可能)
5.フェイルオーバ時には、preferred nodes では自動的に drbdディスクをアンマウトしdrbd をsecondary に降格させ、
secondary nodesのdrbd がprimary に昇格され、drbdディスクをマウントする
6.フェイルバック時には、secondary nodes では自動的に drbdディスクをアンマウトしdrbd をsecondary に降格させ、
preferred nodesのdrbd がprimary に昇格され、drbdディスクをマウントする





お気に入りの記事を「いいね!」で応援しよう

Last updated  Apr 27, 2006 08:16:28 PM
コメント(0) | コメントを書く



© Rakuten Group, Inc.