haproxy 對等體作為叢集部署

haproxy 對等體作為叢集部署

我正在嘗試使用 swarm 和 haproxy 建立一個主動-主動叢集。我正在努力解決對等定義,因為它考慮了主機名稱和 IP 位址。對於 swarm,這可能有點棘手。

我想對代理上的連接埠使用主機模式,以便可以使用 DNS 和 tcp roundrobin 將流量路由到代理節點。

 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 } }

在 haproxy.cfg 中,我定義了一個對等部分。

peers layer7-loadbalancer
    bind *:1024
    server hostname1.bloom.com
    server hostname2.bloom.com 10.128.0.2:1024  # (ip of real host)

這似乎適用於本地同行。但我認為它實際上是使用容器IP。我也不能真正從中產生副本。

所以我嘗試另一種語法。當像這樣編寫時,HAProxy 將從與主機名稱相符的對等名稱綁定 IP:port。

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)

但我收到錯誤。

Starting proxy hostname1.bloom.com: 
cannot bind socket (Cannot assign requested address) [10.128.0.1:1024]

這是有道理的,因為容器 IP 實際上不是主機 IP。這就是為什麼這個位址不能從容器內部綁定的原因。

此時,我不太確定該如何解決這個問題。

答案1

您已啟用dns(dns:127.0.0.11),因此請使用服務名稱而非對等線路中的ip位址。

相關內容