Назад | Перейти на главную страницу

Другие варианты «балансировки источника» в haproxy

У меня haproxy прослушивает несколько портов и указывает на несколько бэкэнд-серверов.

В идеале я бы хотел, чтобы повторяющиеся соединения с одним и тем же портом указывались на один и тот же бэкэнд.

"источник баланса" не работает, потому что часто запросы приходят из одного и того же источника.

Это выполнимо?

Я также открыт для решений, не связанных с haproxy. Используемый протокол не важен, но определенно не http. Просто предположите, что это ssh, и вы не ошибетесь.

РЕДАКТИРОВАТЬ: Чтобы уточнить, представьте, что у меня есть 10 «бэкэнд-серверов» и 5 «клиентов». Каждый внутренний сервер может справиться только с одним подключением за раз. У меня больше серверов, чем требуется, на случай, если некоторые из них станут недоступны. Я буду вручную указывать каждому клиенту порт (а) haproxy. Я хочу, чтобы каждый клиент всегда попадал на внутренний сервер (что просто), но предпочтительно на один и тот же каждый раз, пока он доступен.

Вот как я решил свою проблему.

frontend name_of_frontend
    bind *:20000-20010
    default_backend     servers

backend servers
    balance roundrobin
    stick-table type integer size 1k expire 3h
    stick on dst_port
    server name ip-address check maxconn 1
    ...
    server name ip-address check maxconn 1

В комментарии к предыдущему ответу Вилли предупредил, что это «не гарантирует, что каждый клиент перейдет на другой порт».

В моем конкретном случае я полностью контролирую своих «клиентов». Единственная причина, по которой я указываю им разные порты на прокси-сервере, - это то, что я могу идентифицировать их как разных клиентов. Это определенно не «публичная» система.

Haproxy не реализует постоянство ip: port, потому что в прокси это не имеет никакого смысла. Это имеет смысл в пакетном балансировщике нагрузки (например, LVS), поскольку он позволяет балансировать нагрузку без сохранения состояния с циклическим распределением и постоянством. Но в прокси-сервере соединения обязательно поддерживаются на обоих концах от начала до конца. Так что я действительно не знаю, чего именно вы пытаетесь достичь.

Если вам нужно просто отношение порт назначения -> сервер, это выглядит довольно странно, потому что вам нужно прослушивать гораздо больше портов, чем у вас есть серверов, чтобы получить плавную балансировку. Я действительно не уверен, что вы захотите это сделать.

Я не специалист по хапрокси, но знаю это делает есть другие варианты балансировки нагрузки помимо source (как минимум, есть циклический перебор). Я бы посоветовал проверить документацию HAProxy, чтобы узнать, каковы возможности и ограничения каждого режима балансировки нагрузки.

Вы также можете добиться желаемого, используя pf брандмауэр (в одном из его многочисленных воплощений - pfSense хорошо, если вам нужен графический интерфейс). Настройте балансировку нагрузки на брандмауэре (циклический или аналогичный) с помощью sticky-address набор опций, и у вас должна быть работоспособная настройка.