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

특정 구성으로 두 개의 백엔드 서버 앞에 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 구성 옵션에 있다고 가정합니다.



답변

공식 문서 : HAProxy를 사용한 액티브 패시브로드 밸런싱

defaults
  mode http
  option http-server-close
  timeout client 20s
  timeout server 20s
  timeout connect 4s

frontend ft_app
  bind 10.0.0.100:80 name app
  default_backend bk_app

backend bk_app
  server s1 10.0.0.1:80 check
  server s2 10.0.0.2:80 check backup

답변

그건 그렇고 나는 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