我使用 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 算法、相同的健康检查等...
希望这能有所帮助,威利