DRBDの再同期の速度制御のパラメータ

DRBDの初期設定や、片方のノードが長時間停止したあとDRBDの通信が回復した時、データの同期が発生します。これはバックグランド同期と呼ばれ、アプリケーションによるデータ更新時に発生する同期(フォアグランド同期)とは別に動作します。今回のブログでは、この同期に影響する通信制御のパラメータについて解説します。

DRBDの設定ファイルでは以下のパラメータがバックグランド同期の制御に有効です。

resync-rate
説明: 再同期に使用する固定帯域幅。動的制御が無効の場合のみ有効。
デフォルト値: 250 KiB/s
推奨値: 固定速度で再同期を行いたい場合にのみ設定。一般的には動的制御の方が効果的。

c-plan-ahead
説明: DRBDが再同期中に予測して速度調整を行う時間範囲を定義します。設定値が大きいほど、再同期速度の変化に対して余裕を持って対応する。一般的には、ネットワークの往復時間(RTT)の5倍以上の値に設定することが推奨される。
デフォルト値: 20(0.1秒単位)
推奨値: 20(ほとんどの場合デフォルトで十分)

c-delay-target
説明: 再同期中の目標遅延時間を設定。ネットワーク往復時間の5倍以上が推奨。
デフォルト値: 10(0.1秒単位)
推奨値: ネットワークの状況に応じて調整。デフォルトが一般的に最適。

c-fill-target
説明: 再同期データをどれくらいバッファに保持するかを決定。DRBDプロキシを使用する場合に特に重要。
デフォルト値: 100(セクタ単位)
推奨値: デフォルトを維持するか、ネットワーク帯域幅に合わせて調整。

c-max-rate
説明: 再同期で使用する最大帯域幅を制限。
デフォルト値: 102400 KiB/s
推奨値: 利用可能なネットワークまたはディスクの帯域幅に合わせて設定。制限を設けたくない場合はゼロに設定する。

c-min-rate
説明: 再同期時の最小帯域幅。バックグランド同期が実行されている場合、アプリケーションの書き込みの速度はこの値だけ低下する。
デフォルト値: 250 KiB/s
推奨値: デフォルトを維持するのが安全である。再同期を優先する場合は増やす。

DRBDの設定ではこのように記述されます。

    volume 0 {
        disk {
            resync-rate         250k; # bytes/second, default
            c-plan-ahead        20; # 1/10 seconds, default
            c-delay-target      10; # 1/10 seconds, default
            c-fill-target       100s; # bytes, default
            c-max-rate          102400k; # bytes/second, default
            c-min-rate          250k; # bytes/second, default
            bitmap              yes; # default
        }
    }

バックグランド同期の速度は3つの制御モードが使用可能です

1.フィル・ターゲットによる動的制御(デフォルト)
  有効条件: c-plan-ahead がゼロ以外かつ c-fill-target がゼロ以外
  目的: データパスのバッファーを定義されたデータ量で埋めること
  推奨用途: DRBDプロキシを使用する場合に最適
  設定パラメータ: c-plan-ahead, c-fill-target, c-max-rate, c-min-rate

2.遅延ターゲットによる動的制御
  有効条件: c-plan-ahead がゼロ以外で c-fill-target がゼロの場合
  ゴール: データパスで定義された遅延を維持すること
  設定パラメータ: c-plan-ahead, c-delay-target, c-max-rate, c-min-rate

3.固定レート再同期
  有効条件: c-plan-ahead がゼロの場合
  ゴール: 固定速度で再同期を実行
  設定パラメータ: resync-rate

最後の固定レート再同期は、過去のDRBDとの互換のために残されたパラメータで、フィル・ターゲットか遅延ターゲットによる動的制御を使用します。この場合c-plan-aheadは0以外の値で、デフォルト値の20のままお使い下さい。c-fill-target 100s;と設定した場合、この100セクター分のデータが常に再同期のためにバッファリングされるという意味になります。

  • 1セクターが512バイトの場合、100セクターは51200バイト(約50KB)となります。
  • 1セクターが4KBの場合、100セクターは409600バイト(約400KB)となります。

セクターサイズによって再同期に使われるデータの量が変わるため、システムのディスク構成に応じた設定が必要になります。

フィル・ターゲットでの制御ではc-fill-targetが約400KBの場合、バックグランド同期の速度はc-max-rateで設定した値になりますが、バッファリングされたデータが400KBを超えると、c-min-rateに設定した帯域幅に絞られます。

遅延ターゲットでの制御ではc-delay-target 10;と設定した場合、DRBDは1秒の遅延を目標として再同期を行います。バックグランド同期の速度はc-max-rateで設定した値になりますが、遅延が1秒を超えるとc-min-rateに設定した帯域幅に絞られます。

このようにDRBDはバックグランド同期の設定パラメータによって、再同期の速度を調整することができ、迅速なデータ復旧が可能になります。