web-dev-qa-db-ja.com

64kを超えるWebSocket用にHAProxyをスケーリングする

私たちは、64kを超えるWebSocketを処理できるアーキテクチャを設計しようとしています。

最初にAmazonELBを試してみましたが、その設計では予期しないトラフィックの急増やWebSocketが許可されていません。 (TCPモードは予期せずWebSocketをタイムアウトします)

HAProxyでは、これらの制限は適用されませんが、HAとバックエンドサーバー間で維持されるWebSocketは最大64kに制限されます。

頭に浮かんだ複数の解決策:

  • 複数のHAProxyインスタンス、DNSとの負荷分散(Route53には加重オプションがあります)
  • Keepalivedを持つ2つのHAProxyインスタンス、複数の内部IPアドレス(実行可能かどうかは不明)

これを行うためのより良い方法はありますか?

8
Bastien974

64kの制限がソースポートによるものである場合は、次のようなことができます(少しハックですが、現在SEでWebSocketに対して行っています(通常はHAProxyと同時に.5百万のようなものがあります)。

server ny-web01-1 10.0.0.1:8081 check
server ny-web01-2 10.0.0.1:8082 check
server ny-web01-3 10.0.0.1:8083 check

また、keepalivedを使用して複数のインスタンスを実行できます。複数のIPを介したラウンドロビンDNSのようなことをするだけです。 DNS自体は負荷分散を提供しないため、IPが常にアクティブなロードバランサーによって取得されるようにしてください(ここにもオプションがありますが、これは単純です)。

7
Kyle Brandt

エニーキャストとBGP、またはその他のボーダールーティングプロトコルを使用して、同じIPを共有する複数のHAproxyシステムをセットアップできます。このようにして、すべてのHAproxyシステムがアクティブになります。これらのいずれかがダウンした場合、そのシステムでのBGPルートのアドバタイズを停止し、約30秒でトラフィックの受信を停止します。これは、同じ範囲をアドバタイズする他の利用可能なシステムに再配布されます。

たとえば、そのようなレイアウトを設定する方法について this urlを確認してください

0
Hrvoje Špoljar