Debian 12 bookworm
Sponsored Link

DRBD : インストール2023/08/29

 

DRBD (Distributed Replicated Block Device) をインストールして分散ストレージシステムを構築します。
ネットワーク越しにブロックデバイス単位でミラーリングをすることが可能です。
当例では以下のような環境で DRBD ストレージクラスターを構成します。

+----------------------+          |          +----------------------+
| [   DRBD Server#1  ] |10.0.0.51 | 10.0.0.52| [   DRBD Server#2  ] |
|   node01.srv.world   +----------+----------+   node02.srv.world   |
|                      |                     |                      |
+----------------------+                     +----------------------+

前提として、DRBD クラスター全ノードに DRBD デバイスに割り当てる空きブロックデバイスが存在している必要があります。
[1] 全ノードで DRBD をインストールして設定します。
root@node01:~#
apt -y install drbd-utils
root@node01:~#
vi /etc/drbd.d/r0.res
# 新規作成 : 設定ファイル名 ⇒ (リソース名).res

resource r0 {
    net {
        # A : ローカルディスクとローカル TCP 送信バッファにデータを書き込んだ時点で書き込み完了と判断
        # B : ローカルディスクとリモートバッファキャッシュにデータを書き込んだ時点で書き込み完了と判断
        # C : ローカルディスクとリモートディスクの両方にデータを書き込んだ時点で書き込み完了と判断
        protocol C;
        cram-hmac-alg sha1;
        # ノード間の認証に使用する任意のシークレットキー
        shared-secret "MySharedSecret";
    }
    disk {
    	# 同期に使用する帯域幅を制限可 (下例は 10MB/sec)
        resync-rate 10M;
    }
    # on (ホスト名)
    on node01.srv.world {
        address 10.0.0.51:7788;
        volume 0 {
            # 使用するデバイス名
            device /dev/drbd0;
            # 使用するブロックデバイス
            disk /dev/sdb1;
            # メタデータを作成する場所
            # 別ディスクにする場合はブロックデバイス名を指定
            meta-disk internal;
        }
    }
    on node02.srv.world {
        address 10.0.0.52:7788;
        volume 0 {
            device /dev/drbd0;
            disk /dev/sdb1;
            meta-disk internal;
        }
    }
}

# モジュールロード

root@node01:~#
modprobe drbd

root@node01:~#
lsmod | grep drbd

drbd                  425984  0
lru_cache              16384  1 drbd
libcrc32c              16384  1 drbd

# DRBDリソース作成

root@node01:~#
drbdadm create-md r0

initializing activity log
initializing bitmap (2560 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.

root@node01:~#
systemctl enable --now drbd

[2] 全ノードで設定した後は、いずれかのホストをプライマリにしてデータの同期を実施します。
# 設定直後は Secondary/Secondary

root@node01:~#
cat /proc/drbd

version: 8.4.11 (api:1/proto:86-101)
srcversion: 0ACE0C074EBC10D79EE52CB
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:83882460

# DRBDリソース起動

root@node01:~#
drbdadm up r0
# プライマリにしてデータ同期

root@node01:~#
drbdadm -- --overwrite-data-of-peer primary r0
# データ同期が開始する

root@node01:~#
cat /proc/drbd

version: 8.4.11 (api:1/proto:86-101)
srcversion: 0ACE0C074EBC10D79EE52CB
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:1494016 nr:0 dw:0 dr:1494016 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:82388444
        [>....................] sync'ed:  1.8% (80456/81916)M
        finish: 0:36:57 speed: 37,144 (30,488) K/sec

# 同期が完了すると以下のようなステータスになる

root@node01:~#
cat /proc/drbd

version: 8.4.11 (api:1/proto:86-101)
srcversion: 0ACE0C074EBC10D79EE52CB
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:83882460 nr:0 dw:0 dr:83882460 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[3] 以上で設定完了です。後は DRBD デバイスにファイルシステムを作成して、プライマリ側でマウントすれば利用可能です。
root@node01:~#
mkfs.ext4 /dev/drbd0

root@node01:~#
mkdir /drbd_disk

root@node01:~#
mount /dev/drbd0 /drbd_disk

root@node01:~#
df -hT

Filesystem                  Type      Size  Used Avail Use% Mounted on
udev                        devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs                       tmpfs     392M  564K  391M   1% /run
/dev/mapper/debian--vg-root ext4       28G  1.3G   26G   5% /
tmpfs                       tmpfs     2.0G     0  2.0G   0% /dev/shm
tmpfs                       tmpfs     5.0M     0  5.0M   0% /run/lock
/dev/vda1                   ext2      455M   58M  373M  14% /boot
tmpfs                       tmpfs     392M     0  392M   0% /run/user/0
/dev/drbd0                  ext4       79G   24K   75G   1% /drbd_disk

# テストファイル作成

root@node01:~#
echo 'test file' > /drbd_disk/test.txt

root@node01:~#
ll /drbd_disk

total 20
drwx------ 2 root root 16384 Aug 28 19:53 lost+found
-rw-r--r-- 1 root root    10 Aug 28 19:55 test.txt
[4] セカンダリ側で DRBD デバイスをマウントするには、現在プライマリになっているホストでアンマウントしてセカンダリに降格させ、 セカンダリ側をプライマリに昇格させてマウントという流れになります。
# プライマリーホスト
# アンマウントしてセカンダリーにする

root@node01:~#
umount /drbd_disk

root@node01:~#
drbdadm secondary r0
# セカンダリーホスト
# プライマリーにしてマウントする

root@node02:~#
drbdadm primary r0

root@node02:~#
mount /dev/drbd0 /drbd_disk

root@node02:~#
df -hT

Filesystem                  Type      Size  Used Avail Use% Mounted on
udev                        devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs                       tmpfs     392M  548K  391M   1% /run
/dev/mapper/debian--vg-root ext4       28G  1.3G   26G   5% /
tmpfs                       tmpfs     2.0G     0  2.0G   0% /dev/shm
tmpfs                       tmpfs     5.0M     0  5.0M   0% /run/lock
/dev/vda1                   ext2      455M   58M  373M  14% /boot
tmpfs                       tmpfs     392M     0  392M   0% /run/user/0
/dev/drbd0                  ext4       79G   28K   75G   1% /drbd_disk

root@node02:~#
cat /drbd_disk/test.txt

test file
関連コンテンツ