先日、我が家で稼動するメール・サーバーのスプール領域を拡張した。このメール・サーバーはDRBD + Heartbeat による高可用性クラスター構成を採る仮想マシン 2台のペアで、スプール領域は DRBD の下地に LVM を利用している。
ディスク領域の拡張・縮小に LVM が威力を発揮するのは言うまでもないが、その上に DRBD が乗った場合は、DRBD リソースのサイズも変更しなければいけない。その作業で少々混乱したので (情報量少ない?)、記録に残しておく。
まず最近リニューアルされた日本語サイトの ユーザーズ・ガイド を見ると、DRBD リソースをオンラインで拡張する際の条件として、次のように書かれている。
- 影響を受けるリソースの下位デバイスが、 LVMやEVMSなどの論理ボリューム管理サブシステムによって管理されている。
- リソースの接続状態が Connected になっている。
この条件を満たしていれば、ユーザーズ・ガイドの記述どおりにオンラインで拡張が可能だ。例えばボリューム・グループ vg01 内の論理ボリューム test01 を利用した DRBD リソース r0 (resource: r0, device: /dev/drbd0, meta-disk: 任意, disk: /dev/vg01/test01) を 1GB 拡張する場合は、次のようにする。
・LV を拡張 (Primary & Secondary) # lvextend -L +1G /dev/vg01/test01 ・DRBD リソースを拡張 (Primary) # drbdadm resize r0 ・ファイル・システムを拡張 (Primary) (※ ファイル・システムが ext3 の場合) # resize2fs /dev/drbd0
しかしこの手順は DRBD リソースのメタ・データ (meta-disk) を外部に置いている場合の話で、内部メタ・データを利用している場合は、少々手間が増える。例えば内部メタ・データを利用する DRBD リソース r1 (resource: r1, device: /dev/drbd1, meta-disk: internal, disk: /dev/vg01/test02) を 1GB 拡張する際の手順は、以下の通り。
(※ 2011-07-31 追記: コメント欄の通り、mkubo さんより、内部メタ・データでも大丈夫とのご指摘あり)
(※ 2011-08-07 追記: 内部メタ・データでも、上記と同様の手順で拡張可能なことを確認)
・LV を拡張 (Primary & Secondary) # lvextend -L +1G /dev/vg01/test02 ・DRBD を停止 (Primary & Secondary) (※ Primary 側で DRBD ボリュームがマウントされていれば、自動的にアンマウント) # /etc/init.d/drbd stop ・メタ・データを作り直す (Primary & Secondary) # drbdadm create-md r1 ・DRBD を起動 (Primary) # /etc/init.d/drbd start ・リソースを強制的に Primary 化 (Primary) # drbdsetup /dev/drbd1 primary -o ・任意の場所にマウント (Primary) # mount -t ext3 /dev/drbd1 /mnt/test02 ・DRBD リソースを拡張 (Primary) # drbdadm resize r1 ・ファイル・システムを拡張 (Primary) (※ ファイル・システムが ext3 の場合) # resize2fs /dev/drbd1 ・DRBD を起動 (Secondary) # /etc/init.d/drbd start
このように、一度 DRBD を停止してメタ・データを作り直す必要があるので、必然的に事前に該当ボリュームを利用するプログラムを停止したり、必要に応じてディレクトリをアンマウントしたり、と言った準備作業が発生する。外部メタ・データ利用時のように 「オンラインでお手軽拡張」 とは行かないが、まァ仕方ないだろう。
さて、メタ・データの形式に関わらず、DRBD で冗長化されているデータは重要であることが多いはず。失敗すると面倒なことになる可能性がある場合は、作業前のバックアップをお忘れなく。
内部メタデータであっても、プライマリ側でdrbdadm resizeを実行すれば拡張できます。
拡張前に一度DRBDを止めてdrbdadm dump-mdを実行してmd_offsetの値を覚えておき、拡張後にもう一度同じことを実行すると、メタデータが論理ボリュームの末尾に自動的に移されたことが確認できますよ。
いずれにせよ、作業前のバックアップはとても大切ですね。
> mkubo さん
内部メタ・データの DRBD で検証し、外部メタ・データ同様の手順で拡張できることを確認しました。記事執筆当事に何度か失敗したため、別手順が必要であると思い込んでいました。
ご指摘ありがとうございました。