У меня настроен haproxy с keepalived для балансировки нагрузки и ip failover кластера percona, и, поскольку он отлично работает, я бы хотел использовать тот же lb / failover для другого сервиса / демона.
Я настроил haproxy следующим образом:
listen my_service 0.0.0.0:4567
mode tcp
balance leastconn
option tcpka
contimeout 500000
clitimeout 500000
srvtimeout 500000
server host1 xxx.xxx.xxx.xx1:4567 check port 4567 inter 5000 rise 3 fall 3
server host2 xxx.xxx.xxx.xx2:4567 check port 4567 inter 5000 rise 3 fall 3
Балансировка нагрузки работает нормально, но служба видит IP балансировщика нагрузки вместо фактических IP-адресов клиентов. В режиме http довольно легко передать haproxy по удаленному IP, но как мне это сделать в режиме tcp? Это очень важно из-за характера услуг, которые мне нужны для балансировки нагрузки.
Спасибо! Vito
load-balancing
haproxy
Вито Ботта
источник
источник
Ответы:
Просто для будущих ссылок, keepalived - это решение для отработки отказа, а не для балансировки нагрузки (может быть, вы имеете в виду LVS?). режим прозрачного прокси-сервера для HAProxy не имеет ничего общего с каким-либо особым способом отправки исходного IP, который был бы обычным непрозрачным режимом HTTP, где для этого можно использовать стандартизированный заголовок HTTP.
На мой взгляд, правильный ответ на оригинальный вопрос таков: вы можете скомпилировать поддержку прозрачного прокси в HAProxy на ядре Linux с поддержкой TPROXY. Это вместе с надлежащей версией поддержки TPROXY + конфигурация iptables на том же компьютере обеспечивает реальную полностью прозрачную поддержку tcp прокси. Это означает, что внутренние серверы НЕ нуждаются в специальной настройке.
Обратите внимание, что это на самом деле не рекомендуемая настройка для HAProxy и должна использоваться только в случае крайней необходимости.
источник
Очевидно, существует какой-то «прозрачный» режим для haproxy, на который я никогда не смотрел и не хотел иметь ничего общего, который вы могли бы попробовать. В противном случае вам нужно будет научить любой бэкэнд-сервис особым способам haproxy отправлять исходный IP («ПРОКСИ-бла») и заставить службу извлекать из этого исходный IP-адрес.
Почему вы беспокоитесь о haproxy? Вы уже активировали keepalive, и он также выполняет правильную прозрачную балансировку нагрузки.
источник
Использование
send-proxy
в вашей конфигурации (для каждого сервера) даст вам исходный IP-адрес источника на стороне принимающего сервера, даже в режиме TCP. Для этого требуется HAProxy 1.5+.Вы можете найти больше информации о Proxy Protocol в документации HAProxy .
источник
Вы можете установить HAProxy в качестве режима NAT, который все еще использует режим TCP на уровне 4, но делает IP-адрес прозрачным.
С другой стороны, HAPorxy Transparent Mode использует HTTP-режим на уровне 7, который не затрагивает вашу точку зрения, поскольку
forwardfor
в HTTP-режиме уже есть опция.источник
Эта конфигурация работала для меня. Исходный IP-адрес можно получить в $ _SERVER ['HTTP_X_FORWARDED_FOR']:
источник