望ましいスイッチオーバー動作を実現するために、ロードバランサーのヘルスチェックパラメーターを調整する必要がある場合があります。パラメーターを調整する必要のある典型的な問題が3つあります。

  1. 正常のしきい値 が高く設定されすぎているため、スイッチオーバー完了後でも新アクティブノードが正常と判断されず、トラフィックがルーティングされない。
  2. 異常のしきい値 が低く設定されすぎているため、ロードバランサーが一時的なサーバーリソースの制限やネットワークの中断に対して過敏になっている。
  3. 異常のしきい値 が高く設定されすぎているため、スイッチオーバー完了後でも旧アクティブノードが異常と判断されず、トラフィックがルーティングされ続ける。

クラウドのロードバランサーでは、一般的に4つのヘルスチェックパラメーターを調整することができます。

  • ヘルスチェック間隔
    ヘルスチェックサーバーがヘルスチェックプローブをバックエンドサーバーに送信する間隔
  • タイムアウト
    ヘルスチェックサーバーが、ヘルスチェックプローブが失敗したと見なす前に応答の受信を待機する時間
  • 正常のしきい値
    異常なバックエンドサーバーが正常と判定されるために必要な、ヘルスチェックプローブの連続した成功回数
  • 異常のしきい値
    正常なバックエンドサーバーが異常と判定されるために必要な、ヘルスチェックプローブの連続した失敗回数

各パラメーターの詳細については、各クラウドプラットフォームの公式ドキュメントをご覧ください。

これらのパラメーターから、次の値が導出できます。

  • 正常と判定されるまでの時間 = ヘルスチェック間隔 × (正常のしきい値 – 1)
    バックエンドサーバーとヘルスチェックサーバー間のネットワークレイテンシーが低いと仮定した場合の、正常なサーバーの最初のヘルスチェックプローブ後、ロードバランサーによって正常と判定されるまでの時間
  • 異常と判定されるまでの最大時間 = ヘルスチェック間隔 × 異常のしきい値 + タイムアウト
    障害が発生したサーバーがロードバランサーによって異常と判定されるまでの最大時間

これらのパラメーターの正確な値は環境によって異なりますが、いくつかの一般的なガイドラインを以下に示します。

ヘルスチェック間隔正常のしきい値 の組み合わせが高すぎると、スイッチオーバーまたはフェイルオーバー後にロードバランサーがアクティブノードへのトラフィックのルーティングを開始するのに必要以上に長い時間がかかり、アプリケーションの回復に時間がかかります。ほとんどの場合、 正常のしきい値 = 2 回連続成功 を設定するのが適切です。

ヘルスチェック間隔異常のしきい値 の組み合わせが低すぎると、一時的なサーバーリソースの制限やネットワークの問題に対して過敏なロードバランサーになる可能性があります。たとえば、 タイムアウト = 1秒異常のしきい値 = 1回 の失敗 などの極端な値を設定すると、ネットワークが数秒間応答しなくなった場合でも、バックエンドサーバーが異常と判定されます。これはクラウド環境では珍しいことではありません。ロードバランサーが一時的でマイナーな問題に対応できるように、タイムアウトを適切な値(例:5秒)にしておくことをお勧めします。

一方で、 ヘルスチェック間隔異常のしきい値 の組み合わせが高すぎると、スイッチオーバー後にロードバランサーが旧アクティブノードを異常と判断するのに時間がかかり、アクティブノードとスタンバイノードの両方にロードバランサーのトラフィックがルーティングされる時間が発生します。このような状況を回避するためには、リソース階層を何度かスイッチオーバーして、旧アクティブノードで LB Health Check リソースが Out-of-Service になってから新アクティブノードで In-Service になるまでの最短時間を測定することが推奨されます。
クラスターノード間で時刻が同期していると仮定すると、各ノードの /var/log/lifekeeper.log を調べ、旧アクティブノードでの LB Health Check remove スクリプトの終了から新アクティブノードでのLB Health Check restore スクリプトの終了までの時間を確認することによって、この時間を求めることができます。この時間(秒)を Minimum LB Health Check Switchover Time (最小 LB Health Check スイッチオーバー時間) と呼ぶことにします。そこで、ロードバランサーのヘルスチェックパラメーターを以下のように設定することを推奨します。

異常と判定されるまでの最大時間 <= 最小 LB Health Checkスイッチオーバー時間 + 正常と判定されるまでの時間

したがって、 異常のしきい値 を求めるには次のようになります。

異常のしきい値 <= (最小 LB Health Checkスイッチオーバー時間 ー タイムアウト) / ヘルスチェック間隔 + 正常のしきい値 – 1

例として、ロードバランサーのヘルスチェックパラメーターを、 ヘルスチェック間隔 = タイムアウト = 5秒 および 正常のしきい値 = 2回連続成功 で設定したとします。リソース階層を使用して繰り返しスイッチオーバーテストからデータを収集することにより、 最小 LB Health Check スイッチオーバー時間 = 20秒 であることがわかったとします。上記の推奨事項を参考に 異常のしきい値 を設定すると、以下のようになります。

異常のしきい値 <= (20 - 5) / 5 + 2 – 1 = 4

以上より、 異常のしきい値 として 2 から 4 の値を選択するのが妥当でしょう。さらにスイッチオーバーのテストを繰り返し、スイッチオーバー後すぐにロードバランサーが旧アクティブノードを異常と判定していないことがわかったら、より低い値 (2 や 3) を選択します。もしテスト中に、ロードバランサーが一時的なサーバーやネットワークの問題により、アクティブノードを定期的に異常と判定していることがわかった場合は、より高い値 (3 や 4) を選択します。今回の例では、 異常のしきい値として 3 を選択するのが妥当かもしれません。

フィードバック

お役に立ちましたか?

はい いいえ
お役に立ちましたか
理由をお聞かせください
フィードバックありがとうございました

このトピックへフィードバック

送信