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