web-dev-qa-db-ja.com

Amazon EC2のロードバランシング?

私たちはAmazonEC2で数日間 HAProxy と戦ってきました。これまでの経験は素晴らしいものでしたが、ソフトウェアロードバランサーからより多くのパフォーマンスを引き出すことに固執しています。私たちはLinuxネットワークの専門家ではありませんが(通常は.NETショップです)、これまでのところ、適切なulimitを設定し、カーネルメッセージとtcpdumpに異常がないかどうかを調べています。ただし、これまでのところ、約1,700リクエスト/秒のプラトーに達しており、その時点でクライアントのタイムアウトが多数発生しています(この目的のために httperf を使用および調整してきました)。同僚と私は最新のStackOverflowポッドキャストを聞いていました。Redditの創設者は、サイト全体が1つのHAProxyノードで実行されており、これまでのところボトルネックにはなっていないと述べています。わかった!どういうわけか、それほど多くの同時リクエストが表示されないか、何かひどく間違っているか、EC2の共有の性質がEc2インスタンスのネットワークスタックを制限しています(大きなインスタンスタイプを使用しています)。 JoelとRedditの創設者の両方が、ネットワークが制限要因になる可能性が高いことに同意しているという事実を考慮すると、それが私たちが見ている制限である可能性はありますか?

どんな考えでも大歓迎です!

Edit実際の問題は、実際にはロードバランサーノードではなかったようです。この場合、原因は実際にはhttperfを実行しているノードでした。 httperfは、リクエストごとにソケットを構築して破棄するため、カーネルでかなりのCPU時間を費やします。リクエストレートを高くすると、TCP FIN TTL(デフォルトでは60秒))がソケットを長く維持しすぎ、ip_local_port_rangeのデフォルトが低すぎました。基本的に、クライアント(httperf)ノードが絶えず新しいソケットを作成および破棄してから数分後、未使用のポートの数が不足し、この段階で後続の「リクエスト」がエラーになり、リクエスト/秒が低くなりました。数と大量のエラー。

Nginxも調べましたが、RighScaleを使用しており、HAProxy用のドロップインスクリプトがあります。ああ、絶対に必要であることが証明されない限り、[もちろん]締め切りが厳しすぎてコンポーネントを切り替えることができません。ありがたいことに、AWSを使用していると、nginxを並行して使用して別のセットアップをテストし(必要な場合)、後で一晩で切り替えを行うことができます。

このページ 各sysctl変数についてかなりよく説明しています(この場合、ip_local_port_rangeとtcp_fin_timeoutが調整されています)。

46
Marc Bollinger

あなたの質問に対する答えではありませんが、nginxとpoundはどちらもロードバランサーとして高い評価を得ています。 Wordpress just nginxに切り替え 良い結果が得られました。

しかし、より具体的には、問題をデバッグするためです。 100%のCPU使用率(I/O待機を含む)が表示されない場合は、ネットワークにバインドされています。 EC2は内部でギガビットネットワークを使用します。XLインスタンスを使用してみてください。これにより、基盤となるハードウェアを自分で使用でき、そのギガビットネットワークポートを共有する必要がなくなります。

9
tumbleweed

質問に直接答えることはありませんが、EC2は、EC2インスタンスで独自のロードバランサーを実行するのではなく、 Elastic Load Balancing を介してロードバランシングをサポートするようになりました。

EDIT:AmazonのRoute 53 DNSサービスは、「エイリアス」レコードを持つELBでトップレベルドメインを指す方法を提供するようになりました。 AmazonはELBの現在のIPアドレスを知っているため、CNAMEレコードを使用せずに、その現在のIPのAレコードを返すことができますが、IPは随時自由に変更できます。

20
stevemegson

はい、オフサイトのロードバランサーを使用できます。ベアメタルのLVSは最適ですが、レイテンシーはひどいものになります。 AmazonがCNAMEの問題を修正するという噂があります。ただし、https、詳細またはカスタムのヘルスチェック、フィードバックエージェント、URLマッチング、Cookieの挿入を追加する可能性はほとんどありません(また、優れたアーキテクチャを持つ一部の人もまったく正しいと言えます)。ただし、Scalr、RightScaleなどが通常HAProxyを使用しているのはそのためです。ラウンドロビンDNSエントリの背後にあります。ここLoadbalancer.orgで、独自のEC2ロードバランシング装置を立ち上げようとしています: http://blog.loadbalancer.org/ec2-load-balancer-appliance-rocks-and-its-free-for- now-anyway / SSHスクリプトを使用して、rightscaleと同じように自動スケーリングと統合することを計画しています。コメントは、ブログで高く評価されています。ありがとう

3

クラウドではなくオフサイトのロードバランサーに切り替えて、その上でIPVSのようなものを実行することを検討します。 [Amazonのクラウドから外れる理由は、カーネルの問題によるものです] Amazonが送信するパケットの送信元IPを制限しない場合は、単方向の負荷分散メカニズムを使用できます。このようなことを行うと、[レイテンシーは処理しませんが]約800,000の同時リクエストが発生します。また、「ab2」(Apacheベンチ)を使用すると言います。これは、もう少しユーザーフレンドリーで、私の謙虚な意見では使いやすいからです。

1
Sargun Dhillon

問題は解決しましたが。 KEMP Technologiesは、AWS用の本格的なロードバランサーを備えています。手間を省くことができます。

0
user452781