Використовуючи балансування навантаження TCP з HAProxy, чи проходить весь вихідний трафік через LB?


19

Я налаштовую додаток для розміщення за допомогою VM (можливо, Amazon, але це не встановлено в камені), який вимагатиме як балансування навантаження HTTP, так і збалансування навантаження великої кількості (якщо можливо, 50 кб) постійних TCP-з'єднань. Кількість даних не все така велика, але оновлення часті.

Зараз я оцінюю балансири навантажень і трохи розгублений щодо архітектури HAProxy. Якщо я використовую HAProxy для балансування TCP-з'єднань, чи повинен весь отриманий трафік протікати через балансир навантаження? Якщо так, чи краще підходить інше рішення (наприклад, LVS або навіть nginx_tcp_proxy_module)?

Відповіді:


33

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

що 143 000 - це все ще говорить про веб-розетки? чи це теж інші речі?
Марк Гравелл

@MarcGravell: Практично всі веб-розетки. Майте на увазі, що це 2 рази, хоча, як я вже говорив у своєму вступі, тому сервери веб-сокетів побачили б усього ~ 70 к
Кайл Брандт,

@Kyle - Будь-які причини, чому вам потрібні веб-розетки та стійкі TCP-з'єднання? Здається, цей веб-сайт не має функцій у режимі реального часу, які потребували б цього.
Продовження

@ Продовження: Існує велика кількість функцій у реальному часі, зокрема сповіщення про вхідні, голосування, редагування, нові коментарі / відповіді / питання. Не впевнені, чи вони ввімкнуті лише для користувачів з певним обмеженням повторень, якщо ви їх не бачите, ви можете запитати на meta.stackoverflow.com
Kyle Brandt

1
@KyleBrandt чи працює це і в режимі TCP?
elslooo

2

Так, весь рух повинен нормально проходити через балансир навантаження. Запити отримує балансир навантаження, а відповіді надсилаються назад до балансира навантаження, який надсилає їх назад клієнтам.

Для вибору правильного інструменту я не маю великого досвіду щодо інших варіантів. Я використовую haproxy, і він справді хороший і стабільний і може обробляти велику кількість трафіку. Також його можливості ACL чудові.


2

Існує можливість використовувати і налаштувати DSR (Direct Server Return), але це не має нічого спільного з Loadbalancer, але налаштовано в tcp-стек (таблиці маршрутизації). Ми використовуємо це для великого порталу відеозйомки. Хоча це працює, це доставить вам велику кількість головного болю щодо складності маршрутизації, необхідної.

Тому я б не рекомендував використовувати цю техніку, не розглядаючи використання та недоліки дуже ретельно.

Можливо, є кілька підказок, щоб почати там:

Веселіться!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.