HAProxy切换到出现500个错误和/或服务器关闭时进行备份


8

我在只有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执行任何httpcheck;或更好,在syslog中,我看不到有关服务器A关闭的任何错误。

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


1
用nginx完全可以做到。实际上,我避免在Web平衡上使用haproxy,因为Nginx是Web服务器,因此更加灵活和简单。但是,由于最初的问题是关于haproxy的,所以我无权提供有关nginx的答案。但是,如果您愿意,我可以。毕竟,快一年过去了,我想您还是找到了解决方案。
drookie

Answers:


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

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.