💾
DRBD9で分散ストレージを手短に構築したよって話
はじめに
以前より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は、下記。
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