DRBDの設定方法

DRBDはLinuxのカーネル内部で動作します。カーネル内部のDRBDを操作するため、ユーザ空間で動作する設定ユーティリティプログラムが用意されています。

DRBDの設定ユーティリティには”drbdadm”と呼ばれるツールと、このツールより細かな設定が可能な”drbdmeta”、”drbdsetup”などのツールがあります。”drbdmeta”、”drbdsetup”は”drbdadm”コマンドから起動されますので、DRBDの設定は”drbdadm”コマンドの使い方を理解すれば、DRBDの設定や管理が可能です。

DRBDの設定は、この”drbdadm”に設定値パラメータを与えることで行います。設定値パラメータは/etc/drbd.d/ディレクトリに設定ファイルを配置して、その中に設定値を記述します。

設定パラメータの例を紹介します。

resource r0 {
    volume 0 {
        device          minor 0;
        disk            /dev/sdb1;
        meta-disk       internal;
    }
    on node1 {
        address 10.0.0.1:7789;
    }
    on node2 {
        address 10.0.0.2:7789;
    }
}

この設定例は、ホスト名node1とnode2のサーバがあり、それぞれ/dev/sdb1というストレージを持っており、ネットワークのアドレスが10.0.0.1と10.0.0.2になっていることを想定しています。(下図参照)


設定ファイルを/etc/drbd.d/にr0.resという名前で保存します。名前は.resの拡張子が付いていればどのようなファイル名でも良いのですが、通常は設定のresourceパラメータに合わせておきます。

設定ファイルにresourceパラメータとしてr0としましたので、drbdadmコマンドはr0を引数にして実行します。

DRBDを設定するためには、まずメタデータ領域を定義します。コマンドは次のようになります。

[root@node1 ~]# drbdadm create-md r0
initializing activity log
initializing bitmap (60 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
success
[root@node1 ~]#

このコマンドはnode2でも実行します。

[root@node2 ~]# drbdadm create-md r0
initializing activity log
initializing bitmap (60 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
success
[root@node2 ~]#

コマンドを実行すると/dev/sdb1の中にメタデータ領域が確保されます。この領域にはDRBDの動作に必要にいろいろな情報が含まれています。

次にDRBDを起動します。DRBDはカーネルオブジェクトなので、カーネルにモジュールを組み込む操作が必要です。drbdadmコマンドでupを実行すると、DRBDがカーネルに組み込まれて、動作が開始されます。

[root@node1 ~]# drbdadm up r0

このコマンドはnode2でも実行します。

[root@node2 ~]# drbdadm up r0

DRBDの状態はstatusコマンドで確認できます。

[root@node1 ~]# drbdadm status r0
r0 role:Secondary
  disk:Inconsistent
  node2 role:Secondary
    peer-disk:Inconsistent

[root@node1 ~]#

role:はDRBDの役割です。node1がSecondary、node2もSecondaryであることが判ります。DRBDはroleはPrimaryになっているノードでのみデータの書き込みができます。

disk:はDRBDで管理しているストレージの状態を表しています。両方のストレージがInconsistentなので、同期が出来ていない事が判ります。

node1で”drbdadm status r0″を実行した時にnode2が表示されない場合は、ネットワークの疎通を確認してください。多くの場合は同期に使っている10.0.0.0のネットワークのFirewallの設定が原因である場合が多いです。


この状態では、DRBDをPrimmaryにすることが出来ません。試しにPrimaryに設定するとエラーになります。

[root@node1 ~]# drbdadm primary r0
r0: State change failed: (-2) Need access to UpToDate data
Command 'drbdsetup primary r0' terminated with exit code 17

Primaryにするためには–forceオプションを付ける必要があります。

[root@node1 ~]# drbdadm --force primary r0

“–force”オプションを付けると、DRBDのストレージの初期同期が開始され、node1からnode2にストレージの内容がコピーされます。
初期同期中にstatusを確認すると、次のように同期の進捗を確認出来ます。

[root@node1 ~]# drbdadm status r0
r0 role:Primary
  disk:UpToDate
  node2 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:16.07

同期が終了すると、statusは次のようになります。

[root@node1 ~]# drbdadm status r0
r0 role:Primary
  disk:UpToDate
  node2 role:Secondary
    peer-disk:UpToDate

この状態になれば、DRBDのデバイスにアクセスできます。今回の例では/dev/drbd0がデバイスです。このデバイスにxfsのファイルシステムを作成してマウントしてみます。

[root@node1 ~]# mkfs.xfs /dev/drbd0
meta-data=/dev/drbd0             isize=512    agcount=4, agsize=117498 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=469992, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
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

[root@node1 ~]# mount /dev/drbd0 /mnt
[root@node1 ~]# df
ファイルシス            1K-ブロック    使用  使用可 使用% マウント位置
devtmpfs                     929212       0  929212    0% /dev
tmpfs                        941080    8208  932872    1% /dev/shm
tmpfs                        941080   33364  907716    4% /run
tmpfs                        941080       0  941080    0% /sys/fs/cgroup
/dev/mapper/centos-root     8378368 2609352 5769016   32% /
/dev/vda1                   1038336  324304  714032   32% /boot
tmpfs                        188220       0  188220    0% /run/user/0
/dev/drbd0                  1869728   32992 1836736    2% /mnt

node1でDRBDデバイスをマウントしている間は、node2からは/dev/drbd0にはアクセスできません。node1のDRBDをSecondaryにする必要があります。node1のマウントを解除して、DRBDを次のコマンドでSecondaryにします。

[root@node1 ~]# umount /mnt
[root@node1 ~]# drbdadm secondary r0
[root@node1 ~]#

[root@node2 ~]# drbdadm status
r0 role:Secondary
  disk:UpToDate
  node1 role:Secondary
    peer-disk:UpToDate

[root@node2 ~]# mount /dev/drbd0 /mnt
[root@node2 ~]# df
ファイルシス            1K-ブロック    使用  使用可 使用% マウント位置
devtmpfs                     929212       0  929212    0% /dev
tmpfs                        941080    8208  932872    1% /dev/shm
tmpfs                        941080    8788  932292    1% /run
tmpfs                        941080       0  941080    0% /sys/fs/cgroup
/dev/mapper/centos-root     8378368 2210232 6168136   27% /
/dev/vda1                   1038336  324292  714044   32% /boot
tmpfs                        188220       0  188220    0% /run/user/0
/dev/drbd0                  1869728   32992 1836736    2% /mnt
[root@node2 ~]#

DRBD9からはAuto promoteという機能が実装されているので、”drbdadm primary r0″を実行しなくても、/dev/drbd0にアクセスすれば、roleをPrimaryに自動的に変わり、umountすると元にSecondaryに戻ります。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

2人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です