특정 구성으로 두 개의 백엔드 서버 앞에 HAProxy를 설정하고 있습니다. 모든 요청은 서버 A로 이동해야합니다. 그러나 서버 A가 5xx 오류 코드를 반환하면 모든 요청이 백업 서버 B로 이동해야합니다. A가 "위로"를 반환하면 모든 요청이 A로 이동해야합니다.
이 구성을 시도하고 있습니다.
backend example_cluster
balance roundrobin
option httpclose
option forwardfor
option httpchk HEAD /ping.html HTTP/1.0\r\nHost:www.example.com
http-check disable-on-404
default-server error-limit 1 on-error mark-down
redirect scheme https if !{ ssl_fc }
server node1 1.2.3.4:80 check observe layer7
server node_back 5.6.7.8:443 backup ssl verify none
그러나 두 가지 이유로 작동하지 않습니다.
- node1 (A)이 작동하더라도 모든 요청은 server node_back (B)으로 라우팅됩니다.
- 서버 A에 대해 httpchecks가 수행되지 않는 것 같습니다. 또는 더 나은, syslog에서 서버 다운에 관한 오류가 표시되지 않습니다.
"옵션 httpchk"줄을 제거하면 바로 아래 두 줄이 나타납니다. 서버 A에서 "observe layer7"도 제거합니다. HAProxy는 모든 요청을 노드 A로 라우팅하여 작동합니다. 그러나 서버 A가 500을 반환하면 HAProxy는 B로 전환되지 않습니다. 따라서 문제는 httpchk 구성 옵션에 있다고 가정합니다.
1
nginx로 완벽하게 가능합니다. 사실, nginx는 웹 서버이기 때문에 더 유연하고 간단하기 때문에 웹 밸런싱에서 haproxy를 피하고 있습니다. 그러나 초기 질문은 haproxy에 관한 것이기 때문에 nginx에 대한 답변을 제공 할 권리가 없습니다. 그러나 원한다면 할 수 있습니다. 어쨌든 거의 1 년이 지났지 만 어쨌든 해결책을 찾았습니다.
—
drookie