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