我正在使用HAproxy在更多的Web服务器之间进行负载平衡。 这些Web服务器正在使用PHP和会话来保持会话打开。
现在,我认为当用户刷新页面时,会将其发送到其中一个服务器,但是如果他被发送到不同的服务器,他当然会放松会话,不是吗?
问题主要是:如何才能使客户端连接到相同的服务器?
这是我的后端configuration。
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
您正在寻找的是“粘性会话”,您可以使用HAProxy中的appsession参数来启用:
appsession <cookie> len <length> timeout <holdtime> [request-learn] [prefix] [mode <path-parameters|query-string>]
在后台定义应用程序cookie时,HAProxy会检查服务器何时设置这样一个cookie,并将其值存储在一个表中,并将其与服务器的标识符相关联。 最多从该值的字符将被保留。 在每个连接上,haproxy都会在“Cookie:”标题中查找这个cookie,并作为一个URL参数(取决于所使用的模式)。 如果find一个已知的值,客户端将被定向到与该值关联的服务器。 否则,应用负载平衡algorithm。 当cookie被闲置超过一段时间时,它会自动从内存中删除。
应用程序cookie的定义仅限于每个后端一个。
示例:appsession JSESSIONID len 52 timeout 3h
有关更多详细信息,请参阅HAProxy 文档 。