一台服务器上有多个 IP 的 haproxy

den*_*den 2 ip haproxy

我使用 haproxy 对多个虚拟机(Web 服务)进行负载均衡。每个虚拟机都有多个 IP 地址。

在 haproxy 上进行设置的最佳做法是什么?现在我的配置是虚拟机的每个IP在haproxy上都有一个条目“listen”,对应的两个真实服务器。

请问它是否可以像多个“监听”和只有两个后端服务器一样修改。因为所有“侦听 IP”仅转发到同一虚拟机。

global
    chroot /var/lib/haproxy
    pidfile /var/run/haproxy.pid
    stats socket /var/run/haproxy.stat mode 666
    maxconn 4096
    user haproxy
    group haproxy
    daemon

defaults
    mode http
    log global

    log 127.0.0.1 local0 notice
    option dontlognull
    option redispatch
    timeout connect 10000 # default 10 second time out if a backend is not foun
    timeout client 300000
    timeout server 300000
    maxconn 60000
    retries 3

listen stats

    bind xx.xxx.xxx.xxx:8888
    stats uri /
    stats realm Haproxy\ Statistics
    stats auth user:pass
    stats refresh 20

    listen server 66.xxx.xxx.36:80
    mode http
    balance roundrobin
    cookie SERVERID insert nocache indirect
    option http-server-close
    option forwardfor
    option httplog
    server server1 66.xxx.xxx.66:80 cookie sv1 check inter 5s rise 2 fall 5
    server server2 66.xxx.xxx.68:80 cookie sv2 check inter 5s rise 2 fall 5

    listen app 66.xxx.xxx.36:80
    mode http
    balance roundrobin
    cookie SERVERID insert nocache indirect
    option http-server-close
    option forwardfor
    option httplog
    server app1 66.xxx.xxx.66:80 cookie ap1 check inter 5s rise 2 fall 5
    server app2 66.xxx.xxx.68:80 cookie ap2 check inter 5s rise 2 fall 5
Run Code Online (Sandbox Code Playgroud)

Wil*_*eau 6

你可以做两件事。首先,您可以在“侦听”或“前端”部分中拥有任意数量的“绑定”行。因此,如果唯一改变的是 IP,那么这是最好的做法。其次,如果您有任何理由对每个 IP 应用不同的处理(例如:不同的 ACL 或重写规则),那么您应该使用“前端”+“后端”而不是“侦听”。“听”部分完全是前端加上后端,两者都在同一部分中。通过拥有多个前端,您可以定义您想要对每个 IP 地址进行何种类型的处理,并使它们都使用相同的后端(使用“default_backend”规则)。而你所有的服务器只会被放置在这个单一的后端,具有相同的 cookie 名称、相同的 LB 算法、相同的健康检查等......

希望这会有所帮助,威利