Pacemakerを使わずにDRBDを運用する方法
DRBDを使ったシステム構築では、Pacemakerがサービスを冗長化するので、Pacemakerのリソースエージェントを利用してDRBDの制御をすることが多いのですが、サービスの冗長化が必要ない場合は、Pacemakerを使わずにDRBDだけを使って構築することもできます。この構成ではストレージだけが冗長化されます。
ActiveとStandbyの2台のサーバ間でDRBDがストレージを冗長化します。SambaサービスはActive側だけで動作し、Active機が故障した場合には手動でサービスを切り替えます。
今回はCentOS 7を使ってテストしました。CentOS 6ではinit.dのサービスの起動順序の制御をchkconfigコマンドを使って行えます。詳しくはchkconfigのマニュアルを参照ください。
以下にCentOS 7でDRBD 8.4を使って、冗長化したディスク領域をSambaで利用する例を説明します。DRBD9での設定については説明中にコメントします。
1.systemd
systemdはRHEL 7、CentOS 7で採用された、OSの起動処理やシステム管理を行う仕組みです。
DRBDはカーネルで動作するプログラムなので、OSの起動時にDRBDを起動しなければなりません。またDRBDでレプリケーションするディスク領域はサービスで利用するため、サービスが起動する前にマウントされている必要があります。
これらの処理をCentOS 7ではsystemdで制御できます。
2.fstab
DRBDのディスク領域を/drbdという名前のディレクトリにマウントします。通常、fstabに書かれた設定はOSの起動の最初の方で実行されるため、DRBDのデバイスを書いても正常に動作しません。これを防ぐため、noautoオプションを追加します。さらにDRBDの状態をPrimaryにする必要があるためx-systemd.requires= オプションを設定して、DRBDのデバイスのマウントの前に、DRBDをPrimary状態にします。
# cat /etc/fstab ..... /dev/drbd0 /drbd xfs noauto,x-systemd.requires=mydrbd.service 0 0 .....
DRBD9の場合はAuto Promoteの機能があるのでDBRDの状態をPrimaryにするServiceは不要です。”x-systemd.requires=”を削除しても、DRBDの起動を待ってデバイスのマウントが行われます。DRBD9の場合はfstabは次の記述で十分です。
# cat /etc/fstab ..... /dev/drbd0 /drbd xfs noauto 0 0 .....
3.mydrbd.service
mydrbd.serviceは今回の新しく作成したサービスです。/etc/systemd/systemディレクトリに配置します。[Unit]に書かれた”After=”と、[Service]に書かれた”ExecStart=”、”Type = oneshot”が設定のポイントです。
# cat /etc/systemd/system/mydrbd.service [Unit] Description = my DRBD start up After=drbd.service [Service] ExecStart = /usr/sbin/drbdadm primary all Type = oneshot [Install] WantedBy = multi-user.target
この設定により、mydrbd.serviceはdrbd.serviceが起動されたのちに起動し、DRBDのすべてのデバイスをPrimaryにします。fstabとこのmydrbd.serviceを合わせて、DRBDのデバイスをPrimaryにしてデバイスを/drbdにマウントするという順番になります。
DRBD9の場合はAuto Promoteの機能があるので、このファイルは不要になります。
4.Samba requiremount.conf
最後にSambaの設定を行います。CentOS 7のSambaはrequiremount.confというファイルにサービスの起動の前にマウントしておくディレクトリを記述できます。
今回の設定では次のようになります。
# cat /etc/systemd/system/smb.service.d/requiremount.conf [Unit] RequiresMountsFor=/drbd
Sambaのサービス(smb.service)はこの/drbdディレクトリのマウントが終了するまで、サービスの起動を待ちます。
以上の設定により、systemdはファイルシステムのマウントと、DRBDの制御、Sambaサービスの起動を次の順番で実行します。
- fstabでのマウント(/drbdを除く)
- DRBDの起動
- /dev/drbd0のリソースがPrimaryになる
- /drbdのマウント
- Sambaサービスが起動