第5章 DRBDの設定

目次

5.1. 下位レベルストレージの準備
5.2. ネットワーク構成の準備
5.3. リソースの設定
5.3.1. 設定例
5.3.2. global セクション
5.3.3. common セクション
5.3.4. resource セクション
5.4. リソースを初めて有効にする
5.5. デバイスの初期同期
5.6. トラックベースのレプリケーションの使用

5.1. 下位レベルストレージの準備

DRBDをインストールしたら、両方のクラスタノードにほぼ同じ容量の記憶領域を用意する必要があります。これがDRBDリソースの 下位レベルデバイス になります。システムの任意のブロックデバイスを下位レベルデバイスとして使用できます。たとえば、次のようなものがあります。

  • ハードドライブのパーティション(または物理ハードドライブ全体)
  • ソフトウェアRAIDデバイス
  • LVM論理ボリュームまたはLinuxデバイスマッパインフラストラクチャによって構成されるその他のブロックデバイス
  • システム内のその他のブロックデバイス。

リソースを積み重ねる こともできます。つまり、DRBDデバイスを他のDRBDデバイスの下位レベルのデバイスとして利用することができます。リソースの積み重ねにはいくつかの注意点があります。詳しくは「3ノード構成の作成」を参照ください。

[注記]注記

ループデバイスをDRBDの下位レベルデバイスとして使用することもできますが、デッドロックの問題があるためお勧めできません。

DRBDリソースを作成する前に、そのストレージ領域を空にしておく必要は ありません。DRBDを使用して、非冗長のシングルサーバシステムから、2ノードのクラスタシステムを作成することは一般的なユースケースですが、いくつか重要な注意点があります。(その場合には)「DRBDメタデータ」を参照ください)

本ガイドの説明は、次のようなとてもシンプルな構成を前提としています。

  • 両ホストには使用可能な(現在未使用の) /dev/sda7 というパーティションがある。
  • 内部メタデータを使用する。

5.2. ネットワーク構成の準備

必須要件ではありませんが、DRBDによるレプリケーションの実行には、専用接続を使用することをお勧めします。この書き込みには、ギガビットイーサネットどうしをケーブルで直結した接続が最適です。DRBDをスイッチを介して使用する場合には、冗長コンポーネントと bonding ドライバ(active-backup モードで)の使用を推奨します。

一般に、ルータを介してDRBDレプリケーションを行うことはお勧めできません。スループットと待ち時間の両方に悪影響を及ぼし、パフォーマンスが大幅に低下します。

ローカルファイアウォールの要件として重要な点は、通常、DRBDは7788以上のTCPポートを使用し、それぞれのTCPリソースが個別のTCPポート上で待機するということです。設定したリソースすべてで、DRBDは 2つ のTCP接続を使用します。これらの接続が許可されるようにファイアウォールを設定する必要があります。

SELinuxやAppArmorなどのMAC (Mandatory Access Control)スキーマが有効な場合は、ファイアウォール以外のセキュリティ要件も適用される場合があります。DRBDが正しく機能するように、 必要に応じてローカルセキュリティポリシーを調整してください。

また、DRBDに使用するTCPポートを別のアプリケーションが使用していないことも確認してください。

複数のTCPポートをサポートするようにDRBDリソースを設定することはできません。DRBD接続に負荷分散や冗長性が必要な場合は、イーサネットレベルで簡単に実現できます(この場合も ボンディング ドライバを使用してください)。

本ガイドの説明は、次のようなとてもシンプルな構成を前提としています。

  • 2つのDRBDホストそれぞれに、現在使用されていないネットワークインタフェース eth1 が存在する(IPアドレスはそれぞれ 10.1.1.3110.1.1.32)
  • どちらのホストでも他のサービスがTCPポート7788〜7799を使用していない。
  • ローカルファイアウォール設定は、これらのポートを介したホスト間のインバウンドとアウトバウンドの両方のTCP接続を許可する。

5.3. リソースの設定

DRBDのすべての機能は、設定ファイル /etc/drbd.conf で制御されます。通常、この設定ファイルは、次のような内容となっています。

include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";

通例、/etc/drbd.d/global_common.conf にはDRBD設定の、globalcommonのセクションが含まれます。また、.res ファイルには各リソースセクションが含まれます。

drbd.confinclude ステートメントを使用せずにすべての設定を記載することも可能です。しかし、設定の見やすさの観点からは、複数のファイルに分割することをお勧めします。

いずれにしても drbd.conf や、その他の設定ファイルは、すべてのクラスタノードで 正確に同じ である必要があります。

DRBDのソースtarファイルの scripts サブディレクトリに、サンプル設定ファイルがあります。バイナリインストールパッケージの場合、サンプル設定ファイルは直接 /etc にインストールされるか、/usr/share/doc/packages/drbd などのパッケージ固有の文書ディレクトリにインストールされます。

