🤖
DRBD
WEBサーバのシングルポイント
WEBサーバ複数台が同じコンテンツを利用する場合、コンテンツを共有ストレージに配置することが一般的な構成だと思う。
ただ、この構成だと共有ストレージがシングルポイントになり、障害が起きたら困る。
シングルポイントをなくして、障害に強い構成にしたい。
DRDBとは
「NFS 冗長化」などのワードをググっていたところ、「DRBD」なるものを見つけた。
DRBD(Distributed Replicated Block Device)は、ネットワークを通じてハードディスク(ブロックデバイス)をリアルタイムに複製(同時複製)するソフトウェアです。大切なデータを失わないためのバックアップや、サービスの冗長化に役立つソフトウェアとして広く使用されています。
バックアップにもなるし、冗長化にもなるとは良さそうだと思い構築しつつ勉強することに。
ただ、勉強していて分かったことは、上に書いてあることには1つ誤りがあるということだ。
DRBDは冗長化で高可用性を担保できるが、バックアップにはならない。
なぜなら、壊れたファイルも同期してしまうからだ。
なので、DRBDを使うときは高可用性が必要な場合で、バックアップは別の領域に取得しておくとよいだろう。
DRDBの構築
- Ubuntu 22.04にDRBD9をインストール
Ubuntu 22.04にDRBD9をインストール
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get update
apt install -y drbd-utils drbd-dkms
- 再起動後にバージョン確認
reboot
modprobe drbd
cat /proc/drbd
以下のように、version: 9となっていること
version: 9.1.7 (api:2/proto:110-121)
GIT-hash: bfd2450739e3e27cfd0a2eece2cde3d94ad993ae build by root@csps-clm01, 2022-06-04 16:21:44
Transports (api:18): tcp (9.1.7)
- DRBDのコンフィグの設定
cd /etc/drbd.d/
vi global_common.conf
以下の通り編集
net { 内に以下を有効化
protocol C;
}
vi r0.res
以下の通り編集
resource r0 {
on drbd-server1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.0.165:7789;
meta-disk internal;
}
on drbd-server2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.0.166:7789;
meta-disk internal;
}
}
コンフィグの反映
modprobe drbd
- DRBDの設定
wipefs -a /dev/sdb1
DRBDのメタデータを作成
drbdadm create-md r0
DRBDを起動
systemctl start drbd
プライマリの設定(プライマリにするサーバで実行)
drbdadm primary --force r0
- ステータスの確認
DRBDのステータスの確認
drbdadm status r0
r0 role:Primary
disk:UpToDate
csps-clm02 role:Secondary
replication:SyncSource peer-disk:Inconsistent done:4.66 ← 同期中
同期完了すると下記のようになる(同期は結構時間かかる)
r0 role:Primary
disk:UpToDate
csps-clm02 role:Secondary
peer-disk:UpToDate
- フォーマット
mkfs.ext4 /dev/drbd0
- マウント
プライマリでマウント
mount /dev/drbd0 /Contents
参考サイト
Discussion