DRBDを動かしてみた備忘録

参考サイト

いつものように、ゲストOS 2台で構築。OSはCentOS 5.4です。
1台目のホスト名を"drbd_prim"、IPアドレスを192.168.1.96、2台目のホスト名を"drbd_second"、IPアドレスを192.168.1.97とします。
また、DRBDデバイスは/dev/drbd0とします。

まず、ゲストOS一つを準備してその後それをコピーします。

1台目

先日作っておいた素のCentOS 5.4(先日の「ゲストOSのインストール(CentOS)」のところまでのもの)をコピー。

# virt-clone -o centos.base -n drbd_prim -f /var/lib/libvirt/images/drbd_prim.img

で、ハードディスクを追加。virt-manager等で追加してください。
ここでは、/dev/hdbに16Gを作っています。

起動してパッケージインストール

ゲストを起動して、必要なパッケージのインストールをしていきます。
まずはアップデート。

# yum -y update

DRBDのビルドに必要なパッケージをインストール

# yum -y install make gcc flex kernel-devel rpm-build
DRBDのビルドとインストール

適当なディレクトリでDRBDのソースを取得して展開します。

# mkdir work
# cd work/
# wget http://oss.linbit.com/drbd/8.3/drbd-8.3.7.tar.gz
# tar zxf drbd-8.3.7.tar.gz 
# cd drbd-8.3.7
# 

で、続いてrpmをビルド

# ./configure
# make rpm
# make km-rpm
#

/usr/src/redhat/RPMS/*/ 以下にrpmパッケージが8個作成されるので、これらをインストール。

# rpm -ivh /usr/src/redhat/RPMS/*/drbd-*
準備中...                ########################################### [100%]
   1:drbd-utils             ########################################### [ 13%]
   2:drbd-bash-completion   ########################################### [ 25%]
   3:drbd-heartbeat         ########################################### [ 38%]
   4:drbd-pacemaker         ########################################### [ 50%]
   5:drbd-udev              ########################################### [ 63%]
   6:drbd-xen               ########################################### [ 75%]
   7:drbd                   ########################################### [ 88%]
   8:drbd-km-2.6.18_164.15.1########################################### [100%]
#
DRBDの設定

DRBDの設定は、/etc/drbd.d/に、*.resとして作成します。(/etc/drbd.confを直接編集してもいいですが。)

# cat /etc/drbd.d/test.res 
resource test {
    device /dev/drbd0;
    disk /dev/hdb1;
    meta-disk internal;
    on drbd_prim {
        address 192.168.1.96:7789;
    }
    on drbd_second {
        address 192.168.1.97:7789;
    }
}
#

因みに設定ファイルの例は、ソースコードの scripts/drbd.conf.example にあります。

続いて、追加したハードディスクはfdiskでパーティション(/dev/hdb1)を作成しておきます。

# fdisk -l /dev/hdb

Disk /dev/hdb: 17.1 GB, 17179868672 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/hdb1               1        2088    16771828+  83  Linux
# 

ネットワーク設定は、以下のように赤いところを編集し、また、ifcfg-eth0.bakは削除します。

# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=drbd_prim  ← ホスト名
# rm /etc/sysconfig/network-scripts/ifcfg-eth0.bak
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none  ← 固定IPアドレス
ONBOOT=yes
HWADDR=00:16:36:4d:6f:90
IPADDR=192.168.1.96
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
# 

一旦ここまで完了したら、シャットダウンし、2台目のゲストを作成します。

2台目のゲスト作成

virt-cloneコマンドを使ってdrbd_primをdrbd_secondとしてコピーします。

# virt-clone -o drbd_prim -n drbd_second
What would you like to use as the cloned disk (file path) for '/var/lib/libvirt/
images/drbd_prim.img'? /var/lib/libvirt/images/drbd_second.img
 What would you like to use as the cloned disk (file path) for '/var/lib/libvirt
/images/drbd_prim_sync.img'? /var/lib/libvirt/images/drbd_second_sync.img
Cloning /var/lib/libvirt/ 100% |=========================|  16 GB    01:34     
Cloning /var/lib/libvirt/ 100% |=========================|  16 GB    01:39     
 
