GooglingでAmazon Elastic Load Balancer(ELB)を診断する方法についてこの質問を見つけましたが、このような問題を抱えている他の人に多くのガイダンスなしで答えたいと思います。
ELBプロパティ
ELBにはいくつかの興味深い特性があります。例えば:
- ELBは1つ以上のノードで構成されます
- これらのノードは、ELB名のAレコードとして公開されます
- これらのノードは失敗するか、シャットダウンされる可能性があり、接続は正常に閉じられません。
- 多くの場合、誰かがELBの問題を掘り下げるには、Amazonサポート($$$)との良好な関係が必要です。
注:別の興味深い特性ですが、やや適切ではありませんが、ELBは突然のトラフィックの急増を処理するように設計されていません。通常、スケールアップする前に15分間の大量のトラフィックが必要です。または、サポートチケットを介して要求に応じて事前に暖めることができます
ELBのトラブルシューティング(手動)
更新: AWSはDNSにRoute 53を使用するようにすべてのELBを移行しました。さらに、すべてall.$elb_name
のELBには、ELBのノードの完全なリストを返すレコードがあります。たとえば、ELB名がの場合、elb-123456789.us-east-1.elb.amazonaws.com
などの操作を行うことでノードの完全なリストを取得できますdig all.elb-123456789.us-east-1.elb.amazonaws.com
。IPv6ノードの場合all.ipv6.$elb_name
も機能します。さらに、Route 53は、まだUDPを使用している最大4KBのデータを返すことができるため、+tcp
フラグを使用する必要はありません。
これを知っているので、自分で少しトラブルシューティングを行うことができます。最初に、ELB名をノードのリストに解決します(Aレコードとして):
$ dig @ns-942.amazon.com +tcp elb-123456789.us-east-1.elb.amazonaws.com ANY
tcp
あなたのELBは、単一のUDPパケットの内部に収まるようにあまりにも多くのレコードを持っている可能性としてフラグが示唆されました。また、個人的には確認していませんが、クエリを実行しない限り、Amazonには最大6ノードしか表示されませんANY
。このコマンドを実行すると、次のような出力が得られます(簡潔にするためにトリミングされています)。
;; ANSWER SECTION:
elb-123456789.us-east-1.elb.amazonaws.com. 60 IN SOA ns-942.amazon.com. root.amazon.com. 1376719867 3600 900 7776000 60
elb-123456789.us-east-1.elb.amazonaws.com. 600 IN NS ns-942.amazon.com.
elb-123456789.us-east-1.elb.amazonaws.com. 60 IN A 54.243.63.96
elb-123456789.us-east-1.elb.amazonaws.com. 60 IN A 23.21.73.53
ここで、各A
レコードに対して、たとえばcurl
ELBへの接続をテストするために使用します。もちろん、バックエンドに接続せずに、テストをELBのみに分離することもできます。最後の1つのプロパティとELBに関するほとんど知られていない事実:
- ELBを介して送信できる要求メソッド(動詞)の最大サイズは127文字です。より大きいとELBは許可されないHTTP 405メソッドで応答します。
これは、この動作を利用して、ELBが応答していることのみをテストできることを意味します。
$ curl -X $(python -c 'print "A" * 128') -i http://ip.of.individual.node
HTTP/1.1 405 METHOD_NOT_ALLOWED
Content-Length: 0
Connection: Close
表示される場合HTTP/1.1 405 METHOD_NOT_ALLOWED
、ELBは正常に応答しています。curlのタイムアウトを許容可能な値に調整することもできます。
elbpingを使用したELBのトラブルシューティング
もちろん、これを行うとかなり面倒になる可能性があるため、elbpingと呼ばれる自動化ツールを作成しました。ruby gemとして利用できるので、rubygemsをお持ちの場合は、以下を実行するだけでインストールできます。
$ gem install elbping
これで実行できます:
$ elbping -c 4 http://elb-123456789.us-east-1.elb.amazonaws.com
Response from 54.243.63.96: code=405 time=210 ms
Response from 23.21.73.53: code=405 time=189 ms
Response from 54.243.63.96: code=405 time=191 ms
Response from 23.21.73.53: code=405 time=188 ms
Response from 54.243.63.96: code=405 time=190 ms
Response from 23.21.73.53: code=405 time=192 ms
Response from 54.243.63.96: code=405 time=187 ms
Response from 23.21.73.53: code=405 time=189 ms
--- 54.243.63.96 statistics ---
4 requests, 4 responses, 0% loss
min/avg/max = 187/163/210 ms
--- 23.21.73.53 statistics ---
4 requests, 4 responses, 0% loss
min/avg/max = 188/189/192 ms
--- total statistics ---
8 requests, 8 responses, 0% loss
min/avg/max = 188/189/192 ms
表示される場合code=405
、ELBが応答していることを意味します。
次のステップ
どの方法を選択しても、少なくともELBのノードが応答しているかどうかはわかります。この知識を活用して、スタックの他の部分のトラブルシューティングに焦点を合わせるか、何かが間違っているというかなり合理的なケースをAWSに提出することができます。
お役に立てれば!
host
ユーティリティを実行すると、接続できるシステムとシステムの同じアドレスに解決されますできません。