DRBDで遊んでみる。

  • 投稿日:
  • by

最近なんとなく気になって1回も遊んだ事がなかったDRBDを簡単に試してみた。
http://www.drbd.org/
DRBDとは何ですか? から抜粋

DRBDはブロックデバイスで、ハイアベイラビリティクラスタを構築するように設計されています。これはブロックデバイス全体をネットワーク(専用ネットワーク)経由でミラーリングすることによって実現されます。いわゆるネットワークRAID1として考えることができるでしょう。

環境例説明

* OS : CentOS-4.3
* Primary
 → hostname : primary_server ( 172.17.3.10 )
 → disk  : /dev/sdb3
 → mirror dir : /vol01
* Secondary
 → hostname : secondary_server ( 172.17.3.11 )
 → disk    : /dev/hdc2 
 → mirror dir : /vol01

インストール
# wget http://oss.linbit.com/drbd/8.0/drbd-8.0.3.tar.gz
# gunzip < drbd-8.0.3.tar.gz | tar xvf -
# cd drbd-8.0.3
# make
# make install

○ drbdの設定 ( /etc/drbd.conf ) ※ Primary / Secondary 共に同じ 
resource drbd0 {
 protocol C;
 syncer {
  rate 200M;
 }
 disk {
  on-io-error pass_on;
 }
 on primary_server {
  device /dev/nb0;
  disk /dev/sdb3;
  address 172.17.3.10:7789;
  meta-disk internal;
 }
 on secondary_server {
  device /dev/nb0;
  disk /dev/hdc2;
  address 172.17.3.11:7789;
  meta-disk internal;
 }
}

モジュールのロードと確認
# insmod /lib/modules/2.6.9-42.0.3.ELsmp/kernel/drivers/block/drbd.ko
# lsmod | grep drbd
drbd 195876 0

メタデータの作成
# modprobe drbd
# drbdmeta /dev/nb0 v08 /dev/sdb3 internal create-md
# drbdadm create-md drbd0
・・・
[need to type 'yes' to confirm] yes [ ENTER ]
・・・
Enter 'no' to opt out, or just press [return] to continue: [ ENTER ]
success

起動させる(primary -> secondary の順)
# /etc/init.d/drbd start
Starting DRBD resources: [ d0 s0 n0 ]

* Primary側で次のコマンドを実行とPrimaryの確認
# drbdsetup /dev/drbd0 primary -o
# drbdsetup /dev/drbd0 state
Primary/Secondary ← Secondary 側で実行時には、Secondary/Primary

<参考>
○ミラーリングの進捗状況の確認。
# cat /proc/drbd
○詳細設定の確認。
# drbdsetup /dev/drbd0 show


ファイルシステムの作成 ( Primary側で実行 )
※ミラーリングされているのでSecondary側でもmkfsが実行されます。
# /sbin/mkfs -t ext3 /dev/drbd0

Primary側でマウントしてテストファイル作成
# mount /dev/drbd0 /vol01

# touch /vol01/test.txt
# dd if=/dev/zero of=/vol01/testfile bs=16k count=16384


Secondary側へミラーされているか確認
* Primary側でDRBDを停止する。
# umount /vol01
# /etc/init.d/drbd stop
* Secondary側をPrimaryの設定しマウントさせる。
# drbdsetup /dev/drbd0 primary -o
# mount /dev/drbd0 /vol01

# ls -la /vol01
total 262432
drwxr-xr-x 3 root root 4096 Jun 10 2007 .
drwxr-xr-x 26 root root 4096 Jun 10 17:26 ..
drwx------ 2 root root 16384 Jun 10 18:06 lost+found
-rw-r--r-- 1 root root 0 Jun 10 2007 test.txt
-rw-r--r-- 1 root root 268435456 Jun 10 2007 testfile
*Primaryで作ったファイルが確認出来る。

 以上、簡単に遊んでみましたが自動切換えなんかは、Linux HA とかに任せてしまえば、それなりに使えると思います。 MySQLでは、DRBD for MySQL High Availabilityとかあったりして機会があれば本番で使ってみたかったりもする。
 そーいえばMySQLといえば、Googleから google-mysql-tools という基本レプリケーションの機能を補ったり、モニタリング機能の強化などのツールがある事を今日知りました。 機会があれば是非使ってみたいです。