リスナーを追加するときに、ヘルスチェック機能を設定できます。 一般的に、デフォルト設定で要件は満たされています。

ヘルスチェックの設定

Server Load Balancer (SLB) コンソールまたは API を介して、リスナーのヘルスチェック機能を設定できます。 詳細については、「ヘルスチェックの概要」および「ヘルスチェックに関するよくある質問」をご参照ください。

ヘルスチェック機能を設定するには、次の手順に従ってください。
  1. SLB コンソール にログインします。
  2. 対象とする SLB インスタンスのリージョンを選択します。
  3. 対象とする SLB インスタンスを見つけ、インスタンス ID をクリックします。
  4. [インスタンスの詳細] ページで、[リスナー] タブをクリックします。
  5. [リスナーの追加] をクリックするか、[操作] 列で目的のリスナーを見つけて [設定] をクリックします。
  6. [ヘルスチェック] ページで、ヘルスチェック機能を設定します。
    ヘルスチェックを設定する際は、デフォルト値を使用することを推奨します。
    表 1. ヘルスチェックの設定項目
    設定項目 説明
    ヘルスチェックのプロトコル
    TCP リスナーの場合は、TCP ヘルスチェックと HTTP ヘルスチェックの両方に対応しています。
    • TCP ヘルスチェックは、ネットワークレイヤーの検出に基づいています。
    • HTTP ヘルスチェックは、HEAD リクエストを送信することによって実行されます。
    ヘルスチェックのメソッド

    (HTTP および HTTPS ヘルスチェックのみ)

    レイヤー 7 リスナー (HTTP および HTTPS リスナー) のヘルスチェックは、HEAD リクエストメソッドと GET リクエストメソッドの両方をサポートしています。

    HEAD リクエストメソッドがデフォルトで使用されます。 したがって、バックエンドサーバーが HEAD リクエストメソッドをサポートしていないか、HEAD リクエストメソッドが無効になっていると、ヘルスチェックが失敗する可能性があります。 この問題を解決するには、ヘルスチェックに GET リクエストメソッドの使用を選択できます。

    ただし、インド (ムンバイ) リージョンのみ GET リクエストメソッドをサポートしています。 他のリージョンでのサポートは開発中です。

    GET メソッドを使用した場合、レスポンスの長さが 8 KB を超えると切り捨てられますが、ヘルスチェックの結果は影響を受けません。
    ヘルスチェックパスとドメイン名

    (HTTP ヘルスチェックのみ)

    SLB はヘルスチェックを実行するために、デフォルトで、バックエンド ECS インスタンスのイントラネット IP アドレスを使用して、アプリケーションサーバ上に設定されたデフォルトのホームページに HTTP HEAD リクエストを送信します。

    ヘルスチェックにアプリケーションサーバーのデフォルトホームページを使用しない場合は、ヘルスチェックの URL を指定する必要があります。

    一部のアプリケーションサーバーは、リクエスト内のホストフィールドを確認します。 したがって、リクエストヘッダーに、ホストフィールドが含まれている必要があります。 ヘルスチェックでドメイン名が設定されている場合、SLB はリクエストをバックエンドサーバーに転送する際に、ドメイン名をホストフィールドに追加します。 ドメイン名が設定されていない場合、リクエストにはホストフィールドがないため、ヘルスチェックリクエストは、サーバーによって拒否され、ヘルスチェックが失敗する可能性があります。 そのため、アプリケーションサーバーが、リクエストのホストフィールドを確認する場合は、ヘルスチェックが機能するようにドメイン名を設定する必要があります。

    通常のステータスコード

    (HTTP ヘルスチェックのみ)

    通常のヘルスチェックを示す HTTP ステータスコードを選択します。

    デフォルト値は、http_2xx と http_3xx です。

    ヘルスチェックポート バックエンドサーバーにアクセスするためにヘルスチェックで使用される検出ポートです。

    デフォルトでは、リスナーで設定されたバックエンドポートが使用されます。

    VServer グループまたはアクティブ/スタンバイサーバーグループがリスナー用に設定され、グループ内の ECS インスタンスが使用するポートが異なる場合は、このパラメーターを空にします。 SLB は各 ECS インスタンスのバックエンドポートを使用して、ヘルスチェックを実行します。
    レスポンスタイムアウト ヘルスチェックからのレスポンスを待機する時間です。 指定した時間内にバックエンド ECS インスタンスが正しく応答しなかった場合、ヘルスチェックは失敗します。

    値の範囲:1~300。 単位:秒。 UDP リスナーのデフォルト値:10。 HTTP、HTTPS、および TCP リスナーのデフォルト値:5

    ヘルスチェックの間隔 連続した 2 回のヘルスチェックの間隔です。

    LVS クラスター内のすべてのノードサーバーは、間隔に応じて独立かつ並行的に、バックエンド ECS インスタンスのヘルスチェックを実行します。 各ノードサーバーのヘルスチェック時間は同期していないため、1 つの ECS インスタンスのヘルスチェックリクエストの統計には、SLB のヘルスチェックの間隔は反映されません。

    値の範囲:1~50。 単位:秒 UDP リスナーのデフォルト値:5 HTTP、HTTPS、および TCP リスナーのデフォルト値:2

    異常しきい値 ECS インスタンスが正常でないと宣言される (成功から失敗へ) までに、同一の ECS インスタンス上にある同一の LVS ノードサーバーによって実行されたヘルスチェックの連続失敗回数です。

    値の範囲:2~10。 デフォルト値:3。

    正常しきい 値 ECS インスタンスが正常であると宣言される (失敗から成功へ) までに、同一の ECS インスタンス上にある同一の LVS ノードサーバーによって実行されたヘルスチェックの連続成功回数です。

    値の範囲:2~10 デフォルト値:3

    ヘルスチェックのリクエストおよび結果 UDP リスナーのヘルスチェックを設定するときは、リスエストする内容 (たとえば youraccountID) を [ヘルスチェックリクエスト] に入力し、予想されるレスポンス (たとえば slb123) を [ヘルスチェックレスポンス] に入力します。

    対応するヘルスチェックレスポンスロジックを、バックエンドサーバーのアプリケーションロジックに追加します。 たとえば、youraccountID を受け取った場合に slb123 を返します。

    SLB がバックエンドサーバーから正しいレスポンスを受信すると、ヘルスチェックは成功します。 それ以外の場合は、ヘルスチェックは失敗します。 この方法は、ヘルスチェックの信頼性を保証することができます。

  7. SLB は、バックエンドサーバーのヘルスチェック診断をサポートしています。
    1. [高度な設定] で、[ヘルスチェック診断] をクリックします。
      RAM ユーザーとしてログインする場合、ヘルスチェック診断機能を使用する前に、 RAM ユーザーに権限を付与する必要があります。 RAM ユーザーに権限を付与するには、こちらをクリックします。
    2. 目的のバックエンドサーバーを見つけ、[操作] 列の [診断] をクリックします。

      複数のバックエンドサーバーを一度にチェックするには、対象となるバックエンドサーバーを選択し、[バッチ] をクリックします。 最大で 5 つのバックエンドサーバーを同時に選択できます。 バックエンドサーバーの数が 5 を超えた場合、バッチでバックエンドサーバーを確認してください。

    3. [OK] をクリックします。

