【2025年04月版】Amazon Linux 2023 で DRBD による マルチA-Zレプリケーション 構築メモ

# はじめに

Amazon Linux 2023 へ、DRBDをインストールして、マルチA-Zでりあるたいレプリケーションを行う手順です。

以下のガイドに従ってソースからのインストールを行います。
- [LINBIT | DRBD9 ユーザーズガイド | ソースコードからのDRBDのビルドおよびインストール](https://linbit.com/drbd-user-guide/drbd-guide-9_0-ja/#ch-build-install-from-source)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/e2708e2c-99b9-7e8f-5d62-e976cabbe37c.png)

:::note info
Ubuntu上での構築と、基本的な操作は以下の記事を参照してください。

[【2023年06月版】Ubuntu22.04 上での DRBD によるストレージレプリケーション](https://qiita.com/nouernet/items/31536b9f63837b0c9001)
:::

# 環境

- OSは、Amazon Linux 2023
    - `Linux node1 6.1.130-139.222.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 11 01:10:58 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux`
- ノードは2つで、node1, node2
- node1 は `192.168.0.100`、node2 は `192.168.0.200`
- 同一VPCでマルチA-Zで2つのインスタンスを配置
- 互いにSGで `Ping`と`TCP:7789`、`TCP:7799` を開ける
- インスタンスには、DRBDで使用するボリュームを追加しておく、ここでは、`/dev/xvdb`

# ビルドとインストール

## 必要なパッケージのインストール

```
sudo dnf groupinstall "Development Tools"
sudo dnf install kernel-devel kernel-headers
sudo dnf install libxslt libxslt-devel
sudo dnf install asciidoc xmlto wget
sudo dnf install autoconf automake libtool pkg-config
sudo dnf install glib2 glib2-devel libxml2 libxml2-devel
sudo dnf install lvm2
```

## ソースコードの取得

[公式](https://pkg.linbit.com/) から最新のDRBDとユーティリティのソースコードをダウンロードします。

```
wget https://pkg.linbit.com//downloads/drbd/9/drbd-9.2.13.tar.gz
wget https://pkg.linbit.com//downloads/drbd/utils/drbd-utils-9.30.0.tar.gz

tar -xvf drbd-9.2.13.tar.gz
tar -xvf drbd-utils-9.30.0.tar.gz
```

## ビルドとインストール

### DRBD

```
cd drbd-9.2.13/

make
sudo make install
```

### カーネルモジュール

```
cd drbd
make KDIR=/usr/src/kernels/$(uname -r)
sudo make KDIR=/usr/src/kernels/$(uname -r) install
sudo modprobe drbd
```

### ユーティリティ

```
cd ../../
cd drbd-utils-9.30.0/
./autogen.sh
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --without-manual
make
sudo make install
```

## サービス化

```
sudo systemctl enable --now drbd
```

## 動作確認

```
drbdadm --version
cat /proc/drbd
```


# 設定

node1, node2 の双方で行う

## LVMの作成

```
sudo pvcreate /dev/xvdb
sudo vgcreate  vg0 /dev/xvdb
sudo lvcreate -l100%FREE -n lv0 vg0
```

## 設定ファイルの作成

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

sudo tee /etc/drbd.d/r0.res <<EOF > /dev/null 
resource r0 {
    device /dev/drbd0;
    disk /dev/vg0/lv0;
    meta-disk internal;
    on node1 {
        address 192.168.0.100:7789;
    }
    on node2 {
        address 192.168.0.200:7799;
    }
}
EOF
```

## DRBDボリュームの作成

```
sudo drbdadm create-md r0
sudo drbdadm up r0
sudo drbdadm status r0
```

## プライマリの決定

node1 で行う

```
sudo drbdadm primary r0
```


以下のエラーとなったときは、強制的にprimaryを決定する

```
sudo drbdadm primary r0
r0: State change failed: (-2) Need access to UpToDate data
Command 'drbdsetup primary r0' terminated with exit code 17
```

```
sudo drbdadm -- --force primary r0
```

## DRBD上にファイルシステムを作成

```
sudo mkfs.ext4 /dev/drbd0
```

## マウント

```
sudo mount /dev/drbd0 /export
```

:::note info
基本的な操作は以下の記事を参照してください。

[【2023年06月版】Ubuntu22.04 上での DRBD によるストレージレプリケーション](https://qiita.com/nouernet/items/31536b9f63837b0c9001)
:::

# リンク

- [LINBIT | DRBD9 ユーザーズガイド | ソースコードからのDRBDのビルドおよびインストール](https://linbit.com/drbd-user-guide/drbd-guide-9_0-ja/#ch-build-install-from-source)
- [【2023年06月版】Ubuntu22.04 上での DRBD によるストレージレプリケーション](https://qiita.com/nouernet/items/31536b9f63837b0c9001)

# さいごに

かんたんでしたね