47

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

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

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

nginx も検討しましたが、RighScale と連携しており、HAProxy 用のドロップイン スクリプトがあります。ああ、それが絶対に必要であることが証明されない限り、[もちろん]コンポーネントを切り替えるには締め切りがきつすぎます。幸いなことに、AWS にいることで、nginx を並行して (保証されている場合) 使用して別のセットアップをテストし、後で夜通し切り替えることができます。

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

4

5 に答える 5

20

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

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

于 2009-05-18T12:32:59.337 に答える
9

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

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

于 2008-11-04T15:29:48.880 に答える
3

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

于 2010-10-02T21:44:11.483 に答える
1

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

于 2008-11-05T17:26:18.597 に答える