ヘルスチェックレスポンスタイムアウトとヘルスチェック間隔の例

次のヘルスチェック設定を例として説明します。

  • レスポンスタイムアウト:5 秒
  • ヘルスチェック間隔:2 秒
  • 正常しきい値:3 回
  • 異常しきい値:3 回

ヘルスチェック失敗タイムウィンドウ = レスポンスタイムアウト x 異常しきい値 + ヘルスチェック間隔 x (異常しきい値 - 1) です。 つまり、5 x 3 + 2 x (3−1) = 19 秒です。

次の図は、異常バックエンドサーバーを宣言するプロセスを示しています。

ヘルスチェック成功タイムウィンドウ = ヘルスチェックレスポンス時間 × 正常しきい値 + ヘルスチェック間隔 × (正常しきい値 - 1) です。 つまり、(1 x 3) + 2 x (3-1) = 7 秒です。

ヘルスチェックレスポンス時間は、ヘルスチェックのリクエストが送信されてからレスポンスが受信されるまでの時間です。 TCP ヘルスチェックの場合、ポートが生きているか否かを検出するだけなので、レスポンス時間は非常に短くなります。 HTTP ヘルスチェックの場合、レスポンス時間はアプリケーションサーバーのパフォーマンスと負荷によって異なりますが、通常は数秒以内です。

次の図は、正常なバックエンドサーバーを宣言するプロセスを示しています (バックエンドサーバーがヘルスチェックリクエストにレスポンスするのに 1 秒かかると想定します)。

HTTP ヘルスチェックでのドメイン名の設定

HTTP ヘルスチェックを使用する場合は、ヘルスチェックのドメイン名を設定することができますが、必須ではありません。 一部のアプリケーションサーバーは、リクエスト内のホストフィールドを確認します。 したがって、リクエストヘッダーにはホストフィールドが含まれている必要があります。 ヘルスチェック機能でドメイン名が設定されている場合、SLB はリクエストをバックエンドサーバーに転送する際に、ドメイン名をホストフィールドに追加します。 設定されていない場合、ヘルスチェックリクエストがサーバーに拒否され、ヘルスチェックが失敗する可能性があります。 そのため、アプリケーションサーバーがリクエストのホストフィールドを確認する場合は、ヘルスチェックが正常に機能するようにドメイン名を設定する必要があります。