自宅サーバーの CentOS 5.3 で yum update を実行したところ、DRBD 8.3 がリリースされていた。DRBD はネットワーク越しの RAID 1 よろしくマシン間でブロックデバイスをミラーリングする画期的なソフトウェアで、クリティカルな部分で運用されるケースも多い。我が家のサーバー環境でも定番通り Heartbeat と組み合わせ、HA クラスタリングの要になっている。

DRBD はファイルシステムより下のレイヤーでブロックデバイスを操作し、動作にはカーネルモジュールが必要になる。かつて DRBD 0.7 時代にはソースからコンパイルしてインストールしていたが、今は CentOS 5 用リポジトリの "extras" にあるパッケージをインストールしてあり、drbd82 が DRBD 本体、kmod-drbd82 がカーネルモジュールだ。

ところが yum update で更新ありと表示されたのは drbd83 のみ。現行の DRBD 8.2 からのマイナーアップグレードになるが、モノがモノだけに気軽に更新できる代物ではない。経験上この手のソフトウェアを何も考えずにアップグレードすると痛い目に遭う可能性は少なくないので、yum update はいったん中止して、心身ともに準備を整えて出直すことにした。

まず当該サーバーをシャットダウンし、万が一に備えてスナップショットを作成しておく。幸い我が家で DRBD を利用するサーバーは全て VMware Server による仮想マシンなので、これで面倒な事態になっても「なかったこと」にできる。

当該サーバーを起動して改めて yum update を実行すると、DRBD のアップグレード自体はすんなり終了した。すかさず cat /proc/drbd を確認してみると DRBD が動作しておらず、スタンバイ側でも Primary を見失っている。また自動起動設定も無効になっている (chkconfig --list から抹消されている) が、いきなり自動起動させるのは危ない気がするので、ひとまずそのままの状態で再起動。また念のため、Heartbeat も自動起動を無効にしておく。

再起動完了後に DRBD の起動スクリプトを手動で叩くと、スタンバイ側を発見できず、以下のようなメッセージが表示された。

DRBD module version: 8.2.6
DRBD userland version: 8.3.2
Preferably kernel and userland versions should match.

やっぱりカーネルモジュールも同時に更新しなきゃダメだったんじゃねーか、と言うことで DRBD を停止させ、カーネルモジュールをインストールし直す。

# yum search drbd ← DRBD パッケージ名を確認
drbd.i386 : Distributed Redundant Block Device driver for Linux
drbd82.i386 : Distributed Redundant Block Device driver for Linux
drbd83.i386 : Distributed Redundant Block Device driver for Linux
kmod-drbd.i686 : drbd kernel module(s)
kmod-drbd-PAE.i686 : drbd kernel module(s)
kmod-drbd-xen.i686 : drbd kernel module(s)
kmod-drbd82.i686 : drbd82 kernel module(s)
kmod-drbd82-PAE.i686 : drbd82 kernel module(s)
kmod-drbd82-xen.i686 : drbd82 kernel module(s)
kmod-drbd83.i686 : drbd83 kernel module(s)
kmod-drbd83-PAE.i686 : drbd83 kernel module(s)
kmod-drbd83-xen.i686 : drbd83 kernel module(s)

# yum remove kmod-drbd82 ← 旧バージョンを削除

# yum install kmod-drbd83 ← 新バージョンをインストール

# rpm -qa | grep drbd | sort ← インストール済み DRBD 関連パッケージを確認
drbd83-8.3.2-6.el5_3
kmod-drbd83-8.3.2-6.el5_3

# shutdown -r now

再起動完了後に改めて DRBD を起動すると、バージョン不一致のメッセージは消えた。kmod-drbd83-PAE は 32bit 版 Linux で 4GB 以上のメモリを扱うための PAE (Physical Address Extension) 対応カーネル用、kmod-drbd83-xen は Xen 対応カーネル用のモジュール。我が家の仮想マシンには無関係なので、インストールしない。

次にスタンバイ側でも同様に DRBD とカーネルモジュールを更新し、再起動する。僕の環境では再起動後に DRBD を手動で起動させるとアクティブ側を見つけられなかったが、慌てず Split brain 発生時の処置を施す。<RESOURCE> は drbd.conf 中で定義したリソース名で、リソースが複数ある場合は全てについて実施する。

アクティブ側

# drbdadm connect <RESOURCE>

スタンバイ側

# drbdadm disconnect <RESOURCE>

# drbdadm secondary <RESOURCE>

# drbdadm -- --discard-my-data connect <RESOURCE>

これで無事に DRBD のアップグレードは完了。Heartbeat を起動して手動でフェイルオーバーを発生させ、切り替えと復旧が正常に動作することを確認後、DRBD と Heartbeat の自動起動を有効にする。

ただ、まだ安心するのは早い気がする。アップグレードはひとまずこの 2台だけにしておいて、Heartbeat との連携等、安定性に関してしばらく様子を見ることにしよう。

One Response to this entry.

  • Natz:

    約 1週間様子を見てみたところ DRBD 自体や Heartbeat との連携に問題はなさそうなので、他の仮想マシンの DRBD も更新した。