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に戻ります。