DRBDの再同期の速度制御のパラメータ
DRBDの初期設定や、DRBD間の通信が長時間停止したあと回復した時、データの同期が発生します。これはバックグランド同期と呼ばれ、アプリケーションによるデータ更新時に発生する同期(フォアグランド同期)とは別に動作します。今回のブログでは、この同期に影響する通信制御のパラメータについて解説します。
DRBDの設定ファイルでは以下のパラメータがバックグランド同期の制御に有効です。
resync-rate
説明: 再同期に使用する固定帯域幅。動的制御が無効の場合のみ有効。
デフォルト値: 250 KiB/s
推奨値: 固定速度で再同期を行いたい場合にのみ有効。その場合はc-plan-aheadをゼロに設定する。
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 がゼロの場合
ゴール: 固定速度で再同期を実行
設定パラメータ: 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はバックグランド同期の設定パラメータによって、再同期の速度を調整することができ、迅速なデータ復旧が可能になります。