Application Load Balancer のヘルスチェックが失敗した場合のトラブルシューティングの方法を教えてください。

所要時間2分
0

Application Load Balancer に登録されているターゲットが正常でない理由を調べたいと考えています。

解決策

Application Load Balancer のヘルスチェックに失敗した場合のトラブルシューティングを行うには、問題の理由コードと説明を確認してください。次に、次のタスクを実行して問題を解決します。

問題の理由コードと説明を探します

ターゲットグループのコンソールの代わりにリソースマップを使用して、ロードバランサーのリソースを表示し、異常なターゲットを特定します。リソースマップには、Application Load Balancer のすべてのリソースが 1 ページに表示されます。

**注:**Application Load Balancer のターゲット HTTP 応答が期待どおりの応答でない場合は、アプリケーションの応答を確認してください。アプリケーションがロードバランサーに正しい応答を送信することを確認してください。

理由コードに基づいて問題を解決します

見つかったヘルスチェックの理由コードに基づいて、次のタスクを実行して問題を解決します。

Elb.InitialHealthChecking

ターゲットがロードバランサーからリクエストを受信するには、そのターゲットは初期ヘルスチェックに合格しておく必要があります。ターゲットが初期ヘルスチェックに合格するまで待ってから、ヘルスステータスを再確認してください。

Elb.RegistrationInProgress

登録プロセスが完了して、ターゲットが初期ヘルスチェックに合格すると、ロードバランサーはターゲットへのリクエストのルーティングがすぐに開始します。

Target.DeregistrationInProgress

ターゲットを登録解除すると、ロードバランサーはターゲットにリクエストを送信しなくなります。Elastic Load Balancing は登録解除を完了する前に 300 秒間待機します。ただし、Amazon EC2 コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用して遅延値を更新できます。詳細については、「登録解除の遅延」を参照してください。

**注:**AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

Target.FailedHealthChecks

この問題を解決するには、次のステップを実行してください。

  • アプリケーションが実行中であることを確認します。service コマンドで、Linux ターゲット上のサービスの状態を確認します。Windows ターゲットの場合は、Windows タスクマネージャーの [サービス] タブを確認してください。サービスが停止している場合は、サービスを開始してください。サービスが認識されない場合は、サービスがインストールされているかどうかを確認してください。

  • ターゲットがヘルスチェックポートでトラフィックをリッスンしていることを確認します。Linux ターゲットで ss コマンドを実行すると、サーバーがリッスンしているポートを確認できます。Windows ターゲットの場合は、netstat コマンドを実行できます。

  • ターゲットインスタンスと同じ Amazon 仮想プライベートクラウド (VPC) で既存のインスタンスを起動または使用します。このインスタンスにアクセスできることを確認してください。または、ターゲットがパブリックにアクセス可能な場合は、ターゲットのパブリック IP アドレスにヘルスチェックリクエストを直接送信します。

    次の CURL コマンドを実行します。

    $curl -vkso /dev/null <HealthCheck_protocol>://<Target_IP>:<HealthCheck_port>/<HealthCheck_path>

    **注:**この方法を使用して Application Load Balancer をバイパスし、ターゲットがロードバランサーのヘルスチェックリクエストに正しく応答しているかどうかを確認します。

  • アプリケーションがロードバランサーのヘルスチェックリクエストに応答することを確認します。次の例は、ターゲットが有効な HTTP レスポンスで返す必要がある、Application Load Balancer からの一般的なヘルスチェックリクエストを示しています。

    GET / HTTP/1.1Host: 10.0.0.1:80
    Connection: close
    User-Agent: ELB-HealthChecker/2.0
    Accept-Encoding: gzip, compressed

    **注:**前の例では、Host ヘッダー値にはターゲットのプライベート IP アドレスが含まれ、その後にヘルスチェックポートが続きます。ユーザーエージェントは ELB-HealthChecker/2.0 に設定されています。メッセージヘッダーフィールドの行末記号は CRLF シーケンスです。ヘッダーは最初の空行で終了し、その後に CRLF が続きます。ヘルスチェックリクエストを受信するには、デフォルトの仮想ホストをウェブサーバー設定に追加する必要がある場合があります。

  • ターゲットに複数のインターフェースを関連付けている場合は、アプリケーションが正しいネットワークインターフェースでリッスンしていることを確認してください。詳しくは、「ターゲットタイプ」を参照してください。

  • ターゲットが Elastic Load Balancing セキュリティポリシーで指定された形式のサーバー証明書とキーを提供することを確認します。また、ターゲットが TLS ハンドシェイクを確立するためにロードバランサーが提供する一致する暗号とプロトコルをサポートしていることも確認してください。

