目次
この章では、DRBDの内部アルゴリズムと内部構造について、 いくつかの背景情報を取り上げます。 これは、DRBDの背景について関心のあるユーザが対象です。 DRBD開発者が参考にできるほど深い内容には踏み込んでいません。 開発者の方は「資料」に記載された文書や DRBDのソースコードのコメントを参照してください。
DRBDには、専用領域に格納されるデータに関するさまざまな情報が格納されています。 このメタデータには次のようなものがあります。
DRBDデバイスのサイズ
GI (Generation Identifier: 世代識別子) (詳細は「世代識別子」を参照)
AL (Activity Log: アクティビティログ) (詳細は「アクティビティログ」を参照)
クイック同期ビットマップ(詳細は「クイック同期ビットマップ」を参照)
このメタデータは内部または外部に格納されます。 いずれの方法で格納するかは、リソースごとに設定できます。
内部メタデータを使用するようにリソースを設定すると、 DRBDはメタデータを実際の本稼働データと同じ下位レベルの物理デバイスに格納します。 デバイスの末尾の領域がメタデータを格納するための領域として確保されます。
メリット. メタデータは実際のデータと密接にリンクされているため、 ハードディスクに障害が発生しても、管理者は特に何かする必要はありません。 メタデータは実際のデータとともに失われ、ともに復元されます。
デメリット. RAIDセットではなく、下位レベルデバイスが唯一の物理ハードディスクの場合は、 内部メタデータが原因で書き込みスループットが低下することがあります。 アプリケーションによる書き込み要求の実行により、 DRBDのメタデータの更新が引き起こされる場合があります。 メタデータがハードディスクの同じ磁気ディスクに格納されている場合は、 書き込み処理によって、ハードディスクの書き込み/読み取りヘッドが2回余分に動作することになります。
![]() | 注意 |
|---|---|
内部メタデータと既存の下位レベルデバイスを一緒に使用し、 このデバイスに保持したいデータがすでに格納されている場合は、 DRBDのメタデータに必要な領域を必ず確保してください。 そうでない場合、DRBDリソースの作成時に、 新しく作成されるメタデータによって下位レベルデバイスの末尾のデータが上書きされ、 既存のファイルが破損する可能性があります。 以下のいずれかの方法でこれを避けることができます。
下位レベルデバイスをどの程度拡張するか、 またはファイルシステムをどの程度縮小するかについては、 「メタデータサイズの見積り」を参照してください。 |
外部メタデータは、本稼働データを格納するものとは異なる 個別の専用ブロックデバイスに格納されます。
メリット. 一部の書き込み処理では、外部メタデータを使用することにより、 待ち時間をいくらか短縮できます。
デメリット. メタデータが実際の本稼働データに密接にリンクされません。 つまり、ハードウェア障害により本稼働データだけが破損し、 DRBD メタデータは破損していない場合でも、手動による介入が必要です。 生き残ったノードから切り替えるディスクに、手動でデータの完全同期を行う必要があります。
次のすべての項目に該当する場合は、外部メタデータを使用する以外ありません。
DRBDを使用して、保持したいデータがすでに格納されている既存デバイスを複製している。 さらに
この既存デバイスが拡張をサポートしていない。 さらに
デバイスの既存のファイルシステムが縮小をサポートしていない。
デバイスのメタデータを格納する専用ブロックデバイスが必要とするサイズについては、 「メタデータサイズの見積り」を参照してください。
次の式を使用して、DRBDのメタデータに必要な領域を正確に計算できます。
Cs は
セクタ単位のデータデバイスサイズです。
![]() | 注意 |
|---|---|
デバイスサイズは、
blockdev --getsz |
結果のMsもセクタ単位です。
MBに変換する場合は2048で割ります(s390を除くすべてのLinuxプラットフォームの場合)。
実際には、次の計算で得られる大まかな見積りで十分です。 この式では、単位はセクタではなくメガバイトです。