500 오류 및 / 또는 서버 다운시 백업 할 HAProxy 스위치


8

특정 구성으로 두 개의 백엔드 서버 앞에 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

그러나 두 가지 이유로 작동하지 않습니다.

  1. node1 (A)이 작동하더라도 모든 요청은 server node_back (B)으로 라우팅됩니다.
  2. 서버 A에 대해 httpchecks가 수행되지 않는 것 같습니다. 또는 더 나은, syslog에서 서버 다운에 관한 오류가 표시되지 않습니다.

"옵션 httpchk"줄을 제거하면 바로 아래 두 줄이 나타납니다. 서버 A에서 "observe layer7"도 제거합니다. HAProxy는 모든 요청을 노드 A로 라우팅하여 작동합니다. 그러나 서버 A가 500을 반환하면 HAProxy는 B로 전환되지 않습니다. 따라서 문제는 httpchk 구성 옵션에 있다고 가정합니다.


1
nginx로 완벽하게 가능합니다. 사실, nginx는 웹 서버이기 때문에 더 유연하고 간단하기 때문에 웹 밸런싱에서 haproxy를 피하고 있습니다. 그러나 초기 질문은 haproxy에 관한 것이기 때문에 nginx에 대한 답변을 제공 할 권리가 없습니다. 그러나 원한다면 할 수 있습니다. 어쨌든 거의 1 년이 지났지 만 어쨌든 해결책을 찾았습니다.
drookie

답변:



0

그건 그렇고 나는 haproxy에 대한 nginx 사전 구성을 찾았으며 시도해보아야한다고 생각합니다.

frontend foo
    bind 192.168.0.1:9080
    option httpchk
    default_backend bar-web

backend bar-web
    mode http
    balance roundrobin
    server bar1 192.168.1.2:9080 check observe layer4 weight 50
    server bar2 192.168.1.3:9080 check observe layer4 weight 50
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.