DRBDのインストール

うちのサーバには導入しませんけど、自分の中でインストールに必要な
ナレッジもたまってきたので備忘録程度に書きます。
少し前から話題というほどじゃないですが、一般的になってきましたよね。
実績もそれなりになりつつあって、他のミドルと組み合わせて使うことが多いようです(Heartbeatとか)。
DRBDは簡単に言ってしまえば、2台のサーバ間でブロックデバイスをミラーリングしちゃうんです。
要するにサーバをまたいだRAID1みたいな感じですね。
ブロックデバイスなので普通にマウントできますが、2台のうちどちらか1台でしかマウントできません。
最初解説を読んだときは勘違いしてしまいましたが、Primary/Secondaryの概念があるので
両方でマウントはできないんです。
当たり前と言えば当たり前ですね。実際にRAID1を組んだ1台のマシン上で
どちらのディスクをマウントするかなんて選択しませんもんね。。。
これを実現したければGFS2を組み合わせます。
試してみましたがI/Oが激しすぎて使い物になりませんでした。これならlsyncでいい気がするレベル。。。
構築に詳しいサイトがあるのでお試しください→DRBD+GFS2 – ネットワークでミラーリング + 共有ディスク
さて、本題に戻ります。
今回は2台のサーバを用意して、それぞれホスト名を
hoge(192.168.0.10), foo(192.168.0.20)とし、hogeをPrimaryで構築を進めていきます。
-1.サーバの準備
サーバは2台用意しておきましょう。動作を確認する程度なら仮想化のVMでも問題ありません。
また、DRBDが使用する空のパーティションをあらかじめ用意しておくと楽です。
(ファイルシステムも設定する必要ありません。)
0.早速インストールの前にhostsファイルを編集します
DRBDで同期させるホスト名をここでちゃんとしておかないと
相手が見つからなくてDRBDが言うことを聞いてくれなくなります。
# vi /etc/hosts
-----------------------------------------------------
127.0.0.1 localhost
192.168.0.10 hoge
192.168.0.20 foo
-----------------------------------------------------
1.DRBDのインストール(Primary/Secondary共通)
rpmは公開されてますが有料となります。しかしソースは無料だったりするんですね。
ってことでソースからインストールを行っていきます。
# cd /usr/local/src
# wget http://oss.linbit.com/drbd/8.3/drbd-8.3.1.tar.gz
# tar zxvf drbd-8.3.1.tar.gz
# cd drbd-8.3.1
# make
# make install
2.DRBDの設定ファイル編集(Primary/Secondary共通)
DRBDはdrdb.confに設定情報を記述します。このファイルがない場合は/etc/drdb.confとして作成します。
詳細な設定方法は下記を参照してください。
http://www.drbd.jp/documentation/drbd.conf.html
# vi /etc/drbd.conf
--------------------------------
global {
dialog-refresh 0;
}
common {
syncer { rate 10M; }
}
resource r0 {
protocol C;
startup {
degr-wfc-timeout 120;
}
disk {
on-io-error pass_on;
}
net {
after-sb-0pri disconnect;
after-sb-1pri disconnect;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
syncer {
rate 10M;
al-extents 257;
}
on hoge {
device /dev/drbd0;
disk /dev/sda2;
address 192.168.0.10:7788;
meta-disk internal;
}
on foo {
device /dev/drbd0;
disk /dev/sda2;
address 192.168.0.20:7788;
meta-disk internal;
}
}
--------------------------------
Primaryで作成したこのファイルは、Secondary機にコピーしてください。
この設定ファイルに記述しているdiskの部分は環境によって読み替えてください。
3.DRBDの初期設定(Primary/Secondary共通)
DRBDのインストールが終わったら、次はデバイスブロックにメタデータというのを
組み込みます。このメタデータはブロックデバイスに組み込むパターンと
外出しにするパターンがありますが、今回は組み込むほうでいきます。
(設定ファイル内で設定します。)
# modprobe drbd
# /sbin/drbdadm create-md r0
====================================================================================
md_offset 62915162112
al_offset 62915129344
bm_offset 62913208320
Found some data
==> This might destroy existing data! <==
Do you want to proceed?
[need to type 'yes' to confirm] yes <====== yesと入力
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
--== Creating metadata ==--
As with nodes, we count the total number of devices mirrored by DRBD at
at http://usage.drbd.org.
The counter works anonymously. It creates a random number to identify
the device and sends that random number, along with
DRBD's version number, to usage.drbd.org.
http://usage.drbd.org/cgi-bin/insert_usage.pl?nu=7512257923597145973&ru=11800544353172917972&rs=62915166720
* If you wish to opt out entirely, simply enter 'no'.
* To continue, just press [RETURN]
yes <====== yesと入力
success
--入力でyes
※ここでエラーが出てメタデータの登録ができない場合は、
先にファイルシステムのフォーマットが原因と思われるので
# dd if=/dev/zero of=/dev/sda2 として、強制的にファイルシステムを削除。
====================================================================================
初回の調整?
# /sbin/drbdadm adjust r0
4.DRBDのステータス確認
DRBDはどちらのサーバがPrimaryかSecondaryかを確認する必要があります。
その方法は2つ。次のコマンドを実行すると、どちらのサーバでPrimary(これならマウントができる)か
確認できます。
# cat /proc/drbda:0 ap:0 ep:1 wo:b oos:61438680
--------------------------------------------
version: 8.3.1 (api:88/proto:86-89)
GIT-hash: fd40f4a8f9104941537d1afc8521e584a6d3003c build by root@hoge, 2009-07-11 17:33:07
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 u
——————————————–
# /etc/init.d/drbd status
このコマンドを実行後、結果の中にSecondary/Secondaryというのがあります。
左側がコマンドを実行しているマシンで、右側が対向側のサーバを表しています。
左側の表示がPrimaryとなっている方でマウントができるんですね。
5.マウントと初回同期(hoge側のみ)
hoge側で下記を実行。このコマンドで初回の同期が実行されます。
同期にはディスクのサイズにもよりますが数時間がかかります。
# /sbin/drbdsetup /dev/drbd0 primary -o
同期の進捗を先ほどのステータス確認コマンドで確認してみましょう。
# cat /proc/drbd
※状態がPrimary/Secondary であることを確認
version: 8.3.1 (api:88/proto:86-89)
GIT-hash: fd40f4a8f9104941537d1afc8521e584a6d3003c build by root@hoge, 2009-07-20 17:33:04
0: cs:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown C r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:61438680
このなかで下記のような表示がある場合は、同期の真っ最中であることを表しいます。
[>....................] sync'ed: 0.2% (xxxxx/xxxxxx)M
ひたすら100%になるまで待ちましょう。
6.マウントとファイルシステムのフォーマット
ディスクの同期が終了したらいよいよマウントです。
hoge側でDRBDのステータスを確認してPrimary/Secondaryになっていればマウントができます。
マウントポイントを作成
# mkdir /bar
マウントしてみる
# mount /dev/drbd0 /bar
ファイルシステムがないのでこのままじゃ何もできません。ext3ファイルシステムでフォーマットしましょう。
# mkfs.ext3 /bar
ラベルも設定しておきましょうか
# e2label /dev/drbd0 /data
起動時に自動起動
# chkconfig drbd on
ここまで正常にできていればひとまずインストール作業は完了です。
あとは実際にPrimary/Secondaryを切り替えてみて、foo側でもマウントできるか確認してみましょう。
7.Primary/Secondary切り替えテスト
切り替えの簡単な流れはこんな感じです。
1.hoge側でデバイスのアンマウント
2. hoge側でsecondary化
3. foo側でprimary化
4. foo側でデバイスのマウント
では、これを実際にやってみましょう。
その前に確認のために/barに何かファイルを置いておきましょう。
まずPrimaryとなっているhogeをSecondary化しましょう。
# drbdadm secondary all
ステータスを確認するとSecondary/Secondaryとなっているはずです。
次はhogeでマウントされているのをアンマウント。
# unmount /bar
つぎにfooへ移動してfooをPrimaryにします。
# drbdadm primary all
ステータスをfoo側で確認すると左側がPrimaryに変わっているはずです。
じゃあfooでマウントですね。
# mount /dev/drbd0 /bar
正常にマウントできたら/barを覗いてみましょう。
先ほどhoge側で確認用に作成したファイルが見えると思います。
これが確認できれば同期成功でめでたしめでたしです。
hogeをPrimaryにする場合はこの手順を逆に実行していく感じになります。
単体でもそれなりに使えそうですが、実運用ではちょっと厳しいですよね。
(これだとコールドスタンバイ状態です。)
Primary側で障害が発生してもSecondaryに切り替わらないですし。
それを自動化(ホットスタンバイ)してくれるのがHeartbeatなわけですが、それはまた次回にでも。
DRBDの良さはそれなりにわかるんですが、NWのトラフィックとディスクI/Oが気になるところです。
まぁそうはいってもそれなりの規模のサイトで実績もありますし、大丈夫なんじゃないでしょうか。