💾

DRBD9で分散ストレージを手短に構築したよって話

2023/12/21に公開

はじめに

以前よりNextcloudを構築・運用しており、「1ミリもデータを無くしたくない!」という思いから、その保存用HDDの冗長化の過程を備忘録としてまとめたものになります。

昨今では、「そろそろ南海トラフがくる!」と騒がれて止まないのと、メインHDDがぶっ壊れたても大丈夫なように、名古屋⇔北海道間でバックアップ体制の構築を行いました。

自分的メモのため、詳しくは書いていませんが、ご参考程度にどうぞ。

構成

・DRBDのバージョン:9.0
・各ノードのOS:Ubuntu 22.04 LTS
・ノード1(192.168.100.1, Proxmox上のVM)
 ・ホスト名:node-1
・ノード2(192.168.100.2, Raspberry Pi 4B)
 ・ホスト名:node-2

以下、全てホスト名で書いていきます。
リージョン間のバックボーンネットワークは、OCI上に構築済みのWireguardを利用しており、各リージョン間で通信できるようになっています。(ちなみに、実家や兄弟の家などを含め、全てWireguardのバックボーンネットワークに接続・通信できるようになっています。)

使用しているHDDは、下記。
https://www.amazon.co.jp/dp/B07BK6696F?psc=1&ref=ppx_yo2ov_dt_b_product_details

DRBDのインストール

node-1, node-2で実行する

# リポジトリの追加
$ sudo add-apt-repository ppa:linbit/linbit-drbd9-stack

# リポジトリのアップデート
$ sudo apt update

# 構築に必要なDRBDをインストール
$ sudo apt install drbd-utils drbd-dkms -y

# カーネルモジュールのロード
$ sudo modprobe drbd

# インストールできたか確認
$ cat /proc/drbd

冗長化するディスクの準備・初期設定

node-1, node-2で実行

# fdiskなどで、対象のHDDのデバイス名を調べておいてください。
# 今回は「/dev/sda」としますが、各自で適当なデバイス名に置き換えてください。
$ sudo pvcreate /dev/sda
  Physical volume "/dev/sda" successfully created.
$ sudo vgcreate  vg0 /dev/sda
  Volume group "vg0" successfully created
$ sudo lvcreate -l100%FREE -n lv0 vg0
  Logical volume "lv0" created.

作成できたか確認

$ lsblk

ホスト名の確認(node-1, node-2)

$ uname -n
node-1

node-1, node-2で実行

$ sudo tee /etc/drbd.d/global_common.conf <<EOF > /dev/null 
global {
    usage-count no;
}
common {
    net {
        protocol C;
    }
}
EOF

node-1,node-2で実行

$ sudo tee /etc/drbd.d/r0.res <<EOF > /dev/null 
resource r0 {
    device /dev/drbd0;
    disk /dev/vg0/lv0;
    meta-disk internal;
    on <node-1のホスト名> {
        address 192.168.100.101:7789;
    }
    on <node-2のホスト名> {
        address 192.168.100.102:7799;
    }
}
EOF

node-1,node-2で実行

# メタデータの作成
$ sudo drbdadm create-md r0
# DRBDの起動
$ sudo drbdadm up r0
# statusの確認
$ sudo drbdadm status r0

この時点では、起動しただけで同期は始まらないので、下記のコマンドをnode-1で実行します。

$ sudo drbdadm primary --force r0

同期まで時間がかかるので、待機

備考

追記(2023/12/31):ノードのIPアドレスを変更したときの流れ

node-1, node-2で実行

# ダウン
$ sudo drbdadm down r0
# 設定を変更(例)
$ sudo nano /etc/drbd.d/r0.res
# 設定の反映
$ sudo drbdadm adjust r0
# メタデータの再作成
$ sudo drbdadm create-md r0
# statusの確認
$ sudo drbdadm status r0

Discussion