目次
この章では、DRBDのスループットの最適化について説明します。スループットを最適化するためのハードウェアに関する検討事項と、チューニングを行う際の詳細な推奨事項について取り上げます。
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
ネットワークドライバを使用して実現できます。
DRBDに関連するスループットオーバヘッドを見積もる際には、必ず次の制限を考慮してください。
理論上の最大スループットは上記の小さい方によって決まります。この最大スループットはDRBDのスループットオーバヘッドが加わることにより低下しますが、 これは3%未満だと考えられます。
DRBDには、システムのスループットに影響する可能性があるいくつかの構成オプションがあります。ここでは、スループットを向上させるための調整について、いくつかの推奨事項を取り上げます。ただし、スループットは主としてハードウェアに依存するため、ここで取り上げるオプションを調整しても、効果はシステムによって大きく異なります。パフォーマンスチューニングについて、必ず効く「特効薬」は存在しません。
これらのオプションはセカンダリノードの書き込みパフォーマンスに影響します。max-buffers
はディスクにデータを書き込むためにDRBDが割り当てるバッファの最大数で、max-epoch-size
は、2つの書き込みバリア間で許容される書き込み要求の最大数です。ほとんどの状況では、この2つのオプションを並行して同じ値に設定するのが適切です。パフォーマンスを上げるためには
max-buffers
は max-epoch-size
以上でなければなりません。デフォルト値は両方とも2048です。比較的高パフォーマンスのハードウェアRAIDコントローラの場合、この値を8000程度に設定すれば十分です。
resource <resource> { net { max-buffers 8000; max-epoch-size 8000; ... } ... }
I/Oアンプラグ境界値は、正常動作中にI/Oサブシステムのコントローラが「キックされる」(保留されたI/O要求を強制的に処理する)頻度に影響します。このオプションはハードウェアに大きく依存するため、一般的な推奨値はありません。
コントローラによっては、頻繁に「キックされる」とパフォーマンスが向上する場合があり、こうしたコントローラにはこの値を比較的小さく設定すると効果的です。DRBDで許容される最小値(16)まで小さくすることも可能です。キックされないほうがパフォーマンスが高くなるコントローラの場合は、この値を
max-buffers
と同じ値まで大きくすることをお勧めします。
resource <resource> { net { unplug-watermark 16; ... } ... }
TCP送信バッファは送信TCPトラフィックのメモリバッファです。デフォルトサイズは128KiBです。高スループットネットワーク (専用ギガビットイーサネット、負荷分散ボンディング接続など)で使用する場合は、このサイズを512KiBかそれ以上に設定すると効果があるでしょう。送信バッファサイズを2MiB以上にすることは一般にはお勧めできません。 また、スループットが向上する可能性もありません。
resource <resource> { net { sndbuf-size 512k; ... } ... }
TCP送信バッファの自動調整もサポートされます。この機能を有効にすると、DRBDが適切なTCP送信バッファサイズを動的に選択します。TCP送信バッファの自動調整を有効にするには、次のようにバッファサイズをゼロに設定します。
resource <resource> { net { sndbuf-size 0; ... } ... }
DRBDを使用するアプリケーションが、デバイス全体に分散した小さな書き込みを頻繁に発行する、書き込み集約型の場合は、十分に大きなアクティビティログを使用することをお勧めします。そうでない場合、頻繁なメタデータ更新により書き込みパフォーマンスが低下する可能性があります。
resource <resource> { disk { al-extents 3389; ... } ... }