DRBD9 と Pacemaker の構成

本記事では、Linuxの分散ストレージシステムであるDRBDの最新版であるDRBD9とPacemakerを組み合わせた構成について、基本的な構成でのインストール手順およびDRBD8の場合との違いなどについて解説していきます。

1. DRBD9について

DRBDは複数台のLinuxサーバで、ネットワーク経由で共有ストレージを構築するためのシステムです。

DRBD9はDRBD8.xから以下のような機能が強化されています。

  • 自動プロモーション機能によりマウント時に自動でプライマリへの昇格・セカンダリへの降格が行えるようになった
  • drbdmanage コマンドによりノードやボリュームの追加・削除が簡単に行えるようになった
  • 1階層で最大31ノードまでの多ノード構成が可能(DRBD8まではスタック構成のみ可)

特に、自動プロモーション機能によりPacemakerでクラスタを組む場合に大幅に設定を簡略化できるようになりました。

2. 構成

本記事では以下のサーバ構成を想定します。

ホスト名 IPアドレス デバイス サイズ
server1 192.168.1.11 /dev/sdb 5GB
server2 192.168.1.12 /dev/sdb 5GB
仮想IP 192.168.1.101

3. パッケージのインストール

本記事ではELRepoリポジトリ(http://elrepo.org)のrpmパッケージをインストールします。

両ノードにDRBD9をインストールします。

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# yum install kmod-drbd90 drbd90-utils

4. 設定ファイルの作成

drbdmanage を使用せず自分でDRBDのリソースを管理する場合はリソースの設定ファイルを作成します。

/etc/drbd.d/drbd0.res として設定ファイルを作成します。

resource drbd0 {
        protocol C;

        disk /dev/sdb1;
        device /dev/drbd0;
        meta-disk internal;
        on server1 {
                address 192.168.1.11:7789;
        }
        on server2 {
                address 192.168.1.12:7789;
        }
}

/etc/drbd.d/global_common.conf に以下の設定を追加します。自動プロモーションはデフォルトで有効のため、「auto-promote yes;」は追加しなくてもOKです。

global {
        usage-count no;
        ...
}

common {
        ...
        options {
                auto-promote yes;
        }
        ...
}

5. DRBDデバイスの作成

両ノードのディスクsdbにsdb1パーティションを作成し、先頭を0初期化します。
※対象のディスクのデータはすべて削除されるので注意!

# cfdisk /dev/sdb
# dd if=/dev/zero of=/dev/sdb1 bs=1M count=1

両ノードでメタデータを作成します。

# drbdadm create-md drbd0

リソースを有効化します。

[root@server1 ~]# drbdadm up drbd0
[root@server1 ~]# drbdadm status drbd0
drbd0 role:Secondary
  disk:Inconsistent
  server2 connection:Connecting

[root@server2 ~]# drbdadm up drbd0
[root@server2 ~]# drbdadm status drbd0
drbd0 role:Secondary
  disk:Inconsistent
  server1 role:Secondary
    peer-disk:Inconsistent

[root@server1 ~]# drbdadm status drbd0
drbd0 role:Secondary
  disk:Inconsistent
  server2 role:Secondary
    peer-disk:Inconsistent

この時点ではまだデバイスの同期が行われていないため、「Inconsistent」状態になります。

6. デバイスの初期同期

server1を同期元として指定し、同期を開始します。

[root@server1 ~]# drbdadm primary --force drbd0

同期が完了した場合、両方のディスクが「UpToDate」になります。

[root@server1 ~]# drbdadm status drbd0
drbd0 role:Primary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate

[root@server2 ~]# drbdadm status drbd0
drbd0 role:Secondary
  disk:UpToDate
  server1 role:Primary
    peer-disk:UpToDate

なお、 DRBD 8.xでは cat /proc/drbd でもステータスを確認できましたが、DRBD9では利用できませんのでご注意ください。

7. ファイルシステムの作成

現在プライマリとなっているノードでDRBDデバイス上にファイルシステムを作成します。

[root@server1 ~]# mkfs.ext4 /dev/drbd0
...

[root@server1 ~]# mkdir /mnt/drbd
[root@server1 ~]# mount /dev/drbd0 /mnt/drbd
[root@server1 ~]# df /mnt/drbd
ファイルシス   1K-ブロック  使用   使用可 使用% マウント位置
/dev/drbd0         5029276 20472  4730288    1% /mnt/drbd

テストファイルを作成し、プライマリを移動して複製されていることを確認します。

[root@server1 ~]# echo test > /mnt/drbd/test.txt
[root@server1 ~]# umount /dev/drbd0
[root@server1 ~]# drbdadm secondary drbd0

[root@server2 ~]# drbdadm primary drbd0
[root@server2 ~]# mount /dev/drbd0 /mnt/drbd
[root@server2 ~]# ls /mnt/drbd
lost+found test.txt
[root@server2 ~]# cat /mnt/drbd/test.txt
test
[root@server2 ~]# umount /dev/drbd0
[root@server2 ~]# drbdadm secondary drbd0

8. DRBDの自動起動設定

OS起動時にDRBDが起動するように設定します。

[root@server1 ~]# systemctl enable drbd
Created symlink from /etc/systemd/system/multi-user.target.wants/drbd.service to /usr/lib/systemd/system/drbd.service.
[root@server2 ~]# systemctl enable drbd
Created symlink from /etc/systemd/system/multi-user.target.wants/drbd.service to /usr/lib/systemd/system/drbd.service.

両ノードのOSを再起動し、DRBDが両方Secondary状態で起動することを確認します。

9. 自動プロモーション

自動プロモーションが有効になっているので、mount操作を実行すると自動的にPrimaryに昇格され、
umountで自動的にSecondaryに降格されます。

[root@server1 ~]# drbdadm status drbd0
drbd0 role:Secondary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate
[root@server1 ~]# mount /dev/drbd0 /mnt/drbd
[root@server1 ~]# drbdadm status drbd0
drbd0 role:Primary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate

なお、既にPrimaryになっているノードがある状態でmount実行しようとすると以下のように失敗します。

drbd drbd0: Auto-promote failed: Multiple primaries not allowed by config

また、注意点として、一度 drbdadmコマンドで手動でPrimary/Secondaryを切り替えると、自動プロモーションは無効になります。再度有効にするにはDRBDを再起動する必要があります。

10. Pacemaker/Corosyncの設定

Pacemaker/CorosyncでDRBDデバイス上のファイルシステムを管理する設定を行います。

DRBDリソースの昇格・降格はDRBDの自動プロモーションにより制御されるため、従来のようにPacemakerでMaster/Slaveリソースを作成する必要がなくなり、設定を大幅に簡略化できます。また、DRBDの管理をDRBD自体に任せることにより、DRBDのスプリットブレインが発生しにくくなるメリットもあります。

ここではFilesystemリソースとIPaddr2(仮想IP)リソースをグループ化して管理します。なお、Pacemaker/Corosyncのインストール自体は完了しているものとします。

# pcs resource create VIP ocf:heartbeat:IPaddr2 
    ip=192.168.1.101 cidr_netmask=24 op monitor interval=10s
# pcs resource create FS ocf:heartbeat:Filesystem 
    device=/dev/drbd0 directory=/mnt/drbd fstype=ext4 
    op start timeout=60s on-fail=restart 
    op stop timeout=60s on-fail=block 
    op monitor interval=10s timeout=60s on-fail=restart
# pcs resource group add Group-FS FS VIP

ファイルシステムリソースが仮想IPリソースと同じノードで起動し、DRBDリソースがPrimaryとなり実際にマウントされていることを確認します。

# pcs status
  ...
  Resource Group: Group-FS
      FS (ocf::heartbeat:Filesystem):    Started server1
      VIP        (ocf::heartbeat:IPaddr2):       Started server1

[root@server1 ~]# drbdadm status
drbd0 role:Primary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate

[root@server1 ~]# df /mnt/drbd
ファイルシス   1K-ブロック  使用  使用可 使用% マウント位置
/dev/drbd0         5029276 37916 4712844    1% /mnt/drbd

server1をスタンバイモードにしてserver2にスイッチオーバーすることを確認します。

[root@server1 ~]# pcs cluster standby server1
[root@server1 ~]# pcs status
...
Node server1: standby
Online: [ server2 ]

Full list of resources:

 Resource Group: Group-FS
     FS (ocf::heartbeat:Filesystem):    Started server2
     VIP        (ocf::heartbeat:IPaddr2):       Started server2

[root@server2 ~]# drbdadm status
drbd0 role:Primary
  disk:UpToDate
  server1 role:Secondary
    peer-disk:UpToDate

[root@server2 ~]# df /mnt/drbd
ファイルシス   1K-ブロック  使用  使用可 使用% マウント位置
/dev/drbd0         5029276 37916 4712844    1% /mnt/drbd