drbd
drbd9

簡単にできるDRBD9環境構築

More than 1 year has passed since last update.

サーバ3台を使って簡単にDRBD9で多ノード環境を構築します。
DRBDでリアルタイムにデータ冗長化をします。

前提条件

3台のサーバDRBD9、DRBD Manageがインストール済みであること。

構成図

3台構成で「r0」という名前のリソースを作成しリソース上のデータをリアルタイムに冗長化します。
DRBD9-1を一号機、DRBD9-2を二号機、DRBD9-3を三号機と呼ぶことにします。
DRBD9構築編.png

DRBD9インストール手順

インストール手順については以下をご参照ください。

DRBD9環境をソースコードからVagrant+Ansibleでインストールしてみた。(CentOS7編)
http://qiita.com/ksawada1979/items/1dd528f9867f78a10f73

DRBD9環境をVagrant+Ansibleで540秒でインストールしてみた。(Ubuntu16.04編)
http://qiita.com/ksawada1979/items/4fed3724bac966c1738b

DRBD9初期化

まず初期化を実施します。特に指定が無い場合は本ページの手順は一号機で実施します。
192.168.33.11は実際の環境と読み替えて実施します。
途中でyesを入力してください。

$ sudo drbdmanage init 192.168.33.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'.
Operation completed successfully

ノード追加

次にノードを追加します。
二号機を追加します。

$ sudo drbdmanage add-node DRBD9-2 192.168.33.12
Operation completed successfully
Operation completed successfully
Host key verification failed.

Join command for node DRBD9-2:
drbdmanage join -p 6999 192.168.33.12 1 DRBD9-1 192.168.33.11 0 cl+AZLWc3tV2VZJERwqu

三号機を追加します。

$ sudo drbdmanage add-node DRBD9-3 192.168.33.13
Operation completed successfully
Operation completed successfully
Host key verification failed.

Join command for node DRBD9-3:
drbdmanage join -p 6999 192.168.33.13 2 DRBD9-1 192.168.33.11 0 cl+AZLWc3tV2VZJERwqu

次に二号機にログインして以下を実行します。(ここでのコマンドは先ほどのadd-nodeコマンドの結果からコピー&ペーストして実行してください。)

$ sudo drbdmanage join -p 6999 192.168.33.12 1 DRBD9-1 192.168.33.11 0 cl+AZLWc3tV2VZJERwqu
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
Operation completed successfully

次に三号機にログインして以下を実行します。

$ sudo drbdmanage join -p 6999 192.168.33.13 2 DRBD9-1 192.168.33.11 0 cl+AZLWc3tV2VZJERwqu
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
Operation completed successfully

ノード確認

ノードが追加されたことを確認します。

$ sudo drbdmanage list-nodes
+------------------------------------------------------------------------------+
| Name    | Pool Size | Pool Free |                                    | State |
|------------------------------------------------------------------------------|
| DRBD9-1 |     10236 |     10228 |                                    |    ok |
| DRBD9-2 |     10236 |     10228 |                                    |    ok |
| DRBD9-3 |     10236 |     10228 |                                    |    ok |
+------------------------------------------------------------------------------+

プールとリソースとボリュームの関係

ノードが追加できたところで早速データ冗長化するための領域リソースを追加するまえにプールとリソースとボリュームの関係を整理しておきます。
ノード追加後にリソースを追加し、次にボリュームを割り当て最後にデプロイすることでDRBD上で使用することになります。割り当てられるボリュームはプールの領域から切り出して割り当てます。

図にすると以下のような関係になります。
PoolVolumeResource.png

プールの作成部分はインストール編で自動で実施しています。
「vgs」コマンドでプール名とプールの領域を確認することができます。

$ sudo vgs
  VG       #PV #LV #SN Attr   VSize  VFree
  centos     1   2   0 wz--n- 39.51g 44.00m
  drbdpool   1   0   0 wz--n- 10.00g 10.00g

リソース追加

リソースの追加をします。
ここではr0という名前のリソースを追加します。

$ sudo drbdmanage add-resource r0
Operation completed successfully

リソースが追加されたことを確認します。

リソース追加確認

r0というリソースが追加されたことを確認します。
リソースはポート7000番を使用します。リソースを追加するごとに7000番から連番で使用します。

$ sudo drbdmanage list-volumes --groupby Size --show Port
+------------------------------------------------------------------------------+
| Name | Vol ID | Size | Minor | Port |                                | State |
|------------------------------------------------------------------------------|
| r0   |      * |    * |     * | 7000 |                                |     * |
+------------------------------------------------------------------------------+

ボリューム割り当て

ボリュームを割り当てます。先ほどの解説例では2つのボリュームの図がありましたが、ここでは5GBのボリューム1つを「r0」リソースに追加します。

$ sudo drbdmanage add-volume r0 5GB
Operation completed successfully

ここでリソース内に領域が確保されます。
デプロイはしていないのでDRBD上ではまだ使えません。

ボリューム割り当て確認

r0リソースにボリュームが割り当てられたことを確認します。
Vol IDは「0」になっていますがr0にボリュームをさらに追加すると1,2,3のように連番で振られます。

$ sudo drbdmanage volumes
+------------------------------------------------------------------------------+
| Name | Vol ID |     Size | Minor |                                   | State |
|------------------------------------------------------------------------------|
| r0   |      0 | 4.66 GiB |   100 |                                   |    ok |
+------------------------------------------------------------------------------+

デプロイ

いよいよデプロイをします。
デプロイをすることによりDRBDで使用することができます。
最後の3は3台のサーバにデプロイすることを示しています。2にして2台にすることもできます。

$ sudo drbdmanage deploy-resource r0 3
Operation completed successfully

ここでメタディスクが作成されます。
また初期同期もここで実行されます。

デプロイ確認

デプロイされたことを確認します。
r0リソースが初期同期していることも確認します。
replication:SyncSourceとなっていることを確認します。
「.drbdctrl」は各ノードにインストールされたDRBDコントロール用のソフトウェアです。全てSecondaryになっていますが問題ありません。設定変更などをしたときに一時的にPrimaryになりさらに他ノードと設定情報を同期した後にSecondaryに戻ります。

$ sudo drbdadm status
The server's response is:

you are the 3rd user to install this version
.drbdctrl role:Secondary
  volume:0 disk:UpToDate
  volume:1 disk:UpToDate
  DRBD9-2 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate
  DRBD9-3 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate

r0 role:Secondary
  disk:UpToDate
  DRBD9-2 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:5.57
  DRBD9-3 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:5.70

ファイルシステム作成

DRBDで使用できるようになったところで、ファイルシステムを作成します。
CentOS7のデフォルトファイルシステムであるxfsを指定します。

$ sudo mkfs -t xfs /dev/drbd100
meta-data=/dev/drbd100           isize=256    agcount=4, agsize=305176 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=1220703, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

マウント

マウントします。

$ sudo mkdir /drbd9
$ sudo mount /dev/drbd100 /drbd9

書き込みテスト

ddコマンドで作成したDRBD領域に書き込みを行います。

$ sudo dd if=/dev/zero of=/drbd9/test.file bs=1M count=100
100+0 レコード入力
100+0 レコード出力
104857600 バイト (105 MB) コピーされました、 0.453204 秒、 231 MB/秒

最後に書き込みされたことを確認します。

$ ls -l /drbd9
合計 102400
-rw-r--r--. 1 root root 104857600 10月 27 18:20 test.file