DRBDとは?
Linuxのカーネルドライバで、ネットワークを経由したディスクのミラーリングを行ってくれます。実際のディスクと、仮想ファイルシステムの間に割り込み、設定したネットワークの向こうにいるミラー先に書いたあと、ローカルのディスクにも書き込んでくれるという優れもの。つまりネットワークを介して、2台のホストで動かすRAID1というところなのです。
インストール
PowerPCでは、DRBDはMaskedされておりました。なので、玄箱、現用サーバの双方でpackage.keywordsに
sys-cluster/drbd ~x86
もしくは sys-cluster/drbd ~ppc を書き込んで、同一バージョンのDRBDを導入してやります。2006年3月6日時点では、0.7.16が最新らしい
# emerge drbd
インストール完了~
DRBD用物理ディスクを作る
DRBD用の物理領域を作ってやります。おいちゃんはLVM上にパーティションを切ってやりました
#lvcreate -L15G -ndrbd lvm
これで15Gbyteのdrbdという論理ボリュームが作られました。SRV1,SRV2で実施します
DRBD用設定ファイルを作る
DRBD用設定ファイルの雛形を持ってきます
# zcat /usr/share/doc/drbd-0.7.16/drbd.conf.gz > /etc/drbd.conf
編集してやります。最低限の設定を。
resource drbd0 { # プロトコルの設定 # C:対向ホストの書き込み完了を持って転送完了とする # B:対向ホストのデータ受信完了を持って転送完了とする # A:対向ホストへのデータ転送を持って転送完了とする protocol B; startup { degr-wfc-timeout 60; # 2 minutes. } disk { # IOエラーが発生した場合。pass_on,panic,detachが選べる。 # pass_on 上位レイヤに通知 # panic カーネルパニックになる # detach ディスクレスモードで動作 on-io-error detach; size 15G; } net { # 接続が切れた場合。reconnect:再接続,stand_alone:1台だけで継続、freeze_io:IOを止める on-disconnect reconnect; } syncer { # データ同期の転送レート。5MByte/sec rate 5M; group 1; # エクステントサイズ。データ同期時に重要らしい。玄箱ではこれ以上上げられなかった… al-extents 7; } on SRV1 { device /dev/drbd0; disk /dev/lvm/drbd; address 192.168.1.1:7788; meta-disk internal; } on SRV2 { device /dev/drbd0; disk /dev/lvm/drbd; address 192.168.1.2:7788; meta-disk internal; }
さて。わかりましたかねぇ?resourceのはデバイスの設定と一緒。プロトコル、ディスク同期の時間、同期させる2台のサーバのIPとデバイスの設定。
DRBDをSRV1で起動させる
# /etc/init.d/drbd start
lsmodうつと、DRBDのデバイスがロードされているのが分かります。/proc/drbdというprocファイルも追加されているのが分かります。catで見てみると
version: 0.7.16 (api:77/proto:74) SVN Revision: 2066 build by XXXX@XXXX, 2006-03-01 00:11:21 0: cs:WFConnection st:Secondary/Unknown ld:Consistent ns:1316624 nr:460 dw:1317084 dr:482244 al:30607 bm:16 lo:0 pe:0 ua:0 ap:0
セカンダリモードで、接続待ちしてるのが分かります。この時点で、/dev/drbd0が使用可能になっているので、後は普通にディスクを使用する気持ちでフォーマットしてやります。おいちゃんはreiserfsを使用したので
# mkreiserfs /dev/drbd0
DRBDをSRV2で起動させる
同じdrbd.confをSRV2にもコピーしてやって、
# /etc/init.d/drbd start
コネクションが確立すると、LANのアクセスランプがピカピカ光って、HDをがりがりアクセスし始めます。お互いのディスクの同期を開始いたします。これは最初の1回で終了。同期完了したら、あとはこの動作はいたしません。
DRBDのディスクをマウントしてみる
version: 0.7.16 (api:77/proto:74) SVN Revision: 2066 build by XXXX@XXXX, 2006-03-01 00:11:21 0: cs:Connected st:Secondary/Secondary ld:Consistent ns:1316624 nr:460 dw:1317084 dr:482244 al:30607 bm:16 lo:0 pe:0 ua:0 ap:0
両方ともセカンダリモードで、接続が確立しています。片方をプライマリモードにしないと、動作開始が出来ませんので、SRV1で以下のコマンドを売ってみましょう
# drbdadm primary drbd0
ここでのdrbd0は、drbd.confのresource項で書いた名前ね… するてーとSRV1では
version: 0.7.16 (api:77/proto:74) SVN Revision: 2066 build by XXXX@XXXX, 2006-03-01 00:11:21 0: cs:Connected st:Primary/Secondary ld:Consistent ns:1316624 nr:460 dw:1317084 dr:482244 al:30607 bm:16 lo:0 pe:0 ua:0 ap:0
SRV2では
version: 0.7.16 (api:77/proto:74) SVN Revision: 2066 build by XXXX@XXXX, 2006-03-01 00:11:21 0: cs:Connected st:Secondary/Primary ld:Consistent ns:1316624 nr:460 dw:1317084 dr:482244 al:30607 bm:16 lo:0 pe:0 ua:0 ap:0
となって、SRV1がプライマリディスクになったことが分かります。SRV1側では、/dev/drbd0が普通にディスクとしてマウントできるようになります。
# mount /dev/drbd0 /mnt/drbd
これで、/mnt/drbdに書き込むと、SRV2にもコピーされます。確認するためにSRV1側で
# umount /mnt/drbd # drbdadm secondary drbd0
SRV2で
# drbdadm primary drbd0 # mount /dev/drbd0 /mnt/drbd
とやってみましょう。SRV1で書き込んだ内容が、SRV2でも見えますか?しかも普通にディスクとして使えていますか?アイディアは誰でも考え付きますが、この動作はなかなか感動ですよね…
ぺージ情報 | |
---|---|
ぺージ名 : | Gentoo Linuxな生活/DRBD |
ページ別名 : | 未設定 |
ページ作成 : | maruo |
閲覧可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
編集可 | |
グループ : | なし |
ユーザー : | なし |