떼 배포로서의 haproxy 피어

떼 배포로서의 haproxy 피어

Swarm 및 haproxy를 사용하여 활성-활성 클러스터를 설정하려고 합니다. 호스트 이름과 IP 주소를 고려하므로 피어 정의에 어려움을 겪고 있습니다. 떼를 사용하면 약간 까다로울 수 있습니다.

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 주소 대신 서비스 이름을 사용하십시오.

관련 정보