DRBD-8.0.X + LVM2

OpenVZカーネル、2.6.18-ovz028stab027にアップグレード後、DRBDが動作しない。
仮想デバイス/dev/drbd0が作成されておらず、その旨のエラーが出るため、手動で作成したりしたが、改善しなかった。
嵌まりかけたところで、dmesgをよくよく見てみると、当該カーネルのDRBDバージョンが8.0.0になっているし。
自分が使っているCentOS-4.4で提供されているユーザーランドツールが0.7系であった為、動作しなかったためなんだけど、バージョン違いのエラーメッセージくらいきちんと出してほしいな。

急遽、8系にマイグレードということになったんだけど、設定ファイルの書式やコマンドのオプションなどが一部変更になったり、手間取りました。

設定ファイルは、ソースファイルに詳細なものがあるので、それを参考にするといいと思うけど、コマンドに関しては、ドキュメントが少なくてちょっと面倒だった。簡単な手順は以下のような感じ。

リソース名は"r0"、デバイスは"/dev/drbd0"、実ディスクは"/dev/sda3"という前提になっています。

1. DRBDを停止

    # /etc/init.d/drbd stop 

2. 設定ファイルの作成

    # vi /etc/drbd.conf

3. メタデータ領域の作成

    # drbdadm create-md r0

3. DRBDを起動

    # /etc/init.d/drbd start

4. 強制的にPrimaryにする。

    # drbdsetup /dev/drbd0 primary -o

5. 一度切断。

    # drbdadm disconnect r0

6. lvm.confに、実ディスクを除外するための設定を追加。

    # vi /etc/lvm/lvm.conf
    -------------------------------------------
    # By default we accept every block device:
    filter = [ "r|/dev/sda3|" ]
    filter = [ "a/.*/" ]
    -------------------------------------------

    ※これをしないとvgcreateする際に、drbd0とsda3でPVが重複しているというエラーが出るので注意。

7. 後は実ディスク同様にLVMのコマンドが通ります。

    # pvcreate /dev/drbd0
    # vgcreate vg0 /dev/drbd0
    # lvcreate -L 480G -n lv0 vg0
    # lvcreate -L 48G -n lv1 vg0

    ※上記5で切断していない(WFConnectionとなっている)場合、lvcreateがエラーを出すことがあります。

8. DRBDを接続とし、ファイルシステム作成、mountする。

    # drbdadm connect r0
    # mkfs.ext3 /dev/vg0/lv0
    # mount -t ext3 /dev/vg0/lv0 /cluster

注) CentOS(RHEL)は、起動時の"/etc/init.d/netfs"にてLVMのpvscanを実行している。
netfsが実行される前に、DRBD起動していない(もしくはプライマリになっていない)状態の場合、
手動で、pvscan(vgscan)やvgchange(lvchange)を実行する必要がある。

これで、DRBDマスタノードが出来上がり。