Application Load Balancer (ALB) は、ヘルスチェックを使用してバックエンドサーバーの可用性を判断します。ヘルスチェックが有効になっている場合、バックエンドサーバーがヘルスチェックに失敗すると、ALB はその異常なサーバーへの新しいリクエストのルーティングを停止し、他の正常なバックエンドサーバーにリクエストを分散します。これにより、個別のサーバーの問題によるサービスの中断を防ぎ、高可用性を確保します。このトピックでは、ヘルスチェックの失敗に関するトラブルシューティングと解決方法について説明します。
問題の説明
ALB インスタンスのリスナーの ヘルスチェックステータス 列に 異常 と表示されます。
原因
初期設定時にヘルスチェックが失敗する場合、通常はヘルスチェックの設定が正しくないことが原因です。
ヘルスチェックパラメーターの不正な設定
リスナーポートの問題
設定が成功した後にヘルスチェックが失敗する場合、通常はバックエンドサーバーの問題が原因です。
セキュリティソフトウェアの問題
不正なルート設定
バックエンドサーバーの過負荷
解決策
初期設定時のヘルスチェック失敗
原因 1:ヘルスチェックパラメーターの不正な設定
ALB コンソールにログインします。
-
上部のナビゲーションバーで、ALB インスタンスがデプロイされているリージョンを選択します。
左側のナビゲーションウィンドウで、ALB > サーバーグループを選択します。
サーバーグループ ページで、対象の ALB インスタンスにアタッチされているサーバーグループを見つけ、サーバーグループ ID をクリックします。
サーバーグループの詳細ページで、ヘルスチェック セクションの ヘルスチェックの変更 をクリックします。
ヘルスチェックの変更 ダイアログボックスで、ヘルスチェックパラメーターが正しく設定されているかを確認します。デフォルトのヘルスチェックパラメーターを使用することを推奨します。
詳細については、「ALB のヘルスチェック」をご参照ください。
原因 2:リスナーポートの問題
ALB コンソールにログインします。
-
上部のナビゲーションバーで、ALB インスタンスがデプロイされているリージョンを選択します。
左側のナビゲーションウィンドウで、ALB > サーバーグループ を選択します。
サーバーグループ ページで、対象の ALB インスタンスにアタッチされているサーバーグループを見つけ、サーバーグループ ID をクリックします。
サーバーグループの詳細ページで、バックエンドサーバー タブをクリックし、バックエンドサーバーのポートを確認して記録します。
サーバーグループの詳細ページで、詳細 タブをクリックします。ヘルスチェック セクションで ヘルスチェックの変更 をクリックします。ヘルスチェックの変更 ダイアログボックスで、ヘルスチェックパラメーターを確認して記録します。
バックエンドサーバーにログインし、`nc` または `curl` コマンドを使用してバックエンドサーバーをプローブします。
ECS インスタンスへのログイン方法の詳細については、「ECS インスタンスへの接続」をご参照ください。
# nc コマンド: echo -e "[$Method] [$PATH] [$VERSION]\r\nHost: [$Domain]\r\n\r\n" | nc -t [$IP] [$Port] # フォーマット echo -e "HEAD /index.html HTTP/1.0\r\nHost: wwww.example.org\r\n\r\n" | nc -t 127.0.0.1 80 # 例 # curl コマンド: curl -X [$Method] -H "Host: [$Domain]" -I http://[$IP]:[$Port][$PATH] # フォーマット curl -X HEAD --http1.0 -H "Host: www.example.org" -I http://127.0.0.1:80/index.html # 例説明[$Method]は、サーバーグループに設定されたヘルスチェックメソッドです。[$PATH]は、サーバーグループに設定されたヘルスチェックパスです。[$VERSION]は、ヘルスチェックで使用される HTTP プロトコルのバージョンです (例:`HTTP/1.0`)。[$Domain]は、サーバーグループに設定されたヘルスチェックドメイン名です。値が `-----` の場合、ALB はデフォルトで各バックエンド ECS インスタンスのプライベート IP アドレスをドメイン名として使用します。この場合、代わりに `[$IP]` を使用できます。[$IP]は、バックエンド ECS インスタンスのプライベート IP アドレスです。[$Port]は、ヘルスチェックプローブに使用されるポートです。デフォルトでは、ALB はバックエンド ECS インスタンスのポートを使用します。ヘルスチェックポートを指定した場合、ALB はそのポートを使用します。
コマンドによって返されたステータスコードを確認し、それがアプリケーションにとって期待されるものかどうかを判断します。
返されたステータスコードが期待どおりであるものの、ヘルスチェック設定に含まれていない場合は、ヘルスチェックを更新してそのステータスコードを正常な応答として含めます。
返されたステータスコードが予期しないものである場合、次の表に考えられる HTTP ステータスコードとそのトラブルシューティング方法を示します。
ステータスコード
説明
トラブルシューティング
400
クライアントの HTTP リクエストのフォーマットが無効です。
HTTP ヘッダーのフォーマットが無効です。例えば、`content-length` が空であるか、HTTPS ポートに HTTP リクエストが送信されています。HTTP リクエストのフォーマットを確認してください。
404
リクエストされたリソースが見つかりません。
リクエストされた URL が正しいか確認してください。
405
ヘルスチェックのリクエストメソッドがサポートされていません。
バックエンドサービスがヘルスチェックのリクエストメソッドをサポートしているか確認してください。
500
サーバーで内部エラーが発生し、リクエストを処理できません。
バックエンドサービスのビジネスロジックを確認してください。
503
サーバーが一時的に利用できません。
バックエンドサービスのビジネスロジックを確認するか、サーバーが過負荷になっていないか確認してください。
設定成功後のヘルスチェック失敗
原因 1:セキュリティソフトウェアの問題
アップグレードされた ALB インスタンスは、ローカル IP を使用してバックエンドの ECS インスタンスと通信します。ローカル IP は、ALB インスタンスがデプロイされている vSwitch の CIDR ブロックからのプライベート IP アドレスです。バックエンドの ECS インスタンスが、`iptables` や他のセキュリティソフトウェアなどで ALB インスタンスのローカル IP をブロックしないようにしてください。Application Load Balancer コンソールにログインし、インスタンスの詳細ページでローカル IP を表示できます。
アップグレード前、ALB インスタンスはプライベート IP アドレス範囲 100.64.0.0/10 を使用してバックエンドの ECS インスタンスと通信します。バックエンドの ECS インスタンスが、iptables やその他のサードパーティ製セキュリティポリシーソフトウェアなどを使用して、ALB インスタンスのこの IP アドレス範囲をブロックしないようにしてください。
ALB インスタンスのアップグレードに関する情報については、「Application Load Balancer (ALB) インスタンスのアップグレードに関するお知らせ」をご参照ください。
ALB は、内部の予約済みアドレス範囲の IP アドレスを使用して、バックエンドの ECS インスタンスと通信します。したがって、ALB のこのアドレス範囲がブロックされると、ヘルスチェックが失敗し、ALB は正常に機能しなくなります。このトピックでは、iptables を使用して 100.64.0.0/10 CIDR ブロックを確認する方法の例を示します。
影響を受けるバックエンドの ECS インスタンスにログインし、次のコマンドを実行してフィルターテーブル内のすべてのルールを表示します。
iptables -nL出力が次のようになっている場合、バックエンドの ECS インスタンスは ALB のプライベート CIDR ブロックからのリクエストをブロックしています。

