DRBDは誤解を恐れないで、簡単に言ってしまうと、ネットワーク越しにRAID1を構築できるオープンソースのソフトウェアです。
DRBDには以下の特徴があります。
・カーネルモジュールで動作し、有償でサポートが受けられます
・電源等が壊れても、ソフトウェアRAIDやPICカード型のRAIDと違ってサービスを続けることができます
・heartbeat等と組み合わせて、HAなシステムを構築できます
・secondary(slave、待機系)はマウントすることができません。
DRBDの設定から使用までを簡単に解説しようと思います。また待機系が必要なのですが、待機だけではもったいないので、相互に違う領域をバックアップ(s1のsda3のバックアップ先は s2のsda3、s2のsda4のバックアップ先はs1のsda4)をしてみました。
構成
s1.unoh.net 10.1.0.1
+-------------
| sda3 (drbd0 master)
+-------------
| sda4 (drbd1 slave)
+-------------
s2.unoh.net 10.1.0.2
+-------------
| sda3 (drbd0 slave)
+-------------
| sda4 (drbd1 master)
+-------------
uname -a
Linux s1.unoh.net 2.6.18-1.2200.fc5smp #1 SMP Sat Oct 14 17:15:35 EDT 2006 i686 i686 i386
GNU/Linux
+-------------
| sda3 (drbd0 master)
+-------------
| sda4 (drbd1 slave)
+-------------
s2.unoh.net 10.1.0.2
+-------------
| sda3 (drbd0 slave)
+-------------
| sda4 (drbd1 master)
+-------------
uname -a
Linux s1.unoh.net 2.6.18-1.2200.fc5smp #1 SMP Sat Oct 14 17:15:35 EDT 2006 i686 i686 i386
GNU/Linux
インストール
必要なものを yum でインストールします。
yum install kernel-devel
yum install hardlink
yum install rpm-build
最新のソースをDLします。
wget http://oss.linbit.com/drbd/0.7/drbd-0.7.22.tar.gz
ソースからRPMをビルドします。
tar zvxf drbd-0.7.22.tar.gz
cd drbd-0.7.22
make rpm
cd dist/RPMS/i386/
rpm -ivh drbd-0.7.22-1.i386.rpm
rpm -ivh drbd-km-2.6.18_1.2200.fc5smp-0.7.22-1.i386.rpm
yum install kernel-devel
yum install hardlink
yum install rpm-build
最新のソースをDLします。
wget http://oss.linbit.com/drbd/0.7/drbd-0.7.22.tar.gz
ソースからRPMをビルドします。
tar zvxf drbd-0.7.22.tar.gz
cd drbd-0.7.22
make rpm
cd dist/RPMS/i386/
rpm -ivh drbd-0.7.22-1.i386.rpm
rpm -ivh drbd-km-2.6.18_1.2200.fc5smp-0.7.22-1.i386.rpm
設定
/etc/drbd.conf を編集します。無い場合は作成します。
DRBDをスタートします
/etc/init.d/drbd start
以下のような状態 Inconsistent(同期がとれていない状態) になります
cat /proc/drbd
本来ならここでprimaryモードに移行するために
drbdadm -- --do-what-I-say primary drbd0
と行うのですが、これを行うと、一旦ディスクを同期するため、
サイズによってはかなりの時間がかかってしまいます。
この作業をスキップするために以下のスクリプトを使用します。
wget http://svn.drbd.org/drbd/branches/drbd-0.7/testing/read_gc.pl
wget http://svn.drbd.org/drbd/branches/drbd-0.7/testing/write_gc.pl
read_gc.pl resource_name
write_gc.pl resource_name 1
/etc/init.d/drbd restart
プライマリーに移行します
s1.unoh.net にて drbdadm primary drbd0
s2.unoh.net にて drbdadm primary drbd1
cat /proc/drbd
mkfs.ext3 /dev/drbd0
mount /dev/drbd0 /mnt/drbd0
とするとファイルシステムを作成し、デバイスをマウントすることができます
resource drbd0 {
# 同期プロトコル A, B, C のいずれかを選択
# A:リモートのディスクへの書き込み要求が完了した時点
# B:リモートのディスクのバッファキャッシュ書き込みが完了した時点
# C:リモートのディスクへの書き込みが完了した時点
protocol B;
incon-degr-cmd "halt -f";
syncer { # 同期の速度
rate 200M;
}
disk { # エラーが起こったときの処理
# pass_on:上位レイヤに通知, panic:カーネルパニックになる, detach:ディスクレスモードで動作
on-io-error pass_on;
}
net { # 接続が切れた場合の処理
# reconnect:再接続,stand_alone:1台だけで継続,freeze_io:IOを止める
on-disconnect reconnect;
}
# 1番目のノードを定義
on s1.unoh.net {
device /dev/drbd0;
disk /dev/sda3;
address 10.1.0.1:7789;
# メタデータの定義
meta-disk internal;
}
# 2番目のノードを定義
on s2.unoh.net {
device /dev/drbd0;
disk /dev/sda3;
address 10.1.0.2:7789;
# メタデータの定義
meta-disk internal;
}
}
resource drbd1 {
# drbd0 と違うところだけ記述
# 1番目のノードを定義
on s1.unoh.net {
device /dev/drbd1;
disk /dev/sda4;
address 10.1.0.1:7790;
# メタデータの定義
meta-disk internal;
}
# 2番目のノードを定義
on s2.unoh.net {
device /dev/drbd1;
disk /dev/sda4;
address 10.1.0.2:7790;
# メタデータの定義
meta-disk internal;
}
}
# 同期プロトコル A, B, C のいずれかを選択
# A:リモートのディスクへの書き込み要求が完了した時点
# B:リモートのディスクのバッファキャッシュ書き込みが完了した時点
# C:リモートのディスクへの書き込みが完了した時点
protocol B;
incon-degr-cmd "halt -f";
syncer { # 同期の速度
rate 200M;
}
disk { # エラーが起こったときの処理
# pass_on:上位レイヤに通知, panic:カーネルパニックになる, detach:ディスクレスモードで動作
on-io-error pass_on;
}
net { # 接続が切れた場合の処理
# reconnect:再接続,stand_alone:1台だけで継続,freeze_io:IOを止める
on-disconnect reconnect;
}
# 1番目のノードを定義
on s1.unoh.net {
device /dev/drbd0;
disk /dev/sda3;
address 10.1.0.1:7789;
# メタデータの定義
meta-disk internal;
}
# 2番目のノードを定義
on s2.unoh.net {
device /dev/drbd0;
disk /dev/sda3;
address 10.1.0.2:7789;
# メタデータの定義
meta-disk internal;
}
}
resource drbd1 {
# drbd0 と違うところだけ記述
# 1番目のノードを定義
on s1.unoh.net {
device /dev/drbd1;
disk /dev/sda4;
address 10.1.0.1:7790;
# メタデータの定義
meta-disk internal;
}
# 2番目のノードを定義
on s2.unoh.net {
device /dev/drbd1;
disk /dev/sda4;
address 10.1.0.2:7790;
# メタデータの定義
meta-disk internal;
}
}
DRBDをスタートします
/etc/init.d/drbd start
以下のような状態 Inconsistent(同期がとれていない状態) になります
cat /proc/drbd
version: 0.7.22 (api:79/proto:74)
0: cs:Connected st:Secondary/Secondary ld:Inconsistent
ns:71984032 nr:0 dw:71984032 dr:52390757 al:169318 bm:0 lo:0 pe:0 ua:0 ap:0
1: cs:Connected st:Secondary/Secondary ld:Inconsistent
ns:45988528 nr:0 dw:45988528 dr:91767569 al:185559 bm:0 lo:0 pe:0 ua:0 ap:0
0: cs:Connected st:Secondary/Secondary ld:Inconsistent
ns:71984032 nr:0 dw:71984032 dr:52390757 al:169318 bm:0 lo:0 pe:0 ua:0 ap:0
1: cs:Connected st:Secondary/Secondary ld:Inconsistent
ns:45988528 nr:0 dw:45988528 dr:91767569 al:185559 bm:0 lo:0 pe:0 ua:0 ap:0
本来ならここでprimaryモードに移行するために
drbdadm -- --do-what-I-say primary drbd0
と行うのですが、これを行うと、一旦ディスクを同期するため、
サイズによってはかなりの時間がかかってしまいます。
この作業をスキップするために以下のスクリプトを使用します。
wget http://svn.drbd.org/drbd/branches/drbd-0.7/testing/read_gc.pl
wget http://svn.drbd.org/drbd/branches/drbd-0.7/testing/write_gc.pl
read_gc.pl resource_name
write_gc.pl resource_name 1
/etc/init.d/drbd restart
プライマリーに移行します
s1.unoh.net にて drbdadm primary drbd0
s2.unoh.net にて drbdadm primary drbd1
cat /proc/drbd
version: 0.7.22 (api:79/proto:74)
0: cs:Connected st:Primary/Secondary ld:Consistent
ns:71984032 nr:0 dw:71984032 dr:52390757 al:169318 bm:0 lo:0 pe:0 ua:0 ap:0
1: cs:Connected st:Secondary/Primary ld:Consistent
ns:45988528 nr:0 dw:45988528 dr:91767569 al:185559 bm:0 lo:0 pe:0 ua:0 ap:0
Consistent となって同期がとれていることがわかります0: cs:Connected st:Primary/Secondary ld:Consistent
ns:71984032 nr:0 dw:71984032 dr:52390757 al:169318 bm:0 lo:0 pe:0 ua:0 ap:0
1: cs:Connected st:Secondary/Primary ld:Consistent
ns:45988528 nr:0 dw:45988528 dr:91767569 al:185559 bm:0 lo:0 pe:0 ua:0 ap:0
mkfs.ext3 /dev/drbd0
mount /dev/drbd0 /mnt/drbd0
とするとファイルシステムを作成し、デバイスをマウントすることができます
テスト
s1.unoh.net で適当なファイルを作成します。
cd /mnt/drbd0
touch hoge
ls -la
-rw-rw-r-- 1 unoh unoh 0 12月 25 14:39 hoge
デバイスをアンマウントしてセカンダリーに移行します
cd ..
umount /mnt/drbd0
drbdadm secondary drbd0
s2.unoh.net でプライマリーにして、デバイスをマウントします。
drbdadm primary drbd0
mount /dev/drdb0 /mnt/drbd0
作成したファイルがあるか確認します
cd /mnt/drbd0
ls -la
-rw-rw-r-- 1 unoh unoh 0 12月 25 14:39 hoge
cd /mnt/drbd0
touch hoge
ls -la
-rw-rw-r-- 1 unoh unoh 0 12月 25 14:39 hoge
デバイスをアンマウントしてセカンダリーに移行します
cd ..
umount /mnt/drbd0
drbdadm secondary drbd0
s2.unoh.net でプライマリーにして、デバイスをマウントします。
drbdadm primary drbd0
mount /dev/drdb0 /mnt/drbd0
作成したファイルがあるか確認します
cd /mnt/drbd0
ls -la
-rw-rw-r-- 1 unoh unoh 0 12月 25 14:39 hoge
DRBDの設定のために 以下の書籍を参考にしました。
Linuxアドバンストネットワークサーバ構築ガイド HAサーバ構築編
posted with amazlet on 06.12.25
デージーネット
秀和システム
売り上げランキング: 14319
秀和システム
売り上げランキング: 14319
おすすめ度の平均:
ミッションクリティカルなサーバを構築するなら構築から運用まで担当する方向け
高度だが説明はわかりやすい