Como usar o Docker com o HAProxy + Keepalived?

1

Eu quero praticar na criação de aplicativos da web de alta disponibilidade usando vários contêineres do Docker em uma única máquina.

Eu inicio vários servidores web nos contêineres do Docker. Digamos, três servidores rest1 , rest2 e rest3 .

Eu uso o Docker com o balanceador HAProxy, que é vinculado a 127.0.0.1:80 e direciona as consultas para rest servers. Isso me permite ter certeza de que quando um ou dois rest servidores falharem, poderei fazer consultas para 127.0.0.1:80 e receber resultados corretos.

O ruim é: quando o HAProxy está desativado, o aplicativo da web está inativo.

Eu quero usar vários contêineres HAProxy Docker com serviço Keepalived em cada contêiner. O problema é: eu preciso de vários contêineres do Docker para ouvir um IP e uma porta. Por exemplo, eu terei haproxy1 e haproxy2 , que serão vinculados a localhost via Keepalived.

Quando eu defino o IP no arquivo de configuração HAProxy, que não é um IP do contêiner atual do Docker, ele me mostra um erro, que o HAProxy não pode escutar esse IP e PORT.

É possível configurar vários contêineres Docker com HAProxy e Keepalived para escutar um IP e PORT?

Configuração do HAProxy:

defaults
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend http-in
    mode http
    bind 172.17.0.10:80
    default_backend BACKEND

backend BACKEND
    option httpchk
    server rest1 rest1:8080 maxconn 32 check
    server rest2 rest2:8080 maxconn 32 check
    server rest3 rest3:8080 maxconn 32 check

falha com erro

Starting frontend http-in: cannot bind socket [172.17.0.10:80]

172.17.0.10 é membro da sub-rede do Docker e não está reservado na minha máquina.

    
por Charlie 17.05.2016 / 10:36

1 resposta

1

Pode ser necessário ativar a ligação não local no host do docker.

Adicione net.ipv4.ip_nonlocal_bind=1 ao final do arquivo /etc/sysctl.conf e force o recarregamento do arquivo com o comando sudo sysctl -p .

    
por 06.03.2017 / 22:57