このセクションは、DRBDの使用を開始するため、必ず理解しておく必要のある設定ファイルの項目についての説明です。設定ファイルの構文と内容の詳細については、drbd.conf(5)を参照してください。

5.3.1. 設定例

本ガイドでの説明は、前章で挙げた例をもとした最小限の構成を前提としています。

  1. シンプルなDRBD構成例(/etc/drbd.d/global_common.conf)
global {
  usage-count yes;
}
common {
  net {
    protocol C;
  }
}
  1. シンプルなDRBDリソースの構成例(/etc/drbd.d/r0.res)
resource r0 {
  on alice {
    device    /dev/drbd1;
    disk      /dev/sda7;
    address   10.1.1.31:7789;
    meta-disk internal;
  }
  on bob {
    device    /dev/drbd1;
    disk      /dev/sda7;
    address   10.1.1.32:7789;
    meta-disk internal;
  }
}

この例では、DRBDが次のように構成されます。

  • DRBDの使用状況の統計をオプトインとして含める(usage-countを参照).
  • 完全に同期したレプリケーションを使用するようにリソースを設定する(Protocol C)
  • クラスタには2つのノード alicebob がある。
  • 任意の名前 r0 を持つリソースがあり /dev/sda7 下位レベルデバイスとして使用する。このリソースは、内部メタデータによって設定されている。
  • リソースはネットワーク接続にTCPポート7789を使用し、それぞれIPアドレス10.1.1.31と10.1.1.32にバインドされる。

暗黙的に、上記の設定はリソースの1つのボリュームを作成し、ゼロ(0)番号が付与されます。1つのリソースに複数のボリュームを設定する場合には、次のようにします。

  1. 複数ボリュームのDRBDリソース構成例(/etc/drbd.d/r0.res)
resource r0 {
  volume 0 {
    device    /dev/drbd1;
    disk      /dev/sda7;
    meta-disk internal;
  }
  volume 1 {
    device    /dev/drbd2;
    disk      /dev/sda8;
    meta-disk internal;
  }
  on alice {
    address   10.1.1.31:7789;
  }
  on bob {
    address   10.1.1.32:7789;
  }
}
[注記]注記

ボリュームは既存のデバイスの動作中にも追加できます。「新しいDRBDボリュームを既存のボリュームグループへ追加する」を参照ください。

5.3.2. global セクション

このセクションは設定の中で1回しか使用できません。通常この設定は /etc/drbd.d/global_common.conf ファイルに記述します。設定ファイルが1つの場合は、設定ファイルの一番上に記述します。このセクションで使用できるオプションはわずかですが、ほとんどのユーザの場合、必要なのは次の1つだけです。

 +usage-count+
DRBDプロジェクトはさまざまなバージョンのDRBDの使用状況について統計を取ります。これは、システムに新規のDRBDバージョンがインストールされるたびに、HTTPサーバに接続することにより実行されます。これを無効にするには、+usage-count no;+ と指定します。デフォルトは +usage-count ask;+ で、DRBDをアップグレードするたびにプロンプトが表示されます。

DRBDの使用状況の統計は公開されています。http://usage.drbd.orgをご参照ください。

5.3.3. common セクション

このセクションで、各リソースに継承される設定を簡単に定義できます。通常この設定は /etc/drbd.d/global_common.conf に記述します。ここで定義するオプションは、リソースごとに定義することもできます。

common セクションは必須ではありませんが、複数のリソースを使用する場合は、記述することを強くお勧めします。これにより、オプションを繰り返し使用することによって設定が複雑になることを回避できます。

上記の例では、net{ protocol C;}common セクションで指定されているため、設定されているすべてのリソース(r0 含む)がこのオプションを継承します。ただし、明示的に別の protocol オプションが指定されている場合は除きます。使用可能なその他の同期プロトコルについては、「レプリケーションのモード」を参照してください。

5.3.4. resource セクション

各リソースの設定ファイルは、通常 /etc/drbd.d/<resource>.res という名前にします。定義するDRBDリソースは、設定ファイルでresource nameを指定して名前を付ける必要があります。任意の名前を使用できますが、空白を除くUS-ASCII文字セットを使う必要があります。

各リソースには2つの on <host> サブセクションも必要です(各クラスタノードに1つずつ)。その他すべての設定は common セクション(記述した場合)から継承されるか、DRBDのデフォルト設定から取得されます。

さらに、オプションの値が両方のホストで等しい場合は、直接 resource セクションで指定することができます。このため、設定例は次のように短くすることができます。

resource r0 {
  device    /dev/drbd1;
  disk      /dev/sda7;
  meta-disk internal;
  on alice {
    address   10.1.1.31:7789;
  }
  on bob {
    address   10.1.1.32:7789;
  }
}

5.4. リソースを初めて有効にする

すでに述べた手順に従って最初のリソース設定を完了したら、リソースを稼働させます。

両方のノードに対して、次の手順を行います。

さきほどの構成例(resource r0{ … })では、<resource>r0 となります。

メタデータを作成する. この手順は、最初にデバイスを作成するときにのみ必要です。これにより、DRBDのメタデータを初期化します。

# drbdadm create-md <resource>
v08 Magic number not found
Writing meta data...
initialising activity log
NOT initializing bitmap
New drbd meta data block sucessfully created.

リソースを有効にする. これにより、リソースとそのバッキングデバイス(マルチボリュームリソースの場合は、すべてのデバイス)とを結びつけます。また、対向ノードのリソースと接続します。

# drbdadm up <resource>

Observe /proc/drbd. /proc ファイルシステムにあるDRBDの仮想状態ファイル /proc/drbd ,に次のような情報が記述されています。

# cat /proc/drbd
version: 8.4.1 (api:1/proto:86-100)
GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by buildsystem@linbit, 2011-12-20 12:58:48
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:524236
[注記]注記

この時点では Inconsistent/Inconsistent のディスク状態になっているはずです。

これで、DRBDがディスクリソースとネットワークリソースに正しく割り当てられ、稼働できるようになりました。次に、どちらのノードをデバイスの初期同期のソースとして使用するか指定する必要があります。

5.5. デバイスの初期同期

DRBDを完全に機能させるには、さらに次の2つの手順が必要です。

同期元を選択する. 新しく初期化した空のディスクを使用する場合は、任意のディスクを同期元にできます。いずれかのノードにすでに重要なデータが格納されている場合は、十分注意して 必ずそのノードを同期元として選択してください。デバイスの初期同期の方向が誤っていると、データを失うおそれがあります。慎重に行ってください。

初期フル同期を開始する. この手順は、最初のリソース設定の際に、同期ソースとして選択した1つのノードに対してのみ実行します。次のコマンドで実行します。

# drbdadm primary --force <resource>

このコマンドを指定すると、初期フル同期が開始します。/proc/drbd で同期の進行状況を監視できます。デバイスのサイズによっては、同期に時間がかかる場合があります。

この時点で、初期同期が完了していなくてもDRBDデバイスは完全に稼働します。(ただし、パフォーマンスはいくらか低いです。)次に、デバイスのファイルシステムを作成します。これを下位ブロックデバイスとして使用し、マウントして、アクセス可能なブロックデバイスでさまざまな操作を実行することができます。

リソースに対して一般的な管理タスクを行う場合は、6章一般的な管理作業に進んでください。

5.6. トラックベースのレプリケーションの使用

リモートノードに同期するデータを前もってロードし、デバイスの初期同期をスキップする場合は、次の手順を行います。

これは、ローカルノードに設定済みだが接続されていないプライマリロールのDRBDリソースがあることを前提とします。つまり、デバイスの設定が完了し、両方のノードに同一の drbd.conf のコピーが存在し最初のリソース昇格をローカルノードで実行するコマンドを発行したが、リモートノードがまだ接続されていない状態です。

  • ローカルノードで次のコマンドを実行します。
# drbdadm new-current-uuid --clear-bitmap <resource>
  • リソースのデータ およびそのメタデータ の正確に同一のコピーを作成します。たとえば、ホットスワップ可能なRAID-1ドライブの一方を抜き取ります。この場合は、もちろん新しいドライブをセットしてRAIDセットを再構築しておくべきでしょう。抜き取ったドライブは、正確なコピーとしてリモートサイトに移動できます。別の方法としては、ローカルのブロックデバイスがスナップショットコピーをサポートする場合(LVMの上位でDRBDを使用する場合など)は、dd を使用してスナップショットのビット単位のコピーを作ってもかまいません。
  • ローカルノードで次のコマンドを実行します。
# drbdadm new-current-uuid <resource>

この2回目のコマンドには --clear-bitmap がありません。

  • 対向ホストの設置場所にコピーを物理的に移動します。
  • コピーをリモートノードに追加します。ここでも物理ディスクを接続するか、リモートノードの既存のストレージに移動したデータのビット単位のコピーを追加します。レプリケートしたデータだけでなく、関連するDRBDメタデータも必ず復元するかコピーしてください。そうでない場合、ディスクの移動を正しく行うことができません。
  • リモートノードで次のコマンドを実行します。
# drbdadm up <resource>

2つのホストを接続しても、デバイスのフル同期は開始されません。代わりに、drbdadm --clear-bitmap new-current-uuid の呼び出し以降に変更されたブロックのみを対象とする自動同期が開始します。

以降、データの変更が 全くない 場合でも、アクティビティログの領域が含まれるため、それの同期が短時間行われます。これはチェックサムベースの同期を使用することで緩和されます。

この手順は、リソースが通常のDRBDリソースの場合でもスタックリソースの場合でも使用できます。スタックリソースの場合は、-S または --stacked オプションを drbdadm に追加します。