CentOS 5.3 drbd インストールメモ

インストール手順のメモですよぉ。ちょっとだけ補足も書いてありますよ。基本的にprimary/secondaryの両方に同じ設定を行います。

インストール

# yum -y install drbd82 kmod-drbd82

82付きでインストールすると8.2、普通にインストールすると8.0が入るみたいです。ちなみに最近リリースされた8.3は有償のplusの機能が統合されて3ノードのクラスタが組めるようになったそうな。NEC Express 5800 110GeをポチってしまったのでESXiを乗せて試したいとこですね。

設定ファイルを作成

vi /etc/drbd.conf

global {
        usage-count no;
}

common {
        syncer { rate 30M; }
}

resource [resource name] {                      # ex) r0
        protocol C;
        startup {
                wfc-timeout 120;
        }
        disk {
                on-io-error pass_on;
        }
        on [primary hostname] {                  # ex) drbd0.example.com
                device /dev/drbd0;
                disk /dev/[device];              # ex) /dev/sda3
                address [address]:[port];        # ex) 192.168.0.2:7788
                meta-disk internal;
        }
        on [secodary hostname] {                 # ex) drbd1.example.com
                device /dev/drbd0;
                disk /dev/[device];              # ex) /dev/sda3
                address [address]:[port];        # ex) 192.168.0.3:7788
                meta-disk internal;
        }
}

diskで指定した物理パーティションがdrbdが実際にデータを書き込むパーティションとなります。またOSからdrbdを通してアクセスするにはdeviceで指定したデバイスファイルを利用する事になります。この例の場合だと/dev/drbd0をマウントするとdrbdのパーティションとして利用することが出来て、実際のデータは/dev/sda3に書き込まれることになります。

メタファイルを作成

# drbdadm create-md r0

v08 Magic number not found
v07 Magic number not found
v07 Magic number not found
v08 Magic number not found
Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.

drbdではprimary/secondaryの差分をメタデータとして保持しています。drbd 7系では明示的にメタデータを作成するコマンドがなかったのですが、導入手順を誤るとこのメタデータを壊しかねない状態で使えるようになってしまうという問題があったようです。なので明示的に作成する手順が作成されたのだと思われます。

drbd起動

# /etc/init.d/drbd start
Starting DRBD resources:    [ d(r0) s(r0) n(r0) ].

# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
 0: cs:Connected st: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 oos:1044156

primaryを指定

ここはprimaryサーバのみで実行。最初の1回のみ行う操作で、primaryがどちであるかを強制的に指定する処理になります。

# drbdadm -- --overwrite-data-of-peer primary r0

primaryの状態を確認

# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
 0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
    ns:67060 nr:0 dw:0 dr:75232 al:0 bm:4 lo:1 pe:6 ua:256 ap:0 oos:977276
        [>...................] sync'ed:  6.7% (977276/1044156)K
        finish: 0:01:27 speed: 11,144 (11,144) K/sec

secondaryの状態を確認

# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
 0: cs:SyncTarget st:Secondary/Primary ds:Inconsistent/UpToDate C r---
    ns:0 nr:694528 dw:694496 dr:0 al:0 bm:42 lo:2 pe:582 ua:1 ap:0 oos:349660
        [============>.......] sync'ed: 66.7% (349660/1044156)K
        finish: 0:00:33 speed: 10,488 (9,384) K/sec

ファイルシステム作成

まんまファイルシステムを作成します。

# mkfs.ext3 /dev/drbd0
# tune2fs -i 0 -c 0 /dev/drbd0

マウント

適当にディレクトリを作ってマウント

# mkdir /drbd
# mount -t ext3 /dev/drbd0 /drbd

これで/drbdにファイルを置くとsecondary側にも自動的にミラーリングされることになります。