一个服务器中有多个IP的haproxy

一个服务器中有多个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

答案1

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

希望这能有所帮助,威利

相关内容