DRBD9では、以前のバージョンに比べて3台以上のクラスタをより簡単に構築できるようになりました。DRBD8では、2台構成のクラスタを階層化するスタック構成を使用して3台以上のクラスタを組むことができましたが、構成が複雑になり、柔軟性にも欠けるものでした。
また、drbdmanageにより簡単にDRBDクラスタの管理ができるようになりました。
本記事では、drbdmanageを使用して3台構成のDRBDクラスタを構築する方法について紹介します。
なお、新しい管理ツールとしてLINSTORが現在開発されており(2018年11月現在β版)、将来はLINSTORへの移行が予定されています。LINSTORを用いたDRBDクラスタの構築については後日改めて公開する予定です。
1. 導入手順
本記事では以下の手順で導入を行います。
- 必要なソフトウェアのインストール
- ssh、LVMの設定
- クラスタの初期化
- 2台目のノードの追加
- ボリュームの追加
- 3台目のノードの追加およびボリュームのアサイン
2. 前提
本記事で使用する環境は以下になります。
OS: CentOS 7.4
ホスト名 | IPアドレス | DRBD用パーティション |
---|---|---|
server1 | 192.168.1.11 | /dev/sdb1 |
server2 | 192.168.1.12 | /dev/sdb1 |
server3 | 192.168.1.13 | /dev/sdb1 |
3. 必要なソフトウェアのインストール
ELrepoから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
/etc/drbd.d/ 以下に既存の設定がある場合は競合する可能性があるので、すべて退避させて初期状態にしておきます。
drbdmanage のビルド、インストール
drbdmanageはELrepoに含まれていないので、自前でrpmをビルドする必要があります。
https://www.linbit.com/en/drbd-community/drbd-download/ よりdrbdmanageの最新版ソースコードをダウンロードします。
ビルドに必要なパッケージをインストールし、rpmをビルドします。なお、ELrepoのDRBDパッケージ名とdrbdmanage内の設定ファイルの記述に差異があるため、修正が必要となります。
$ sudo yum install pygobject2 help2man rpm-build $ wget http://www.linbit.com/downloads/drbdmanage/drbdmanage-0.99.18.tar.gz $ tar zxvf drbdmanage-0.99.18.tar.gz $ cd drbdmanage-0.99.18 (依存パッケージ名を修正する) $ vi setup.cfg (修正前) drbd-utils >= 8.9.9 (修正後) drbd90-utils >= 8.9.9 $ make rpm (dist/ 以下に rpm が作成される) $ sudo rpm -ivh dist/drbdmanage-0.99.18-1.noarch.rpm
すべてのノードにrpmをコピーし、同様にインストールします。
4. sshの設定
ノード間でパスワードなしでsshログインできるように設定します。
[root@server1 ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. ... [root@server1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@server2 ... root@server2's password: ... (server1 -> server2 にパスワードなしでログインできることを確認) [root@server1 ~]# ssh root@server2 (server2 でも server1 に対して上記を行う)
5. LVMの設定
両ノードでLVMの物理ボリュームおよびボリュームグループを作成します。
drbdmanageはデフォルトでdrbdpoolという名前のボリュームグループを使用します。
# pvcreate /dev/sdb1 # vgcreate drbdpool /dev/sdb1
6. クラスタの初期化
最初に1台目のノードでdrbdmanageクラスタの初期化を実行します。
なお、複数のノードで初期化を行ってしまうと整合性が取れなくなるのでご注意ください。
[root@server1 ~]# drbdmanage init 192.168.1.11 You are going to initialize a new drbdmanage cluster. CAUTION! Note that: * Any previous drbdmanage cluster information may be removed * Any remaining resources managed by a previous drbdmanage installation that still exist on this system will no longer be managed by drbdmanage Confirm: yes/no: yes Empty drbdmanage control volume initialized on '/dev/drbd0'. Empty drbdmanage control volume initialized on '/dev/drbd1'. Waiting for server: . Operation completed successfully
管理用DRBDボリュームが作成され、1台目のノードがdrbdmanageに登録されたことを確認します。
[root@server1 ~]# drbdadm status .drbdctrl role:Primary volume:0 disk:UpToDate volume:1 disk:UpToDate [root@server1 ~]# drbdmanage list-nodes +----------------------------------------------------------------------+ | Name | Pool Size | Pool Free | | State | |----------------------------------------------------------------------| | server1 | 5116 | 5108 | | ok | +----------------------------------------------------------------------+
7. 2台目のノードの追加
2台目のノードを追加します。server1で以下を実行すると、sshでserver2に自動的にログインして必要な操作が行われます。
[root@server1 ~]# drbdmanage add-node server2 192.168.1.12 Operation completed successfully Operation completed successfully Executing join command using ssh. IMPORTANT: The output you see comes from server2 IMPORTANT: Your input is executed on server2 You are going to join an existing drbdmanage cluster. CAUTION! Note that: * Any previous drbdmanage cluster information may be removed * Any remaining resources managed by a previous drbdmanage installation that still exist on this system will no longer be managed by drbdmanage Confirm: yes/no: yes Waiting for server to start up (can take up to 1 min) Operation completed successfully Give leader time to contact the new node Operation completed successfully [root@server1 ~]# drbdmanage list-nodes +----------------------------------------------------------------------+ | Name | Pool Size | Pool Free | | State | |----------------------------------------------------------------------| | server1 | 5116 | 5108 | | ok | | server2 | 5116 | 5108 | | ok | +----------------------------------------------------------------------+
8. ボリュームの追加
上記で作成した2台のDRBDクラスタに新規ボリュームを追加します。
ここではvol1(1GB)、vol2(1GB)の2つのボリュームを2通りの方法で作成します。
1つ目は操作を1つずつ行います。
操作はリソース追加→ボリューム追加→デプロイの順で行います。
リソース vol1 を追加し、1GBのボリュームを割り当てます。
[root@server1 ~]# drbdmanage list-volumes No resources defined [root@server1 ~]# drbdmanage add-resource vol1 Operation completed successfully [root@server1 ~]# drbdmanage add-volume vol1 1GB Operation completed successfully
続いてリソースをデプロイします。以下の場合、最も要件に合致する2ノードを自動的に選択します。
今回は2ノードしかないので単に両方のノードが割り当てられますが、3ノード以上ある場合は空きが多いものから選択されます。
なお、assign-resourceで手動でノードを選択してデプロイすることもできます。
[root@server1 ~]# drbdmanage deploy-resource vol1 2 Operation completed successfully
ボリュームがデプロイされ、実際にDRBDリソースが作成されていることを確認します。
[root@server1 ~]# drbdmanage list-volumes +----------------------------------------------------------------------+ | Name | Vol ID | Size | Minor | | State | |----------------------------------------------------------------------| | vol1 | 0 | 953.67 MiB | 100 | | ok | +----------------------------------------------------------------------+ [root@server1 ~]# drbdmanage list-nodes +----------------------------------------------------------------------+ | Name | Pool Size | Pool Free | | State | |----------------------------------------------------------------------| | server1 | 5116 | 4152 | | ok | | server2 | 5116 | 4152 | | ok | +----------------------------------------------------------------------+ [root@server1 ~]# drbdadm status .drbdctrl role:Primary volume:0 disk:UpToDate volume:1 disk:UpToDate server2 role:Secondary volume:0 peer-disk:UpToDate volume:1 peer-disk:UpToDate vol1 role:Secondary disk:UpToDate server2 role:Secondary peer-disk:UpToDate
リソース追加、ボリューム追加、デプロイを一度に行うことも可能です。ここでは vol2 ボリュームを一度に作成します。
[root@server1 ~]# drbdmanage new-volume vol2 1GB --deploy 2 Operation completed successfully Operation completed successfully [root@server1 ~]# drbdmanage list-volumes +---------------------------------------------------------------------+ | Name | Vol ID | Size | Minor | | State | |---------------------------------------------------------------------| | vol1 | 0 | 953.67 MiB | 100 | | ok | | vol2 | 0 | 953.67 MiB | 101 | | ok | +---------------------------------------------------------------------+ [root@server1 ~]# drbdmanage list-nodes +---------------------------------------------------------------------+ | Name | Pool Size | Pool Free | | State | |---------------------------------------------------------------------| | server1 | 5116 | 3196 | | ok | | server2 | 5116 | 3196 | | ok | +---------------------------------------------------------------------+ [root@server1 ~]# drbdadm status ... vol2 role:Secondary disk:UpToDate server2 role:Secondary peer-disk:UpToDate
9. ファイルシステムの作成
ファイルシステム作成対象のデバイスファイルは /dev/drbd100 から順に作成されます。
数字は drbdmanage list-volumes で表示される Minor の値に対応します。
[root@server1 ~]# mkfs -t ext4 /dev/drbd100 [root@server1 ~]# mkfs -t ext4 /dev/drbd101 [root@server1 ~]# mkdir /mnt/drbd1 [root@server1 ~]# mkdir /mnt/drbd2 [root@server1 ~]# mount /dev/drbd100 /mnt/drbd1 [root@server1 ~]# mount /dev/drbd101 /mnt/drbd2 [root@server1 ~]# df ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置 ... /dev/drbd100 944808 2404 877192 1% /mnt/drbd1 /dev/drbd101 944808 2404 877192 1% /mnt/drbd2
10. 3台目のノードの追加
2台のDRBDクラスタに3台目のノードを追加する場合、3台目のノードで「3. 必要なソフトウェアのインストール」「4. sshの設定」および「5. LVMの設定」を行っておきます。
その後、 server1 で以下を実行します。
[root@server1 ~]# drbdmanage add-node server3 192.168.1.13 Operation completed successfully Operation completed successfully Host key verification failed. Give leader time to contact the new node Operation completed successfully Operation completed successfully Join command for node server3: drbdmanage join -p 6999 192.168.1.13 2 server1 192.168.1.11 0 xxxxxxxxxxxxxxxx
「Join command for node (ホスト名):」で提示されたコマンドを追加するノードで実行します(パスワードなしで ssh ログインできるようにしている場合は server1 から実行できます)。
[root@server3 ~]# drbdmanage join -p 6999 192.168.1.13 2 server1 192.168.1.11 0 xxxxxxxxxxxxxxxx You are going to join an existing drbdmanage cluster. CAUTION! Note that: * Any previous drbdmanage cluster information may be removed * Any remaining resources managed by a previous drbdmanage installation that still exist on this system will no longer be managed by drbdmanage Confirm: yes/no: yes Waiting for server to start up (can take up to 1 min) Operation completed successfully
drbdmanage list-nodes でノードが追加されていることを確認します。 [root@server1 ~]# drbdmanage list-nodes +---------------------------------------------------------------------+ | Name | Pool Size | Pool Free | | State | |---------------------------------------------------------------------| | server1 | 5116 | 3196 | | ok | | server2 | 5116 | 3196 | | ok | | server3 | 5116 | 5108 | | ok | +---------------------------------------------------------------------+
ボリューム vol2 を3台目のノードにアサインします。
[root@server1 ~]# drbdmanage assign-resource vol2 server3 Operation completed successfully
追加したノードにボリュームが作成され、同期が開始されます。
[root@server1 ~]# drbdadm status .drbdctrl role:Primary volume:0 disk:UpToDate volume:1 disk:UpToDate server2 role:Secondary volume:0 peer-disk:UpToDate volume:1 peer-disk:UpToDate server3 role:Secondary volume:0 peer-disk:UpToDate volume:1 peer-disk:UpToDate vol1 role:Secondary disk:UpToDate server2 role:Secondary peer-disk:UpToDate vol2 role:Secondary disk:UpToDate server2 role:Secondary peer-disk:UpToDate server3 role:Secondary replication:SyncSource peer-disk:Inconsistent done:0.61
しばらく待つと同期が完了し、3台目のノードのボリュームが使用されていることを確認します。
[root@server1 ~]# drbdadm status ... vol2 role:Secondary disk:UpToDate server2 role:Secondary peer-disk:UpToDate server3 role:Secondary peer-disk:UpToDate [root@server1 ~]# drbdmanage list-nodes +----------------------------------------------------------------------+ | Name | Pool Size | Pool Free | | State | |----------------------------------------------------------------------| | server1 | 5116 | 3196 | | ok | | server2 | 5116 | 3196 | | ok | | server3 | 5116 | 4152 | | ok | +----------------------------------------------------------------------+
このとき各ボリュームは以下のようにアサインされています。
+---------+ +---------+ +---------+ | server1 |--| server2 |--| server3 | +---------+ +---------+ +---------+ +---------+ +---------+ | vol1 | | vol1 | +---------+ +---------+ +---------+ | vol2 | | vol2 | | vol2 | +---------+ +---------+ +---------+