web-dev-qa-db-ja.com

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

VMを使用してホストされるようにアプリを設定しています(おそらくAmazonですが、それは石で設定されていません)。これには、HTTPロードバランシングと多数のロードバランシング(可能であれば50k程度)の両方が必要になる永続性TCP接続。データの量はそれほど多くはありませんが、頻繁に更新されます。

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

19
user122875

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

複数のロードバランサーにまたがるスケーリングに関しては、そうする必要はないと思います。しかし、これを行うための実用的でかなり簡単な方法は、twoフローティングIPおよびラウンドロビンDNSでkee​​palivedを使用することです。 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
33
Kyle Brandt

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

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

多分そこから始めるためのいくつかのヒントがあります:

楽しんで!

2
Andreas Balg

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

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

2
Khaled