「VineでDRBDを使ってクラスタリング」の目次へ戻る
前提条件
以下では「Primaryサーバ」と「Secondaryサーバ」という表現をしています。
この設定例での条件を以下に示します。
|
Primaryサーバ |
Secondaryサーバ |
HDDの領域 |
/dev/sda3 |
/dev/hda3 |
IPアドレス |
192.168.0.10 |
192.168.0.20 |
ホスト名 |
primary.tsuttayo.sytes.net |
secondary.tsuttayo.sytes.net |
この例のように、PrimaryとSecondaryとで領域名が違っていてもかまいませんが、領域サイズは同等かまたはSecondaryサーバーのほうを大きめにしておく必要があると思います。
なお、クラスタリング用のIPアドレスは192.168.0.30ということにします。各クライアントからは192.168.0.30へアクセスしてもらうことになります。このとき、物理サーバがどちらになるかはheartbeatが決めます。
DRBDのプロトコル(protocol)について
DRBDはPrimaryサーバとSecondaryサーバとのミラー方式を指定する必要があります。プロトコルには以下の3つがあるようです。
なお、ここの説明ではプロトコル=Cを使うことにして書いています。
もっとも安定しているのはプロトコル=Cであり、クラスタリングが必要な用途では安定感がとても重要だと思うので私のところではプロトコル=Cを利用しています。
プロトコル |
動作 |
A |
データがディスクに書き込まれ、かつネットワークに送信された時点で書込み操作を完了します。 |
B |
受信肯定応答を受信した時点で、書込み操作を完了します。 |
C |
書き込み肯定応答を受信した時点で、書込み操作を完了します。 |
DRBDで利用するエリアの確保
以下の作業はすべてrootでログインして行う必要があります。
- PrimaryサーバとSecondaryサーバにDRBDのrpmパッケージをインストールしておきます。
Primaryサーバにfdiskで領域を確保します。
「fdisk /dev/sda」などとして、領域を作ってください。ここでは/dev/sda3に領域を確保したこととしますので、ご自身の環境に合わせて読み替えてください。
Secondaryサーバも同様にして「fdisk /dev/hda」などとして領域を作ってください。ここでは/dev/hda3に領域を確保したこととします。
次のようにしてPrimaryサーバでDRBDの実行を開始します。
# insmod drbd
/dev/drbd0へのアクセスを/dev/sda3に割り付けます。
# drbdsetup /dev/drbd0 disk /dev/sda3 internal -1
PrimaryからSecondaryへの通信経路を設定します。
# drbdsetup /dev/drbd0 net 192.168.0.10 192.168.0.20 C
PrimaryからSecondaryへの通信速度を600M/Secとします。
# drbdsetup /dev/drbd0 syncer -r 600m
Primaryサーバをプライマリとして宣言します。
# drbdsetup /dev/drbd0 primary --do-what-I-say
次のようにしてSecondaryサーバでDRBDの実行を開始します。
# insmod drbd
/dev/drbd0へのアクセスを/dev/sda3に割り付けます。
# drbdsetup /dev/drbd0 disk /dev/hda3 internal -1
PrimaryからSecondaryへの通信経路を設定します。
# drbdsetup /dev/drbd0 net 192.168.0.20 192.168.0.10 C
SecondaryからPrimaryへの通信速度を600M/Secとします。
# drbdsetup /dev/drbd0 syncer -r 600m
上記までで、ミラーリングされるようになっています。
/dev/drbd0のデバイスが有効となっているので、ここに領域を確保することにします。
Primaryサーバでext3の領域を作ります。
# mkfs -j /dev/drbd0
ミラーリングされているため、mkfs実行中はSecondaryサーバでもmkfsが実行されます。
# cat /proc/drbd
これにより、現在のミラーリングの進捗状況が確認できます。完全に終了するまで待ちましょう。
なお、/dev/drbd1もミラーリングするなら、次のようにします(これはPrimary側の例です)。
drbdsetup /dev/drbd1 disk /dev/sda4 internal -1
drbdsetup /dev/drbd1 net 192.168.0.10:7789 192.168.0.20:7789 C
drbdsetup /dev/drbd1 syncer -r 600m
このようにして、ポートを変えるようにしないと「Local address(port) already in use.」というエラーになります。
hostsの変更
/etc/hostsを修正します。DNSもこのサーバでクラスタリングすることになるかもしれないので、クラスタリングする2つのノードはhostsだけで名前解決できるようにしておきましょう。
この例では次のようにしました。
192.168.0.10 primary.tsuttayo.sytes.net
192.168.0.20 secondary.tsuttayo.sytes.net
|
この設定はPrimaryサーバとSecondaryサーバの両方に行います。内容は同じです。
DRBD用の設定ファイルを変更
Primaryサーバの/etc/drbd.confを修正します。
すでにひな形がインストールされていますのでこれを変更していきます。
r1〜r3もひな形が設定されているため、これらは削除するか、「skip r1」などとしてください。
resource r0 {
protocol C;
startup {
wfc-timeout 1;
degr-wfc-timeout 1;
}
disk {
on-io-error pass_on;
}
syncer {
rate 60M;
group 1;
al-extents 257;
}
on primary.tsuttayo.sytes.net {
device /dev/drbd0;
disk /dev/sda3;
address 192.168.0.10:7788;
meta-disk internal;
}
on secondary.tsuttayo.sytes.net {
device /dev/drbd0;
disk /dev/hda3;
address 192.168.0.20:7788;
meta-disk internal;
}
}
|
Secondaryサーバもまったく同一内容で/etc/drbd.confを修正します。Primaryサーバからftpなどでファイルをコピーしたほうが簡単かもしれません。
ここまで設定したら動作確認を行います。両サーバともシャットダウン/再起動します。
再起動後、DRBDサービスを起動してみます。
# /etc/init.d/drbd start
うまくいっているかを確認します。
# drbdsetup /dev/drbd0 state
うまくいっていないようなら、/var/log/messagesを確認することで、エラー原因を調べましょう。
ここまですべてOKならば、サーバ起動時にdrbdデーモンを自動起動するようにしておきます。
# /sbin/chkconfig drbd on
DRBDの動作確認
DRBDの動作確認は以下のコマンドでおよそわかるようです。ここにまとめておきました。
ミラーリングの進捗状況の確認。
# cat /proc/drbd
現在、PrimaryなのかSecondaryなのかを確認。
# drbdsetup /dev/drbd0 state
詳細設定の確認。
# drbdsetup /dev/drbd0 show
/homeをミラーリングさせる
ここまででミラーリングはされていますが、まだマウントしていないので実際のところはどうなのかが不明でしょう。そこで/homeにマウントしてみることにします。
次のようなスクリプトを /etc/ha.d/resource.d/homemountというような名前で作成する。
これはPrimary、Secondaryとも必要です。
#!/bin/sh
RES="$1"
CMD="$2"
function GetState() {
retval=`drbdadm state $1 | awk 'BEGIN { FS = "/"} { print $1 }'`
}
case "$CMD" in
start)
/etc/ha.d/resource.d/drbddisk $RES $CMD
drbdadm connect all
GetState $RES
if [ $retval == 'Primary' ]; then
mount /home
fi
;;
stop)
GetState $RES
if [ $retval == 'Primary' ]; then
umount /home
fi
/etc/ha.d/resource.d/drbddisk $RES $CMD
drbdadm connect all
;;
*)
exit 0
::
esac
exit 0 |
Primary側で、現状の/homeをバックアップします。
# cd /
# tar cpzf home.tar.gz /home
/etc/fstabを編集します。これはPrimary、Secondaryとも設定してください。
# 以下の行を追加します。
/dev/drbd0 /home ext3 noauto 0 0 |
Primary側でマウントします。
# mount /home
dfコマンドなどでちゃんとマウントされているかを確認してみましょう。
Primary側でバックアップから復元します。
# cd /
# tar zxvf home.tar.gz
作成しておいたスクリプトの動作確認をしましょう。
一時的に/homeをumountしてみます。
# umount /home
スクリプトを利用してマウントします。
# /etc/ha.d/resource.d/homemount r0 start
この後、dfコマンドでうまくマウントされたか確認してみてください。
ここまでOKならば、 /etc/rc.local の一番最後に以下の行を追加しておきましょう。この設定もPrimary、Secondaryとも行ってください。
/etc/ha.d/resource.d/homemount r0 start |
これでサーバが再起動時、それがPrimaryならば/homeが自動的にマウントされるようになります。
|