【2023年05月版】Ubuntu22.04 上での DRBD によるストレージレプリケーション ステータス編

# はじめに

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

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

の続きです

# 前提条件

- 2台の ubuntu 22.04
- Primary を node1、Secndary を node2 とする
- Primary/Secondary 共に /dev/sda をシステム、/dev/sdb をストレージレプリケーションとして利用
- node1 の IPアドレスは 192.168.100.101 とする
- node2 の IPアドレスは 192.168.100.102 とする
- マウント先は /export とする
- すでに、/dev/drbd0 として構築済み

# ステータス確認

## ステータス表示

- node1(primary) で

```terminal
$ sudo drbdsetup status --verbose --statistics
r0 node-id:1 role:Primary suspended:no force-io-failures:no
    write-ordering:flush
  volume:0 minor:0 disk:UpToDate backing_dev:/dev/sdb quorum:yes
      size:20970844 read:13267089 written:22303781 al-writes:848 bm-writes:186 upper-pending:0 lower-pending:0 al-suspended:no
      blocked:no
  node2 node-id:0 connection:Connected role:Secondary congested:no ap-in-flight:0 rs-in-flight:0
    volume:0 replication:Established peer-disk:UpToDate resync-suspended:no
        received:36 sent:4096512 out-of-sync:0 pending:0 unacked:0
```

- node2(secondary) で

```terminal
$ sudo drbdsetup status --verbose --statistics
r0 node-id:0 role:Secondary suspended:no force-io-failures:no
    write-ordering:flush
  volume:0 minor:0 disk:UpToDate backing_dev:/dev/sdb quorum:yes
      size:20970844 read:1501 written:4096548 al-writes:3 bm-writes:59 upper-pending:0 lower-pending:0
      al-suspended:no blocked:no
   node1 node-id:1 connection:Connected role:Primary congested:no ap-in-flight:0 rs-in-flight:0
    volume:0 replication:Established peer-disk:UpToDate resync-suspended:no
        received:4096512 sent:36 out-of-sync:0 pending:0 unacked:0
```

## 読み方

### 接続のステータス

- StandAlone
    ネットワーク構成は使用できません。リソースがまだ接続されていない、管理上の理由で切断している( drbdadm disconnect を使用)、認証の失敗またはスプリットブレインにより接続が解除された、のいずれかが考えられます。

- Disconnecting
    切断中の一時的な状態です。次の状態は StandAlone です。

- Unconnected
    接続を試行する前の一時的な状態です。次に考えられる状態は、 Connecting です。

- Timeout
    対向ノードとの通信のタイムアウト後の一時的な状態です。次の状態は Unconnected です。

- BrokenPipe
    対向ノードとの接続が失われた後の一時的な状態です。次の状態は Unconnected です。

- NetworkFailure
    対向ノードとの接続が失われた後の一時的な状態です。次の状態は Unconnected です。

- ProtocolError
    対向ノードとの接続が失われた後の一時的な状態です。次の状態は Unconnected です。

- TearDown
    一時的な状態です。対向ノードが接続を閉じています。次の状態は Unconnected です。

- Connecting
    対向ノードがネットワーク上で可視になるまでノードが待機します。

- Connected
    DRBDの接続が確立され、データミラー化がアクティブになっています。これが正常な状態です。

### ディスクのステータス

- Diskless
    DRBDドライバにローカルブロックデバイスが割り当てられていません。原因として、リソースが下位デバイスに接続されなかった、 drbdadm detach を使用して手動でリソースを切り離した、または下位レベルのI/Oエラーにより自動的に切り離されたことが考えられます。

- Attaching
    メタデータ読み取り中の一時的な状態です。

- Detaching
    切断され、進行中のIO処理が完了するのを待っている一時的な状態。

- Failed
    ローカルブロックデバイスがI/O障害を報告した後の一時的な状態です。次の状態は Diskless です。

- Negotiating
    すでに Connected のDRBDデバイスで attach が実行された場合の一時的状態です。

