HAProxy (як і багато балансири навантаження), як правило, підтримують дві розмови. Проксі має сеанс (tcp в даному випадку) з клієнтом та ще один сеанс із сервером. Тому в проксі-сервісах ви бачите 2x підключення на балансирі навантаження. Тому весь трафік протікає через балансир навантаження.
Що стосується масштабування на декількох балансирах навантаження, я не думаю, що цього потрібно. Але практичний і досить простий спосіб зробити це - використовувати щось на кшталт keepalived з двома плаваючими IP-адресами та круговим DNS- кодом між цими двома IP-адресами. Якщо зберегтись, якщо один з балансирів навантаження знизиться, інший утримує обидва IP-адреси, тож ви отримаєте високу доступність таким чином. Попри це, я думаю, ви будете добре з одним активним екземпляром haproxy зі своїм навантаженням.
HAProxy ваги дуже добре. Наприклад, мережа Stack Exchange використовує веб-розетки, які підтримують відкриті TCP-з'єднання. Поки я розміщую це повідомлення, у нас на віртуальній машині VMware 143 000 встановлених сокетів TCP без проблем. Використання процесора на VM становить близько 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