Clone 'drbd_second' created successfully.
# 

で、2台とも起動します。(2台目はこの後ネットワークなどの設定をします。)

# virsh start drbd_prim
# virsh start drbd_second
#
1台目の続き

1台目にログインし、カーネルモジュールを読み込みます。

# modprobe drbd
# cat /proc/drbd  ← 確認
version: 8.3.7 (api:88/proto:86-91)
GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@drbd_prim, 2010-04-05 23:10:16
# 

drbdのメタデータを作ります。

# drbdadm create-md test
md_offset 17174347776
al_offset 17174315008
bm_offset 17173790720

Found ext3 filesystem
      104388 kB data area apparently used
    16771280 kB left usable by current configuration

Even though it looks like this would place the new meta data into
unused space, you still need to confirm, as this is only a guess.

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.
success
# 

次にDRBDのデーモンを開始します。

# /etc/init.d/drbd start
Starting DRBD resources: [ d(test) n(test) ]..........
 **************************************************************
 DRBD's startup script waits for the peer node(s) to appear.
 - In case this node was already a degraded cluster before the
   reboot the timeout is 0 seconds. [degr-wfc-timeout]
 - If the peer was available before the reboot the timeout will
   expire after 0 seconds. [wfc-timeout]
   (These values are for resource 'test'; 0 sec -> wait forever)
 To abort waiting enter 'yes' [  13]:yes  ← "yes"を入力

.
#

/proc/drbdを確認すると"Secondary/Unknown"になっているのが分かります(2台目はまだ未設定なのでUnknownです)。

# cat /proc/drbd 
version: 8.3.7 (api:88/proto:86-91)
GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@drbd_prim, 2010-04-05 23:10:16
 0: cs:StandAlone ro:Secondary/Unknown ds:Inconsistent/DUnknown   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:16771280
#

これをPrimaryにしてやります。

# drbdsetup /dev/drbd0 primary -o
# cat /proc/drbd  ← 確認すると"Primary/Unknown"になりました。
version: 8.3.7 (api:88/proto:86-91)
GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@drbd_prim, 2010-04-05 23:10:16
 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   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:16771280
#

これでDRBDデバイスが使えるようになったので、/dev/drbd0 をフォーマットしてやります。

# mkfs.ext3 /dev/drbd0
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
<中略>

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
#

マウントすれば使えるようになっています。

# mount /dev/drbd0 /mnt/
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                      15109112   2679456  11649780  19% /
/dev/hda1               101086     19114     76753  20% /boot
tmpfs                   255024         0    255024   0% /dev/shm
/dev/drbd0            16508024    176244  15493216   2% /mnt
# 

2台目

2台目はまずネットワークを設定してやります(赤いところを編集、ifcfg-eth0.bakは削除)。

# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=drbd_second  ← ホスト名
# rm /etc/sysconfig/network-scripts/ifcfg-eth0.bak
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none  ← 固定IPアドレス
ONBOOT=yes
HWADDR=00:16:36:0f:62:75
IPADDR=192.168.1.97
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
# reboot  ← 再起動

あとは、再起動後にDRBDのメタデータの作成とデーモンを起動するだけ。

# drbdadm create-md test
md_offset 17174347776
al_offset 17174315008
bm_offset 17173790720

Found ext3 filesystem
      104388 kB data area apparently used
    16771280 kB left usable by current configuration

Even though it looks like this would place the new meta data into
unused space, you still need to confirm, as this is only a guess.

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.
success
# /etc/init.d/drbd start
Starting DRBD resources: [ d(test) ].
# cat /proc/drbd 
version: 8.3.7 (api:88/proto:86-91)
GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@drbd_prim, 2010-04-05 23:10:16
 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r----
    ns:0 nr:3200 dw:3200 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:16768080
        [>....................] sync'ed:  0.1% (16372/16376)M
        finish: 11:38:40 speed: 352 (352) K/sec
# 

勝手に同期が始まります。