HAProxyでTCPロードバランシングを使用する場合、すべてのアウトバウンドトラフィックはLBを通過しますか?


19

私はVMを使用してホストされるアプリを設定しています(おそらくAmazonですが、それは石では設定されていません)。これは、HTTP負荷分散と多数の(可能な場合50k程度)永続的なTCP接続の負荷分散の両方を必要とします データ量はそれほど多くありませんが、更新は頻繁に行われます。

現在、ロードバランサーを評価していますが、HAProxyのアーキテクチャについて少し混乱しています。HAProxyを使用してTCP接続のバランスを取る場合、結果のトラフィックはすべてロードバランサーを通過する必要がありますか?もしそうなら、別のソリューション(LVSやnginx_tcp_proxy_moduleなど)がより適していますか?

回答:


33

HAProxy(多くのロードバランサーと同様)は通常、2つの会話を維持します。プロキシには、クライアントとのセッション(この場合はtcp)と、サーバーとの別のセッションがあります。したがって、プロキシを使用すると、ロードバランサーの2倍の接続が表示されます。したがって、すべてのトラフィックはロードバランサーを通過します。

複数のロードバランサーにまたがってスケーリングする場合、必要はないと思います。しかし、これを実行する実用的でかなり簡単な方法は、2つのフローティングIPでkeepalivedのようなものを使用し、これら2つのIP間でラウンドロビンDNSを使用することです。keepalivedでは、ロードバランサーの1つがダウンすると、もう1つが両方のIPを保持するため、この方法で高可用性が得られます。そうは言っても、負荷のあるアクティブなhaproxyインスタンスが1つあれば大丈夫だと思います。

HAProxyは非常にうまくスケーリングします。例として、Stack Exchangeネットワークは、オープンTCP接続を維持するWebソケットを使用します。これを投稿している間、VMware仮想マシン上に143,000個のTCPソケットが問題なく確立されています。VMのCPU使用率は約7%です。

HAProxyを使用したこの種のセットアップでは、maxconn十分に高く設定してください。開始するためのHAProxy構成の例を次に示します。

frontend fe_websockets
        bind 123.123.123.123:80
        mode tcp
        log global
        option tcplog
        timeout client 3600s
        backlog 4096
        maxconn 50000
        default_backend be_nywebsockets

backend be_nywebsockets
        mode  tcp
        option log-health-checks
        option redispatch
        option tcplog
        balance roundrobin
        server web1 10.0.0.1:1234
        server web2 10.0.0.2:1234
        timeout connect 1s
        timeout queue 5s
        timeout server 3600s

その143,000-それはまだウェブソケットについて話している?それとも他のものですか?
マークグラヴェル

@MarcGravell:ほぼすべてのWebソケット。ウェブソケットサーバは〜70Kの合計を見ることになるので、私は私の冒頭で言ったように、これはものの2倍であることに注意してください
カイルブラント

@Kyle-Webソケットと永続的なTCP接続が必要な理由は何ですか?このWebサイトには、それを必要とするリアルタイム機能はないようです。
継続

@Continuation:受信トレイの通知、投票、編集、新しいコメント/回答/質問などのリアルタイム機能がかなりあります。彼らは手だけオフ、特定の担当者の制限をユーザーに対して有効になっているわけではありません確認してください場合は、それらを見ていない場合、あなたはmeta.stackoverflow.comに問い合わせることができ
カイルブラント

1
@KyleBrandtはTCPモードでも動作しますか?
elslooo

2

はい、通常、すべてのトラフィックはロードバランサーを通過する必要があります。要求はロードバランサーによって受信され、応答はロードバランサーに返送され、クライアントに返送されます。

適切なツールを選択するために、他のオプションについてあまり経験がありません。私はhaproxyを使用していますが、これは本当に安定していて、大量のトラフィックを処理できます。また、そのACL機能は優れています。


2

DSR(Direct Server Return)を使用および構成する可能性がありますが、これはLoadbalancerとは関係ありませんが、tcp-stack(ルーティングテーブル)で構成されます。これを大規模なビデオストリーミングポータルに使用しています。動作しますが、必要なルーティングの複雑さに関してかなりの頭痛の種になります。

したがって、使用と欠点を十分に考慮せずにこの手法を使用することはお勧めしません。

そこから始めるためのヒントがいくつかあるかもしれません:

楽しむ!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.