lql.be::wiki  Index  Search  Changes  RSS  Login

drbd 環境構築

drbd を動かしてみた

drbd とは

Linux のブロックデバイスをミラーリングができる。 ネットワークを使用するため、遠隔地のサーバをミラーリングするとかできる。

環境

OS
CentOS release 5.5 (Final)

プライマリ

hostname
drbd0
IP
192.168.100.121

セカンダリ

hostname
drbd1
IP
192.168.100.122

drbd インストール

centos の yum だと、「8.0」「8.2」「8.3」の3バージョン落とせるけど、とりあえず最新版落とした。

# yum install drbd83 kmod-drbd83

コンフィグの作成

# cp /etc/drbd.conf{,.org}
# vi /etc/drbd.conf

#
# please have a a look at the example configuration file in
# /usr/share/doc/drbd83/drbd.conf
#

global {
        usage-count no;
}

common {
        syncer { rate 30M; }
}

resource r0 {
        protocol C;
        startup {
                wfc-timeout 120;
        }
        disk {
                on-io-error pass_on;
        }
        on drbd0 {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 192.168.100.121:7788;
                meta-disk internal;
        }
        on drbd1 {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 192.168.100.122:7788;
                meta-disk internal;
        }
}

この設定を host:drbd0 と host:drbd1 にする

ちょっと解説

global {
        usage-count no;
}

DRBD の使用状況の統計を送信するオプションらしい。とりあえず、送らないように no にする。ちなみに統計は http://usage.drbd.org:ここで見れる

common {
        syncer { rate 30M; }
}

セカンダリとの同期帯域の上限を設定する

resource r0 {
        protocol C;
        startup {
                wfc-timeout 120;
        }
        disk {
                on-io-error pass_on;
        }
resource
リソース名を r0 に設定する
wfc-timeout 120;
接続確立までの待機時間にタイムアウト値を設定する
protocol C;
A から C まで設定できる。C にするのが無難

A データを自分のディスクとTCP送信バッファに送った時点で完了 B データを自分のディスクと相手ノードのバッファキャッシュに送った時点で完了 C データを自分と相手のディスクに送った時点で完了

on-io-error pass_on;
プライマリノードのマウントされたファイルシステムにI/Oエラーを通知する。セカンダリノードへは通知されない。
        on drbd0 {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 192.168.100.121:7788;
                meta-disk internal;
        }
on drbd0
サーバのホスト名を設定する
device
マウントさせる場合などに使用するデバイス名の設定する
disk
同期をとりたいデバイス名の設定する
address
同期させたいサーバのIPを設定する、ポート7788 は drbd で使用するデフォルトのポート

ここでは host:drbd0 と host:drbd1 の /dev/sdb1 を /dev/drbd0 として同期を取るようにします。

メタファイルを作成する

host:drbd0 と host:drbd1 で行なう

# drbdadm create-md r0

Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.

ここで、ファイルシステム を /dev/sdb1 に作ってしまった場合にエラーがでてしまう場合があるので、下記コマンドでファイルシステムを破壊する

# dd if=/dev/zero bs=1M count=1 of=/dev/sdb1

問題なければ host:drbd0 と host:drbd1 両方の drbd を起動させる

# /etc/init.d/drbd start

ちゃんと動作しているか確認する

# cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C 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:1044124

drbd を動作させる

最初は両方ともセカンダリで動くので、プライマリにしたい方で下記コマンドを実行する

# drbdadm -- --overwrite-data-of-peer primary all
# cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----
    ns:132096 nr:0 dw:0 dr:132096 al:0 bm:8 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:912028
        [=>..................] sync'ed: 13.0% (912028/1044124)K delay_probe: 9
        finish: 0:00:27 speed: 33,024 (33,024) K/sec

プライマリになって同期がはじまる

/dev/drbd0 にファイルシステムを作ってマウントする

# mkfs.ext3 /dev/drbd0
# mkdir /mnt/drbd
# mount /dev/drbd0 /mnt/drbd
# df -h /mnt/drbd

Filesystem            Size  Used Avail Use% Mounted on
/dev/drbd0           1004M   18M  936M   2% /mnt/drbd

drbd の動作確認

host:drbd0 での操作

試しにプライマリにダミーファイルを作る

# dd if=/dev/zero of=/mnt/drbd/temp bs=1M count=100

アンマウントして、セカンダリになる

# umount /mnt/drbd
# drbdadm secondary r0
# cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----
    ns:1180048 nr:0 dw:135924 dr:1044265 al:38 bm:72 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

host:drbd1 での操作

セカンダリからプライマリになる

# drbdadm primary r0
# cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:0 nr:1180048 dw:1180048 dr:0 al:0 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

/dev/drbd0 をマウントする

# mkdir /mnt/drbd
# mount /dev/drbd0 /mnt/drbd

プライマリで作成したダミーファイルがあることを確認

# ls -lha /mnt/drbd/

total 101M
drwxr-xr-x 3 root root 4.0K Dec 11 02:10 .
drwxr-xr-x 3 root root 4.0K Dec 11 02:14 ..
drwx------ 2 root root  16K Dec 11 01:52 lost+found
-rw-r--r-- 1 root root 100M Dec 11 02:10 temp
Last modified:2010/12/10 17:35:03
Keyword(s):
References: