第15章 DRBDのスループット最適化

目次

15.1. ハードウェアの検討事項
15.2. スループットオーバヘッドの予測
15.3. チューニングの推奨事項
15.3.1. max-buffersmax-epoch-size の設定
15.3.2. I/Oアンプラグ境界値の調整
15.3.3. TCP送信バッファサイズの調整
15.3.4. アクティビティログサイズの調整
15.3.5. バリアとディスクフラッシュを無効にする

この章では、DRBDのスループットの最適化について説明します。スループットを最適化するためのハードウェアに関する検討事項と、チューニングを行う際の詳細な推奨事項について取り上げます。

15.1. ハードウェアの検討事項

DRBDのスループットは、配下のI/Oサブシステム(ディスク、コントローラおよび対応するキャッシュ)の帯域幅とレプリケーションネットワークの帯域幅の両方の影響を受けます。

I/Oサブシステムのスループット. I/Oサブシステムのスループットは、主に平行して書き込み可能なディスクの数によって決まります。比較的新しいSCSIまたはSASディスクの場合、一般に1つのディスクに約40MB/sでストリーミング書き込みを行うことができます。ストライピング構成で配備する場合は、I/Oサブシステムにより書き込みがディスク間に並列化されます。 この場合、スループットは、1つのディスクのスループットに構成内に存在するストライプの数を掛けたものになります。RAID-0またはRAID-1+0構成で、 3つのストライプがある場合は同じ40MB/sのディスクのスループットが120MB/sになり、5つのストライプがある場合は200MB/sになります。

[注記]注記

ハードウェアのディスク ミラーリング (RAID-1)は、一般にスループットにはほとんど影響ありません。ディスクの パリティ付きストライピング (RAID-5)はスループットに影響し、通常はストライピングに比べてスループットが低下します。

ネットワークのスループット. ネットワークスループットは一般にネットワーク上に存在するトラフィック量と経路上にあるルータやスイッチなどのスループットによって決定されます。ただし、DRBDのレプリケーションリンクは通常は専用の背面間ネットワーク接続であるため、これらはあまり関係がありません。したがって、ネットワークのスループットを向上させるには、高スループットのプロトコル(10ギガビットイーサネットなど)に切り換えるか、複数のネットワークリンクからなるリンク集積体を使用します。後者はLinux bonding ネットワークドライバを使用して実現できます。

15.2. スループットオーバヘッドの予測

DRBDに関連するスループットオーバヘッドを見積もる際には、 必ず次の制限を考慮してください。

  • DRBDのスループットは下位I/Oサブシステムのスループットにより制限される。
  • DRBDのスループットは使用可能なネットワーク帯域幅により制限される。

理論上の 最大 スループットは上記の 小さい方 によって決まります。この最大スループットはDRBDのスループットオーバヘッドが加わることにより低下しますが、 これは3%未満だと考えられます。

  • たとえば、200MB/sのスループットが可能なI/Oサブシステムを持つ2つのクラスタノードが、 ギガビットイーサネットリンクで接続されているとします。TCP接続の場合、ギガビットイーサネットのスループットは110MB/s程度だと考えられるため、 この構成ではネットワーク接続が律速要因になります。DRBDの最大スループットは107MB/s程度になるでしょう。
  • 一方、I/Oサブシステムの持続した書き込みスループットが100MB/s程度の場合は、これが律速要因となり、DRDBの最大スループットはわずか97MB/sになります。

15.3. チューニングの推奨事項

DRBDには、システムのスループットに影響する可能性があるいくつかの構成オプションがあります。ここでは、スループットを向上させるための調整について、いくつかの推奨事項を取り上げます。ただし、スループットは主としてハードウェアに依存するため、ここで取り上げるオプションを調整しても、効果はシステムによって大きく異なります。パフォーマンスチューニングについて、必ず効く「特効薬」は存在しません。

15.3.1. max-buffersmax-epoch-size の設定

これらのオプションはセカンダリノードの書き込みパフォーマンスに影響します。max-buffers はディスクにデータを書き込むためにDRBDが割り当てるバッファの最大数で、max-epoch-size は、2つの書き込みバリア間で許容される書き込み要求の最大数です。ほとんどの状況では、この2つのオプションを並行して同じ値に設定するのが適切です。パフォーマンスを上げるためには max-buffersmax-epoch-size 以上でなければなりません。デフォルト値は両方とも2048です。比較的高パフォーマンスのハードウェアRAIDコントローラの場合、この値を8000程度に設定すれば十分です。

resource <resource> {
  net {
    max-buffers 8000;
    max-epoch-size 8000;
    ...
  }
  ...
}

15.3.2. I/Oアンプラグ境界値の調整

I/Oアンプラグ境界値は、正常動作中にI/Oサブシステムのコントローラが「キックされる」(保留されたI/O要求を強制的に処理する)頻度に影響します。このオプションはハードウェアに大きく依存するため、一般的な推奨値はありません。

コントローラによっては、頻繁に「キックされる」とパフォーマンスが向上する場合があり、こうしたコントローラにはこの値を比較的小さく設定すると効果的です。DRBDで許容される最小値(16)まで小さくすることも可能です。キックされないほうがパフォーマンスが高くなるコントローラの場合は、この値を max-buffers と同じ値まで大きくすることをお勧めします。

resource <resource> {
  net {
    unplug-watermark 16;
    ...
  }
  ...
}

15.3.3. TCP送信バッファサイズの調整

TCP送信バッファは送信TCPトラフィックのメモリバッファです。デフォルトサイズは128KiBです。高スループットネットワーク (専用ギガビットイーサネット、負荷分散ボンディング接続など)で使用する場合は、このサイズを512KiBかそれ以上に設定すると効果があるでしょう。送信バッファサイズを2MiB以上にすることは一般にはお勧めできません。 また、スループットが向上する可能性もありません。

resource <resource> {
  net {
    sndbuf-size 512k;
    ...
  }
  ...
}

TCP送信バッファの自動調整もサポートされます。この機能を有効にすると、DRBDが適切なTCP送信バッファサイズを動的に選択します。TCP送信バッファの自動調整を有効にするには、次のようにバッファサイズをゼロに設定します。

resource <resource> {
  net {
    sndbuf-size 0;
    ...
  }
  ...
}

15.3.4. アクティビティログサイズの調整

DRBDを使用するアプリケーションが、デバイス全体に分散した小さな書き込みを頻繁に発行する、書き込み集約型の場合は、十分に大きなアクティビティログを使用することをお勧めします。そうでない場合、頻繁なメタデータ更新により書き込みパフォーマンスが低下する可能性があります。

resource <resource> {
  disk {
    al-extents 3389;
    ...
  }
  ...
}

15.3.5. バリアとディスクフラッシュを無効にする

[警告]警告

次に取り上げる推奨事項は、不揮発性(バッテリでバックアップされた)のコントローラキャッシュのあるシステムで のみ で適用されます。

バッテリでバックアップされた書き込みキャッシュを持つシステムには、停電時にデータを保護する機能が組み込まれています。その場合は、同じ目的を持つDRBD自体の保護機能の一部を無効にすることもできます。これはスループットの面で有効な場合があります。

resource <resource> {
  disk {
    disk-barrier no;
    disk-flushes no;
    ...
  }
  ...
}