- Inconsistent
    データが一致しません。新規リソースを作成した直後に(初期フル同期の前に)両方のノードがこの状態になります。また、同期中には片方のノード(同期先)がこの状態になります。

- Outdated
    リソースデータは一致していますが、無効です。

- DUnknown
    ネットワーク接続を使用できない場合に、対向ノードディスクにこの状態が使用されます。

- Consistent
    接続していない状態でノードのデータが一致しています。接続が確立すると、データが UpToDate か Outdated か判断されます。

- UpToDate
    データが一致していて最新の状態です。これが正常な状態です

### ボリューム/デバイス単位
- read (disk read)
    ローカルディスクから読み取られたネットデータ (kibyte単位)。

- written (disk written)
    ローカルのディスクに書き込んだ正味データ量(kibyte単位)。

- al-writes (activity log)
    メタデータのアクティビティログエリアのアップデート数。

- bm-writes (bitmap)
    メタデータのビットマップエリアのアップデート数。

- upper-pending (application pending)
    まだDRBDから応答がない（完了していない）DRBDへのブロックI/Oリクエスト数。

- lower-pending (local count)
    DRBDが発行したローカルI/Oサブシステムへのオープンリクエストの数。

- blocked
    ローカルI/Oの輻輳を示します。

    - no:輻輳なし
    - uppeer: ファイルシステムなどDRBD より上位 のI/Oがブロックされている。代表的なものには以下がある。
        - 管理者によるI/O中断。 drbdadm コマンドの suspend-io を参照。
        - アタッチ/デタッチ時の一時的なブロック。
        - バッファーの枯渇。DRBDパフォーマンスの最適化 参照。
        - ビットマップIO待ち
    - lower: 下位デバイスの輻輳
    - 上位、下位両方がブロックされている。

### 接続単位

- ap-in-flight (application in-flight)
    対向ノードによって書き込まれているアプリケーションデータ。つまり、DRBD はそれを対向ノードに送信し、書き込まれたという確認応答を待っています。セクター単位（512バイト）。

- rs-in-flight (resync in-flight)
    対向ノードによって書き込まれている同期データ。つまり、DRBD は SyncSource が　同期データを対向ノードに送信し、データが書き込まれたことの確認応答を待っています。セクター単位（512バイト）。

### 接続とボリューム単位 (“peer device”)

- done
    同期されるデータのうち同期されたデータのパーセンテージ。

- resync-suspended
    現在同期が中断されているかどうかを示す。値は no, user, peer, dependency でカンマ区切り。

- received (network receive)
    対向ノードから受信したネットデータ（KiB単位）。

- sent (network send)
    対向ノードへ送信したネットデータ（KiB単位）。

- out-of-sync
    DRBD のビットマップによる現在この対向ノードと同期していないデータ量（KiB単位）。

- pending
    対向ノードに送信されたが、対向ノードによってまだ確認されていないリクエスト数。

- unacked (unacknowledged)
    対向ノードから受信したが、このノードの DRBD によってまだ確認されていないリクエスト数。

- dbdt1
    過去数秒以内の同期速度。単位は MiB/秒。このユーザーズガイドの 同期速度の設定 セクションで説明されているオプションで、同期速度を変更できます。

- eta
    同期が完了するまでの残り秒数。この数値は、過去数秒以内の同期速度と、同期されていないリソースの下位デバイスのサイズに基づいて計算されます。

### 複製ステータス

- Off
    ボリュームはこの接続を通して複製されていません。接続が Connected になっていません。す。次の状態は Unconnected です。

- Established
    このボリュームへのすべての書き込みがオンラインで複製されています。これは通常の状態です。

- StartingSyncS
    管理者により開始されたフル同期が始まっています。次に考えられる状態は SyncSource または PausedSyncS です。

- StartingSyncT
    管理者により開始されたフル同期が始まっています。次の状態は WFSyncUUID です。

