DRBDの同期速度自動調節機能について(Part 2)

two_gear_XS2

DRBDの同期速度自動調節機能について、以前からサードウェアのサイトにて同期速度自動調整機能(8.3.9以降)の紹介の記事を公開しています。内容はDRDB開発元のLINBITブログに掲載された記事を日本語化して一部注釈をつけたものです。その後、翻訳元のLINBITブログでアップデート記事が公開されましたが、この記事の日本語化が遅れておりました。投稿内容は数年前のものではありますが、日本語による本機能の詳細な紹介記事はほとんどない状況ですので、日本語に翻訳して本ブログで公開します。


注意:これは再同期(ノードやネットワーク障害後の回復)に関してであり、レプリケーションについての記事ではありません。

以前の固定同期速度には、次のような問題点がありました。たとえばギガビットNICでrate 100M;を指定すると、DRBDは可能であればネットワーク帯域をすべて同期に割り当てます。こうなると、同期中、アプリケーションによる新しい書き込みが大幅にスローダウンします。同期はなるべく短時間で終わらせたいので大きなrate値を指定したいわけですが、これが同期中のアプリケーションのパフォーマンス低下を招く、というジレンマがあったわけです。この問題に対処するために、アプリケーション書き込みのレプリケーションの量に応じて同期速度を動的に増減する機能が実装されました。

動的な同期速度調整機能は、DRBD 8.4ではデフォルトで有効で、DRDB 8.3ではデフォルトで無効になっています。明示的に有効または無効にするには、c-plan-aheadを20(有効)から0(無効)にしてください。

この機能が有効になっていると、従来の固定レート(DRBD 8.3のrate、DRBD 8.4のresync-rate)は、調節機能の初期推定値としてのみ使用されます。その後はc-*の設定のみが使用されます。そのため調整機能が有効の時は、固定レートを変更してもあまり意味がありません。

仕様

動的同期速度調節機能は、ネットワークとディスク帯域をc-max-rate以下の値で最大限確保しようとします。また、以下の場合には減速させます。

  • c-fill-targetの量よりも多くの同期リクエストがあるとき (※c-fill-targetが0の場合には、対向からの推定応答遅延速度がc-delay-target以上の場合)
  • アプリケーションI/O(書き込みまたは読み込み)を検出し、推定同期速度がc-min-rateを上回るとき (※c-min-rateが0でなければ)

DRBD 8.4のデフォルトのc-min-rateは250kiB/secです。(旧来の固定の同期速度と同じ)。DRBD 8.3のデフォルトのc-min-rateは4MiB/secです。

固定同期速度(resync-rate)が使用されている場合でも「アプリケーションI/Oを検出したら減速する」動作が起こります。c-min-rateを0にすることで減速機能を(すべきではありませんが)無効にすることができます。

同期速度調節機能のチューニング方法

バックエンドが制御可能な処理がどの程度であるのかをDRBDが検知するのは不可能と言っていいほど困難です。しかし、DRBDが自身でどの程度の再同期処理を行ったかを検知することは可能です。したがって、どの程度の再同期処理をアプリケーションの処理中に許可するかをチューニングするということになります。

手順

  1. c-plan-aheadを20(DRBD 8.4のデフォルト)か、(プロトコルAで)接続に遅延が大きければそれ以上にする。
  2. 調節機能の初期推定値に使用する固定同期速度を、ハードウェア性能の30%以下にする。
  3. c-max-rateをハードウェア性能の100%またはそれ以上に設定する。
  4. c-fill-targetをシステムがアイドルでない場合にシステムが飽和する最小(必要最小限)にする。システムのアイドル時において可能性のある最大の同期速度を算出し、c-fill-targetをその速度に達する最小の値に設定する。
  5. 最後に、アプリケーションリクエストの遅延/応答をチェックしながら、c-min-rateを許容できる応答速度の最大値に調節する。