次のコマンドを実行してルールを削除します。
iptables -t filter -D INPUT -s 100.64.0.0/10 -j DROP次のコマンドを実行して、ALB のプライベート CIDR ブロックからのリクエストがブロックされなくなったことを確認します。
iptables -nL
原因 2:不正なルート設定
この原因は、アップグレードされていない ALB インスタンスにのみ適用されます。アップグレードされた ALB インスタンスは、インスタンスがデプロイされている vSwitch の CIDR ブロックからのプライベート IP アドレスであるローカル IP を使用して、バックエンドの ECS インスタンスと通信します。このプロセスには 100.64.0.0/10 CIDR ブロックは関与しません。
ALB インスタンスのアップグレードに関する情報については、「Application Load Balancer (ALB) インスタンスのアップグレードに関するお知らせ」をご参照ください。
アップグレードされていない ALB インスタンスが使用する 100.64.0.0/10 CIDR ブロックのルートがバックエンドの ECS インスタンスで誤って設定されている場合、ALB インスタンスはヘルスチェックのプローブパケットを受信できず、ヘルスチェックが失敗します。次の例では、`route` コマンドを使用して Linux インスタンスのルート設定を確認する方法を示します。
影響を受けるバックエンドの ECS インスタンスにログインし、次のコマンドを実行して現在のルート設定を確認します。
route -n`宛先` が `100.64.0.0`、`Genmask` が `255.192.0.0` で、`ゲートウェイ` が対応する Elastic Network Interface のデフォルトゲートウェイでないルートエントリが見つかった場合、ルートは不正に設定されています。デフォルトゲートウェイは、`宛先` が `0.0.0.0` のときの `ゲートウェイ` の値です。

次のコマンドを実行して、不正に設定された `100.64.0.0/10` のルートを削除します。
route del -net 100.64.0.0/10
原因 3:バックエンドサーバーの過負荷
サーバーの高負荷を確認するには、「Linux インスタンスの高負荷問題のトラブルシューティングと解決」をご参照ください。