- WFBitMapS
    部分同期が始まっています。次に考えられる状態は SyncSource または PausedSyncS です。

- WFBitMapT
    部分同期が始まっています。次に考えられる状態は WFSyncUUID です。

- WFSyncUUID
    同期が開始されるところです。次に考えられる状態は SyncTarget または PausedSyncT です。

- SyncSource
    現在、ローカルノードを同期元にして同期を実行中です。

- SyncTarget
    現在、ローカルノードを同期先にして同期を実行中です。

- PausedSyncS
    ローカルノードが進行中の同期の同期元ですが、現在は同期が一時停止しています。原因として、別の同期プロセスの完了との依存関係、または drbdadm pause-sync を使用して手動で同期が中断されたことが考えられます。

- PausedSyncT
    ローカルノードが進行中の同期の同期先ですが、現在は同期が一時停止しています。原因として、別の同期プロセスの完了との依存関係、または drbdadm pause-sync を使用して手動で同期が中断されたことが考えられます。

- VerifyS
    ローカルノードを照合元にして、オンラインデバイスの照合を実行中です。

- VerifyT
    現在、ローカルノードを照合先にして、オンラインデバイスの照合を実行中です。

- Ahead
    リンクが負荷に対応できないので、データの複製が中断しました。このステータスは on-congestion オプションの設定で有効にできます(輻輳ポリシーと中断したレプリケーションの構成を参照)。

- Behind
    リンクが負荷に対応できないので、データの複製が対向ノードによって中断されました。このステータスは対向ノードの on-congestion オプション設定で有効にできま>す(輻輳ポリシーと中断したレプリケーションの構成を参照)。

## 接続情報データ

- local
    ネットワークファミリ、ローカルアドレス、対向ノードから接続を許可されたポートを表示します。

- peer
    ネットワークファミリ、ローカルアドレス、接続に使用しているポートを表示します。

- congested
    データのTCP送信バッファを80%より多く使用している場合にこのフラグがつきます

## コネクションのステータス

```terminal
$ drbdadm cstate r0
```

## リソースのロール

```terminal
$ drbdadm role r0
```

## ディスクのステータス

```terminal
$ drbdadm dstate r0
```


## ワンショットモニタリング

```terminal
$ drbdsetup events2 --now r0
exists resource name:r0 role:Primary suspended:no force-io-failures:no may_promote:no promotion_score:10103
exists connection name:r0 peer-node-id:1 conn-name:node2 connection:Connected role:Secondary
exists device name:r0 volume:0 minor:0 backing_dev:/dev/sdb disk:UpToDate client:no quorum:yes
exists peer-device name:r0 peer-node-id:1 conn-name:node2 volume:0 replication:Established peer-disk:UpToDate peer-client:no resync-suspended:no
exists path name:r0 peer-node-id:1 conn-name:node2 local:ipv4:192.168.100.101:7789 peer:ipv4:192.168.100.102:7799 established:yes
exists -
```

## リアルタイムモニタリング

```terminal
$ drbdsetup events2 r0
```

## モニタリングの詳細オプション

```terminal
$ drbdsetup events2 --statistics --now r0
```

```terminal
$ drbdsetup events2 --statistics r0
```


## 
# 参考

[Ubuntu 22.04 man page drbdadm](https://manpages.ubuntu.com/manpages/jammy/ja/man8/drbdadm.8.html)
[Ubuntu 22.04 man page drbd](https://manpages.ubuntu.com/manpages/jammy/ja/man8/drbd.8.html)
[Ubuntu 22.04 man page drbdsetup](https://manpages.ubuntu.com/manpages/jammy/ja/man8/drbdsetup.8.html)

[DRBD9 ユーザーズガイド](https://linbit.com/drbd-user-guide/drbd-guide-9_0-ja/)
[LINSTOR ユーザーズガイド](https://linbit.com/drbd-user-guide/linstor-guide-1_0-ja/)

# さいごに

かんたんでしたね