Servidores remotos de modo transparente TCP HAProxy

4

Tudo bem, então eu tenho uma caixa de servidor com o HAProxy instalado e preciso dele para encaminhar o tráfego para dois servidores MySQL. Ambos estão localizados em datacenters completamente diferentes. Funciona quando tenho isso removido da configuração: %código% No entanto, quando ativado, não consigo obter uma resposta dos servidores MySQL.

Eu tenho estas regras do IPTables no servidor HAProxy: source 0.0.0.0 usesrc clientip

E nenhuma conexão pode ser feita. No entanto, quando eu adiciono isso: iptables -t mangle -N DIVERT iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT iptables -t mangle -A DIVERT -j MARK --set-mark 111 iptables -t mangle -A DIVERT -j ACCEPT ip rule add dev eth0 fwmark 111 lookup 100 ip route add local 0.0.0.0/0 dev lo table 100

Funciona, mas o IP do cliente não está sendo enviado, apenas o IP do proxy.

Os servidores MySQL são configurados para ter o ip do servidor HAProxy como seu gateway padrão.

Não tenho certeza se isso é possível, estou brincando com isso há dias.

Minha configuração do HAProxy:

global
    log 127.0.0.1 local0 debug
    daemon

defaults
    log global
    retries 2
    #option dontlognull
    option tcp-smart-accept
    option tcp-smart-connect
    option tcplog
    option log-health-checks
    timeout connect 3000
    timeout server 5000
    timeout client 5000

frontend mysql-frontend
    bind 100.111.111.111:3306 transparent
    default_backend mysql-backend

backend mysql-backend
    mode tcp
    source 0.0.0.0 usesrc clientip
    option mysql-check user haproxy_check
    server mysql1 192.111.111.111:3306 check
    server mysql2 200.111.111.111:3306 check

Tabelas de rotas para um dos servidores MySQL:

iptables -A POSTROUTING -t nat -j MASQUERADE

Sysctl para a caixa HAProxy:

Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 100.111.111.111 0.0.0.0 UG 2 0 0 eth0 100.111.111.111 0.0.0.0 255.255.255.255 UH 2 0 0 eth0 192.111.111.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo

O módulo TProxy também é compilado no HAProxy, e os módulos do kernel necessários também estão habilitados.

Existe também apenas uma interface, eth0.

Por favor, deixe-me saber o que estou fazendo de errado, ou se isso é possível!

Obrigado!

    
por Rhododendron 08.07.2016 / 18:50

1 resposta

4

O modo transparente requer que o haproxy seja o gateway padrão dos servidores de backend. Servidores remotos não funcionam.

    
por 08.07.2016 / 19:48