haproxy 和持久连接

haproxy 和持久连接

我使用 HAproxy 在多个 Web 服务器之间进行负载平衡。这些 Web 服务器使用 PHP 和会话来保持会话打开。

现在我思考当用户刷新页面时,它会被发送到其中一个服务器,但是,如果他被发送到不同的服务器,他当然会丢失他的会话,不是吗?

问题主要是:如何让客户端连接到同一个服务器?

这是我的后端配置。

backend social_backend
mode http
option httplog
option http-server-close
option forceclose
no option httpclose
balance roundrobin
option forwardfor
timeout queue 5000
timeout server 86400000
timeout connect 86400000
timeout check 1s

server socket1 10.10.10.1:81 weight 1 maxconn 1024 check
server socket2 10.10.10.2:81 weight 1 maxconn 1024 check
server socket3 10.10.10.3:81 weight 1 maxconn 1024 check

答案1

您正在寻找的是“粘性会话”,您可以使用appsessionHAProxy 中的参数来启用它:

appsession <cookie> len <length> timeout <holdtime> 
           [request-learn] [prefix] [mode <path-parameters|query-string>]

当在后端中定义应用程序 cookie 时,HAProxy 将检查服务器何时设置此类 cookie,并将其值存储在表中,并将其与服务器的标识符相关联。将保留来自值的最多 字符。在每个连接上,haproxy 将在“Cookie:”标头和 URL 参数中查找此 cookie(取决于使用的模式)。如果找到已知值,客户端将被定向到与此值关联的服务器。否则,将应用负载平衡算法。当 Cookie 未使用的时间超过 时,它们会自动从内存中删除。

每个后端的应用程序 cookie 定义仅限于一个。

例如:appsession JSESSIONID len 52 超时 3h

参考 HAProxy文档更多细节。

相关内容