
Estoy intentando configurar un clúster activo-activo con enjambre y haproxy. Estoy luchando con la definición de pares, ya que tiene en cuenta el nombre de host y la dirección IP. Con enjambre esto puede ser un poco complicado.
Quiero usar el modo host para los puertos del proxy para poder enrutar el tráfico con DNS y tcp roundrobin a los nodos del proxy.
proxy:
image: "saps-proxy:5"
hostname: '{{.Node.Hostname}}'
dns: 127.0.0.11
ports:
- target: 80
published: 80
protocol: tcp
mode: host
- target: 443
published: 443
protocol: tcp
mode: host
- target: 1024
mode: host
protocol: tcp
deploy:
mode: global
placement: { constraints: ["node.labels.type == proxy"] }
resources: { limits: { memory: 2G } }
En haproxy.cfg estoy definiendo una sección de pares.
peers layer7-loadbalancer
bind *:1024
server hostname1.bloom.com
server hostname2.bloom.com 10.128.0.2:1024 # (ip of real host)
Esto parece funcionar para el par local. Pero creo que en realidad está usando la IP del contenedor. Tampoco puedo generar réplicas a partir de esto.
Entonces pruebo con otra sintaxis. Cuando se escribe así, HAProxy vinculará IP: puerto del nombre del par que coincide con el nombre de host.
peers layer7-loadbalancer
peer hostname1.bloom.com 10.128.0.1:1024 # (ip of real host)
peer hostname2.bloom.com 10.128.0.2:1024 # (ip of real host)
Aunque recibo un error.
Starting proxy hostname1.bloom.com:
cannot bind socket (Cannot assign requested address) [10.128.0.1:1024]
Esto tiene sentido porque la IP del contenedor en realidad no es la IP del host. Es por eso que esta dirección no se puede vincular desde el interior del contenedor.
En este punto, no estoy muy seguro de cómo solucionar esto.
Respuesta1
Ha habilitado dns (dns: 127.0.0.11), así que use el nombre del servicio en lugar de la dirección IP en la línea del mismo nivel.