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 #
勝手に同期が始まります。