本記事では、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