コンテンツにスキップ
アクティブヘルスチェック

アクティブヘルスチェック

概要

rpxyが複数のアップストリームバックエンドにリクエストを転送する場合、ダウンしているサーバーや異常なサーバーにトラフィックを送らないことが重要です。アクティブヘルスチェック機能は、各アップストリームを定期的にプローブし、異常なものをロードバランシングプールから自動的に除外します。

主な動作:

  • TCPまたはHTTPのプローブタイプ
  • [[apps.<name>.reverse_proxy]]ブロックごとに設定可能
  • 設定された回数の連続失敗でアップストリームが異常と判定され、連続成功で正常に復帰
  • 起動時に即座にプローブを実行し、その後は固定間隔でプローブ
  • すべてのアップストリームが異常になった場合、rpxyは警告をログに出力し、ベストエフォートでルーティングを継続
アクティブヘルスチェックにはビルド時にhealth-check Cargoフィーチャーが有効である必要があります。このフィーチャーが有効なビルド済みバイナリとDockerイメージは公式リリースから入手できます。

設定

最も簡単な形式 — デフォルトでのTCPチェック

health_check = trueを設定すると、すべてのデフォルトパラメータでTCP接続チェックが有効になります:

[[apps.app1.reverse_proxy]]
upstream = [
  { location = "backend1:8080" },
  { location = "backend2:8080" },
]
health_check = true

TCPの全設定

[[apps.app1.reverse_proxy]]
upstream = [
  { location = "backend1:8080" },
  { location = "backend2:8080" },
]

[apps.app1.reverse_proxy.health_check]
type = "tcp"
interval = 10
timeout = 5
unhealthy_threshold = 3
healthy_threshold = 2

HTTPヘルスチェック

HTTPヘルスチェックでは、rpxyが指定されたパスにHTTPリクエストを送信し、レスポンスのステータスコードを確認します:

[[apps.app1.reverse_proxy]]
upstream = [
  { location = "backend1:8080" },
  { location = "backend2:8080" },
]

[apps.app1.reverse_proxy.health_check]
type = "http"
path = "/healthz"
expected_status = 200
interval = 10
timeout = 5
unhealthy_threshold = 3
healthy_threshold = 2

オプション

オプションデフォルト説明
type"tcp"チェックタイプ: "tcp"または"http"
interval10ヘルスチェックプローブ間の秒数。
timeout5チェック1回あたりのタイムアウト秒数。intervalより小さい値にする必要があります。
unhealthy_threshold3アップストリームを異常と判定するまでの連続失敗回数。
healthy_threshold2アップストリームを正常と判定するまでの連続成功回数。
pathHTTPチェックのエンドポイントパス。type = "http"の場合は必須/で始まる必要があります。
expected_status200HTTPチェックで期待するHTTPステータスコード。

ロードバランシングとの連携

ヘルスチェック機能はload_balanceオプションと連携して動作します:

load_balanceヘルスチェック時の動作
"none"ヘルスチェックなしの場合、常に最初のアップストリームを選択。ヘルスチェックありの場合、最初の正常なアップストリームを選択。
"round_robin"ローテーション中に異常なアップストリームをスキップ。
"random"正常なアップストリームからのみランダムに選択。
"sticky"スティッキーターゲットが異常な場合、別の正常なアップストリームにフォールバック。
"primary_backup"常に最初の正常なアップストリームにルーティング。health_checkの有効化が必須
"primary_backup"ロードバランスモードにはhealth_checkの設定が必要です。health_check設定なしでload_balance = "primary_backup"を設定すると、rpxyは起動時にエラーを返します。

例: プライマリ/バックアップ構成とHTTPヘルスチェック

プライマリがダウンした場合にのみバックアップがトラフィックを受け取る一般的なパターンです:

[[apps.app1.reverse_proxy]]
upstream = [
  { location = "primary.internal:8080" },
  { location = "backup.internal:8080" },
]
load_balance = "primary_backup"

[apps.app1.reverse_proxy.health_check]
type = "http"
path = "/healthz"
interval = 5
unhealthy_threshold = 2
healthy_threshold = 1

この設定では、rpxyprimary.internal:8080が正常な限り、常にそこにトラフィックを送信します。プライマリが2回連続でヘルスチェックに失敗すると、トラフィックはbackup.internal:8080に切り替わります。プライマリが1回ヘルスチェックに合格すると、トラフィックはプライマリに戻ります。