HAProxy 在出现 500 错误和/或服务器宕机时切换到备份

HAProxy 在出现 500 错误和/或服务器宕机时切换到备份

我仅在 2 台后端服务器前设置了一个 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)已启动,所有请求也会被路由到服务器 node_back(B)。
  2. 似乎没有针对服务器 A 执行任何 httpchecks;或者更好的是,在 syslog 中我没有看到有关服务器 A 关闭的任何错误。

如果我删除“option httpchk”行,以及其下方的两行;并且我还删除服务器 A 中的“observe layer7”;HAProxy 会通过将所有请求路由到节点 A 来工作。但是,显然,当服务器 A 返回 500 时,HAProxy 不会切换到 B。所以,我假设问题可能出在 option httpchk 配置中。

答案1

来自官方文档:使用 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

答案2

顺便说一下,我找到了我的 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

相关内容