各位朋友,
我把我们的一个 SaaS 应用程序从 Coyote Point 硬件负载均衡器移到了运行 nginx + haproxy 的虚拟机上,并使用 haproxy 处理哈希持久性。
我遇到的问题是应用程序需要会话粘性到单个后端服务器(无论哪个接受原始请求),但是当我更改 haproxy.cfg 并执行 service haproxy reload 时,它会将 haproxy 作为新进程重新启动并终止旧进程,从而终止与特定后端服务器的任何现有连接,这意味着任何用户都会立即从应用程序中注销。
这是 HA-Proxy 版本 1.5.4 2014/09/02 的 haproxy 后端配置
backend webapp
balance hdr(X-Real-IP)
hash-type consistent
mode http
server server1 192.168.10.50:8080 check port 8080
server server2 192.168.10.53:8080 check port 8080
server server3 192.168.10.55:8080 check port 8080
server server4 192.168.10.62:8080 check port 8080 backup
这对我们来说是一个大问题,因为当我需要对特定后端服务器执行维护,或者从后端池中添加/删除其他服务器时,我无法在不影响应用程序客户端体验的情况下执行此操作。
如果 Haproxy 无法正常重新加载,我该如何动态地更改后端的服务器,而不终止与我不会更改的后端的现有会话?
答案1
如果为服务器定义了一个对等体,即使它只有一个并且是本地的,那么在每个soft restart
haproxy 中,状态都应该复制到新的进程中。