DRBDのオンラインデータ照合

本BlogページではDRBDのverify機能について最新の情報を紹介します。DRBDのverifyは、データの一貫性を確認するための重要な機能です。

DRBDのverify機能とは?

verify機能は、DRBDでレプリケートされたデータが正確に同期しているかどうかをチェックする機能です。これは、意図しないデータの不一致やデータの破損が発生した場合に非常に有用です。verifyプロセスは、ディスク上のデータブロックのチェックサムを比較し、不一致がある場合にはそれを報告します。

定期的な実行のほか、バックアップからリストアしたデータに不一致がないか確認する目的でも利用できます。

オンライン検証の有効化

リソースのオンライン デバイス検証は、デフォルトでは有効になっていません。有効にするには、/etc/drbd.d内の設定ファイル のリソース構成に次の行を追加します:

resource <resource>
    net {
        verify-alg <アリゴリズム>;
    }
...
}

<アリゴリズム>は、システムのカーネル構成でカーネル暗号化 API によってサポートされている任意のメッセージ ダイジェスト アルゴリズムです。通常は、sha1、md5、crc32c などから選択できます。

既存のリソースにこの変更を加える場合は、設定ファイル を他ノードにコピーし、両方のノードで drbdadm adjust <リソース名>を実行します。

verifyの使用方法

verify機能を使用するには、以下のコマンドを実行します。

drbdadm verify <リソース名>

このコマンドにより、指定したリソースに対してデータの整合性チェックが開始されます。verifyプロセスが完了すると、結果がDRBDのログに記録されます。

verifyプロセスの監視

verifyプロセスの進行状況や結果を確認するためには、以下のコマンドを使用します。

drbdadm status <リソース名>

このコマンドを実行することで、verifyプロセスの進捗が確認でき、このように表示されます。

[root@node1 ~]# drbdadm status r0
r0 role:Secondary
  disk:UpToDate
  node2 role:Secondary
    replication:VerifyS peer-disk:UpToDate done:6.31

不一致ブロックの数などの情報は/var/log/messagesに記録されます。

[root@node1 ~]# cat /var/log/messages
・・・・
Aug  2 10:44:50 node1 kernel: drbd r0/0 drbd0 node2: Starting Online Verify from sector 0
Aug  2 10:45:11 node1 kernel: drbd r0/0 drbd0 node2: Out of sync: start=4194144, size=160 (sectors)
Aug  2 10:45:31 node1 kernel: drbd r0/0 drbd0 node2: Online verify done (total 41 sec; paused 0 sec; 102296 K/sec)
Aug  2 10:45:31 node1 kernel: drbd r0/0 drbd0 node2: Online verify found 20 4k blocks out of sync!
・・・・

不一致ブロックの修復

検証の実行中に同期されていないブロックが検出された場合は、検証が完了した後に次のコマンドを使用してそれらを再同期できます。

drbd-9.0.29 以降では、次のコマンドのいずれかが推奨されます。

drbdadm invalidate <リソース名> --reset-bitmap=no
drbdadm invalidate-remote <リソース名> --reset-bitmap=no

最初のコマンドにより、ローカルの差異がリモート バージョンによって上書きされます。 2 番目のコマンドは、逆方向に実行します。

invalidateを実行するのはデータを破棄するノードです。アクティブなノードで実行するとスタンバイノードの不一致ブロックで正しいデータが上書きされてしまいます。

drbd-9.0.29 より前のバージョンでは、再同期を開始する必要があります。これを行うには、プライマリから切断し、ピアが離れている間にプライマリが少なくとも 1 つのブロックを変更するようにします。

drbdadm disconnect <リソース名>
## プライマリに 1 つのブロックを書き込む
drbdadm connect <リソース名>

オンライン検証の自動化

Verify機能をcronで自動的に実行することもできます。システムの利用頻度の少ない時間にdrbdadm verify <リソース>を実行して、ログに記録されるOut of sync:を監視するというような運用もできます。

まとめ

DRBDのverify機能は、データの一貫性を確保するための強力なツールです。定期的なverifyの実行により、データの整合性を維持し、問題が発生した際には迅速に対応することが可能です。システムの信頼性を高めるために、この機能を活用してください。