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サービスの起動を次の順番で実行します。

  1. fstabでのマウント(/drbdを除く)
  2. DRBDの起動
  3. /dev/drbd0のリソースがPrimaryになる
  4. /drbdのマウント
  5. Sambaサービスが起動