Amazon EC2でかなり簡単なセットアップを実行しようとしています。AmazonElastic Load Balancer(ELB)の背後にあるいくつかのHTTPサーバーです。
私たちのドメインはRoute53で管理されており、ELBを指すように設定されたCNAMEレコードがあります。
一部(すべてではない)の場所が断続的にロードバランサーに接続できないという問題が発生しました。これはELBのドメイン名の解決であると思われます。
Amazonサポートから、ロードバランサーの基になるElastic IPが変更されていること、および一部のISPのDNSサーバーがTTLを受け入れないことが問題であることが通知されました。 Amazon独自のDNSサーバーを使用してEC2インスタンスから、およびオーストラリアのローカルISPおよびGoogleのDNSサーバー(8.8.8.8
)を使用して問題を再現したため、この説明には満足できません。
Amazonは、一部の場所からのダウンタイムに気づいた期間中に、ELBを通過するトラフィックが大幅にダウンしたことも確認しました。そのため、問題はエンドポイントにはありません。
興味深いことに、ドメインは接続できないサーバーで正しいIPに解決されるようですが、TCP接続を確立する試みは失敗します。
ELBに接続されているすべてのインスタンスは常に正常でした。彼らはすべてです
この問題をより深く診断する方法を誰かが知っていますか?他の誰かがElastic Load Balancerでこの問題を経験しましたか?
おかげで、
Amazon Elastic Load Balancer(ELB)を診断する方法をグーグルで調べているときにこの質問を見つけました。私のようなこのような問題が発生したことがある他の誰に対しても多くのガイダンスなしに答えたいと思います。
ELBにはいくつかの興味深い特性があります。例えば:
注:別の興味深いプロパティですが、少し関連性が低いのは、ELBがトラフィックの突然のスパイクを処理するように設計されていないことです。彼らは通常、スケールアップする前に15分の大量のトラフィックを必要とするか、サポートチケットを介して要求に応じて事前に暖めることができます
Update:AWSはすべてのELBを移行し、DNSにRoute 53を使用します。さらに、すべてのELBには、ELBのノードの完全なリストを返すall.$elb_name
レコードがあります。たとえば、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
ELBのレコードが多すぎて単一のUDPパケットに収まらない可能性があるため、tcp
フラグが推奨されます。私はまた、個人的には確認していませんが、Amazonは最大6つのノードしか表示しないこともわかっていますnlessANY
クエリを実行します。このコマンドを実行すると、次のような出力が得られます(簡潔にするためにトリミングされています)。
;; 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
レコードごとに、たとえば、 ELBへの接続をテストするには、curl
を使用します。もちろん、バックエンドに接続せずに、テストをELBのみに分離することもできます。 ELBに関する最後のプロパティとほとんど知られていない事実:
つまり、この動作を利用して、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 を作成しました。 Ruby gemとして利用できるので、rubymemがある場合は、次のようにしてインストールできます。
$ 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に対してかなり合理的なケースを立てることができます。
お役に立てれば!
修正は実際には簡単です。Route53ではA
ではなくCNAME
レコードを使用します。
AWSマネジメントコンソールで、[Aレコード]を選択し、[エイリアス]というラベルの付いたラジオボタンを[はい]に移動します。次に、ドロップダウンメニューからELBを選択します。
このAWS開発者フォーラムで試すことができるいくつかの潜在的なソリューションがあります。 https://forums.aws.Amazon.com/message.jspa?messageID=387552 。
例えば:
ELBに移行したときにも同様の問題があり、ELBの名前を1文字に減らすことで解決しました。 ELBの2文字の名前でも、ネットワークソリューションのDNS解決でランダムな問題が発生しました。
ELBのDNS名は-> X. <9chars> .us-east-1.elb.amazonaws.comのようになります。
私はオリジナルのポスターです。すべての応答をありがとう。 TTLを非常に高く設定することで、DNSの問題が発生する頻度を減らすことができました(ネットワークソリューション以外のサーバーによってキャッシュされるため)。しかし、ネットワークソリューションにとどまることはできませんでした。サービスに関する優れたレポートに基づいてUltraDNSに移行することを考えましたが、ルート53(カバーの下でUltraDNSを使用しているため、表示される)の方が安価であるように見えました。 Route 53では、DNSの問題はなくなりました。ELB名は、Niceで長くなる場合があります。
その投稿では他にも試してみることがありましたが、それらが最良のリードであるようです。