CentOS7でDRBD9の環境構築を行いました。
また、DRBDの設定管理ツールはdrbdmanageを用いました。
- drbdはversion=9.0.0
- drbdmanageはversion=0.49
参考
DRBDって?
- DRDBじゃないです、DRBDです。
- DRBD(Distributed Replicated Block Device)はネットワークを介して、ハードディスクなどのブロックデバイスをリアルタイムにレプリケート可能なオープンソースソフトウェアです。
- 最新~~(といっても、この原稿を書いているときは開発版ですが)~~(リリースはされているが、stableではなく、まだDevelopment branchで開発が進められている状態でした)のバージョンであるDRBD9は多ノードレプリケーションに対応するなど、新機能が盛り込まれています。
- DRBD9と同時開発で、DRBDの管理が格段に楽になるdrbdmanageも公開されています。
導入環境
- CentOS7.0系(64bit)
- HDDを2枚持つ仮想マシン
- drbd9-01,drbd9-02,drbd9-03の三台でクラスタを構成
- ここで出てくるマシン名(drbd9-01等)は uname -n で出力されたもの
- drbd9-01のipアドレス: 10.255.10.11
- drbd9-02のipアドレス: 10.255.10.12
- drbd9-03のipアドレス: 10.255.10.13
前準備
すべてのノードで行う
-
必要なパッケージを取得
# yum update # yum groupinstall "Development Tools" (任意) # yum install -y wget # yum install -y libxslt pygobject2 help2man # yum install -y kernel-headers (入っているかの確認) # reboot
-
必要なソースを持ってくる
-
DRBD kernel module
$ git clone --recursive git://git.drbd.org/drbd-9.0.git
-
DRBD utilities
$ wget http://oss.linbit.com/drbd/drbd-utils-8.9.3.tar.gz
gitは現状無いためソースを直接取りに行く
-
drbdmanage
$ git clone --recursive http://git.drbd.org/drbdmanage.git
-
注意点
- drbdmanageはpythonの2系が必要
- kernel-headers が必要になるので、インストールされているか必ず確認する(Development Toolsで大体は入っているはず)
DRBD9のインストール
すべてのノードで行う
-
DRBD kernel module
$ cd drbd-9.0 $ sudo make $ sudo make install
makeができないときはmake KDIR=/lib/modules/.../build とする
-
DRBD utilities
drbdadmなどのコマンドが入る$ tar zxvf drbd-utils-8.9.3.tar.gz $ cd drbd-utils-8.9.3 $ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc $ make $ sudo make install
-
drbdmanage
注意:DRBD utilitiesをインストール後に実行する$ cd drbdmanage $ make $ sudo make install
-
確認
drbdadam コマンド,drbdmanage コマンドが入っていることを確認
パーティションの設定
sdbはdrbd用に用意した二枚目のハードディスクデバイス
# fdisk /dev/sdb
コマンド (m でヘルプ): n → 新たに領域を作成
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p → primaryで作成
パーティション番号 (1-4, default 1): 1 → これでsdb1という名称のパーティションが作られる
最初 sector (2048-33554431, 初期値 2048): → default(Enterを押す)
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-33554431, 初期値 33554431): → default(Enterを押す)
初期値 33554431 を使います
Partition 1 of type Linux and of size 16 GiB is set
コマンド (m でヘルプ): w → ディスクに書き込み、終了
パーティションテーブルは変更されました!
ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
/dev配下にsdb1ができていることを確認
-
物理ボリューム(Physical Volume:PV)の作成
# pvcreate /dev/sdb1
-
ボリュームグループ(Volume Group:VG)の作成
# sudo vgcreate drbdpool /dev/sdb1
- VGの名称である 「drbdpool」は drbdmanager で使用するデフォルト名なので変更しない
drbdmanageによるリソースのデプロイ
-
すべてのノードで行う
- drbdmanageで使用するデフォルトのポートを開ける
- 作成したボリュームは、デフォルトだと7700番ポートから順番に昇順で確保される
ここではコマンドを叩くことでポートを開ける方法と、設定ファイルを作成してポートを開ける方法の2種類を示す
1.コマンドだけで終わらせる方法
# firewall-cmd --add-port=6999/tcp --zone=public --permanent
# firewall-cmd --reload
# firewall-cmd --add-port=7700-7800/tcp --zone=public --permanent
# firewall-cmd --reload
2.設定ファイルを作成する方法
# cd /etc/firewalld/services/
# vi drbdmanage.xml
# firewall-cmd --reload
# firewall-cmd --add-service=drbdmanage --zone=public --permanent
# firewall-cmd --reload
-
注意:super userになっていないとfirewalld以下のディレクトリは見えません
-
設定ファイル例(drbdmanage.xml)
<?xml version="1.0" encoding="utf-8"?> <service> <short>drbdmanage</short> <description>Drbdmanage is configuration management tool for drbd. 6999 port is used for the control volume "drbdctrl" of drbdmanage. This port number is default. You can change these port number yourself.</description> <port protocol="tcp" port="6999"/> <port protocol="tcp" port="7700-7800"/> </service>
追記(10/16)
- drbdmanageのバージョン0.50からは、デフォルトで使用されるポート番号が7000番からになっているので注意してください。
クラスタのinitialize
クラスタ内のノード1台だけで実行(今回はdrbd9-01)
# drbdmanage init 10.255.10.11
You are going to initalize 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
Failed to find logical volume "drbdpool/.drbdctrl"
Logical volume ".drbdctrl" created.
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
empty drbdmanage control volume initialized.
Operation completed successfully
- 追記
10/6に最新版で実行したところ、drbdpool内に作成されるdrbdctrlファイルが".drbdctrl_0"と".drbdctrl_1"の2つが作成されていた。
調べたところ、gitのlogに、Implemented dual-redundant drbdmanage control volume と書いてあった、おそらくこいつが原因。
クラスタにノードを追加
クラスタ内のノード1台だけで実行(今回はdrbd9-01)
# drbdmanage add-node drbd9-02 10.255.10.12
Operation completed successfully
Operation completed successfully
Host key verification failed.
Join command for node drbd9-02:
drbdmanage join -p 6999 10.255.10.12 1 drbd9-01 10.255.10.11 0 SecretKey
- 追加したいノードで実行するコマンドが表示される
- 同様にdrbd9-03もadd-nodeする
ノードのJoin
drbd9-02で実行
# drbdmanage join -p 6999 10.255.10.12 1 drbd9-01 10.255.10.11 0 SecretKey
- drbd9-03も同様にadd-node時に表示されたコマンドを実行する
クラスタの状態確認
# drbdmanage list-nodes (list-nodeはnに省略可能)
+------------------------------------------------------------------------------+
| Name | Pool Size | Pool Free | | State |
+------------------------------------------------------------------------------+
| drbd9-01 | 16380 | 16376 | | ok |
| drbd9-02 | 16380 | 16376 | | ok |
| drbd9-03 | 16380 | 16376 | | ok |
+------------------------------------------------------------------------------+
# drbdsetup status
.drbdctrl role:Secondary
disk:UpToDate
drbd9-01 role:Secondary
peer-disk:UpToDate
drbd9-02 role:Secondary
peer-disk:UpToDate
- UpToDateではなくConectingになっている場合はportの開け忘れ、もしくは同期がうまくいっていない可能性がある
- 前者の場合はportが空いているかチェック
- 後者の場合はdrbdmanage update-pool もしくは、drbdmanage n を実行してみる
リソース・ボリュームの作成とデプロイ
-
リソースの確保
ここでコマンドでリソースが使用するポートを選択できる# drbdmanage add-resource backups
-
リソース内に新しいボリュームを作成
この時使用するボリュームのサイズを指定する# drbdmanage add-volume backups 5GB
-
リソースをデプロイするクラスタ数を定める
# drbdmanage deploy-resource backups 3
別のデプロイ方法
-
ボリュームの確保からデプロイまで一回で行う
# drbdmanage add-volume backups 5GB --deploy 3
-
割り当てを一つずつ行う
add-volumeした後デプロイ先を手動で選ぶことが可能# drbdmanage add-resource backups # drbdmanage add-volume backups 5GB # drbdmanage assign-resource backups drbd9-01 # drbdmanage assign-resource backups drbd9-02
portの確認
すべてのノードで行う
ボリュームが使用するポートの確認
# drbdmanage list-volumes --groupby Size --show Port
+------------------------------------------------------------------------------+
| Name | Vol ID | Size | Minor | Port | | State |
+------------------------------------------------------------------------------+
| backups | 0 | 2861 | 10 | 7700 | | ok |
+------------------------------------------------------------------------------+
もしポートが空いていなければ
# firewall-cmd --add-port=7700/tcp --zone=public --permanent
# firewall-cmd --reload
ファイルシステム作成とマウント
# drbdmanage list-volumes --groupby Size --show Port
+------------------------------------------------------------------------------+
| Name | Vol ID | Size | Minor | Port | | State |
+------------------------------------------------------------------------------+
| backups | 0 | 2861 | 10 | 7700 | | ok |
+------------------------------------------------------------------------------+
# mke2fs -j /dev/drbd10 (上の表でMinorが10になっているのでdrbd10にファイルシステムを作成する)
# mkdir -p /mnt/drbd/backups
# mount /dev/drbd10 /mnt/drbd/backups
ロール切り替えの確認
- 一言メモ
- drbd8では、PrimaryとSecondaryの変更を手動で行った後にmountする必要があった
- drbd9からはmountされているノードが自動的にPrimaryとなる
-
drbd9-01
# drbdsetup status .drbdctrl role:Secondary disk:UpToDate drbd9-02 role:Secondary peer-disk:UpToDate drbd9-03 role:Secondary peer-disk:UpToDate backups role:Primary disk:UpToDate drbd9-02 role:Secondary peer-disk:UpToDate drbd9-03 role:Secondary peer-disk:UpToDate # cd /mnt/drbd/backups # なにかファイルを作成
2.drbd9-02
# mkdir -p /mnt/drbd/backups
# mount /dev/drbd10 /mnt/drbd
# drbdsetup status
.drbdctrl role:Secondary
disk:UpToDate
drbd9-01 role:Secondary
peer-disk:UpToDate
drbd9-03 role:Secondary
peer-disk:UpToDate
backups role:Secondary
disk:UpToDate
drbd9-01 role:Primary
peer-disk:UpToDate
drbd9-03 role:Secondary
peer-disk:UpToDate
3.drbd9-01
# umount /mnt/drbd/backups
4.drbd9-02
# mount /dev/drbd10 /mnt/drbd/backups
# drbdsetup status
.drbdctrl role:Secondary
disk:UpToDate
drbd9-01 role:Secondary
peer-disk:UpToDate
drbd9-03 role:Secondary
peer-disk:UpToDate
backups role:Primary
disk:UpToDate
drbd9-01 role:Secondary
peer-disk:UpToDate
drbd9-03 role:Secondary
peer-disk:UpToDate
drbd9-01で作ったファイルが見れるか確認
おわりに
- DRBD9は、ローカルストレージを持たないDRBD Client、データの再配置等の新機能もありますが、それは別記事で紹介したいと思います。