Target.InvalidState

ターゲットが Amazon EC2 インスタンスの場合は、Amazon EC2 コンソールを使用してインスタンスが実行中であることを確認します。インスタンスが実行されていない場合は、インスタンスを手動で起動します

Target.IpUnusable

ターゲットタイプが ip の場合は、ロードバランサーがすでに使用している IP アドレスを選択しないでください。

Target.NotInUse

この問題を解決するには、次のステップを実行してください。

  • ターゲットグループをチェックして、ロードバランサーからトラフィックを受信する設定になっていることを確認します。
  • ターゲットのアベイラビリティーゾーンがロードバランサーで有効になっていることを確認します。

Target.NotRegistered

ターゲットがターゲットグループに登録されていることを確認します。

Target.ResponseCodeMismatch

この問題を解決するには、次のステップを実行してください。

  • ヘルスチェックの設定を確認して、ロードバランサーによる受け取りが想定されている成功コードを確認してください。デフォルトの成功コードは 200 ですが、200 から 499 までの値を指定できます。Web サーバーのアクセスログを調べて、期待どおりの成功コードが返されているかどうかを確認します。
  • ping パスが有効であることを確認します。必ず有効な URI を指定してください。デフォルトは / です。

成功コード値または ping パスを変更するには、「ターゲットグループのヘルスチェック設定の変更」を参照してください。

Target.Timeout

接続できる場合は、ターゲットページはヘルスチェックのタイムアウト期間までに応答しない可能性があります。NGINX や IIS などのほとんどの Web サーバーでは、サーバーが応答するまでにかかる時間を記録できます。詳細については、NGINX Web サイトの「ロギングの設定」と Microsoft Web サイトの「IIS でのロギングの設定」を参照してください。

ヘルスチェックリクエストが設定されたタイムアウトより長くかかる場合は、次のタスクを完了してください。

接続できない場合は、次のタスクを実行してください。

  • ヘルスチェックポートとヘルスチェックプロトコルを使用して、ターゲットに関連付けられているセキュリティグループでロードバランサーからのトラフィックが許可されていることを確認します。セキュリティグループにルールを追加して、ロードバランサーセキュリティグループからのすべてのトラフィックを許可することができます。また、ロードバランサーのセキュリティグループでは、ターゲットへのトラフィックが許可されている必要があります。
  • ターゲットのサブネットに関連付けられているネットワークアクセスコントロールリスト (ネットワークACL) が、ヘルスチェックポートでのインバウンドトラフィックを許可していることを確認します。ネットワーク ACL では、エフェメラルポート (1024-65535) でのアウトバウンドトラフィックも許可する必要があります。
  • ノードのサブネットに関連付けられているネットワーク ACL がエフェメラルポートでのインバウンドトラフィックを許可していることを確認します。ネットワーク ACL では、ヘルスチェックポートとエフェメラルポートでのアウトバウンドトラフィックも許可する必要があります。
  • ターゲットの OS レベルのファイアウォールで、ヘルスチェックトラフィックの送受信が許可されていることを確認します。
  • ターゲットのサブネットのルートテーブルに、ロードバランサーに戻るヘルスチェックトラフィックを許可するエントリが含まれていることを確認します。
  • ターゲットのメモリと CPU の使用率が許容範囲内であることを確認します。メモリまたは CPU の使用率が高すぎる場合は、ターゲットを追加するか、Auto Scaling グループの容量を増やしてください。ターゲットが EC2 インスタンスの場合は、インスタンスをより大きなインスタンスタイプに変更します

関連情報

Application Load Balancer のトラブルシューティング

コメントはありません

関連するコンテンツ