Haproxy:我的会议是“有点”粘滞

Pound是HAProxy for SSL卸载的前面,所以HAProxy接收到plaints文本的HTTP请求。 我有HAProxy(v1.4.8)面前的两个networking应用程序服务器托pipe相同的应用程序。 以下是我的HAProxyconfiguration。

目前,客户端打HAProxy,并可以去任何服务器的最初的“GET /”请求的网站的根。 例如,一个客户端点击ServerA,从那时起,它们可能总是被ServerA或者ServerB服务,这个会话将会粘到A或者B上。 一个客户端初始请求可能会进入ServerB,在这个初始请求之后,它们将总是由ServerB或者ServerA来服务。 会议坚持,但有时在最初的请求后有这种变化,对所有未来的请求对面的服务器。

以下是我的HAProxyconfiguration。 我写错了吗?

listen app-servers 127.0.0.1:80 cookie ASP.NET_SessionId prefix balance url_param ASP.NET_SessionId balance roundrobin option persist option redispatch # Balance based on ASP .NET sesssion ID appsession ASP.NET_SessionId len 64 timeout 30m request-learn prefix # Active WebApp servers server appserver1 10.0.0.1:80 server appserver2 10.0.0.2:80 

谢谢。

如果您的应用程序对在会话中切换应用程序服务器的用户很敏感,那么您需要将粘滞保持时间设置为至less与会话Cookie的到期时间一样长。

您的粘性表设置为在30分钟后过期条目。 所以虽然你的用户可能会继续发送相同的会话ID,如果他们暂停超过30分钟,那么他们的连接将被重新平衡。 如果你不喜欢这种行为,4小时或更多的设置可能适合你。 正如我上面用粗体表示的那样,至less要将粘滞保持时间设置为至less与会话cookie的到期时间一样长。

当您使用cookie server insert选项时,您将添加没有到期时间的烹饪。 而这个cookie说明了要使用哪个服务器。 由于没有到期,客户端将永远不会被移动到另一个服务器。

但是你也需要问自己为什么在意。 切换到另一台服务器对用户的体验有很大的影响吗? 如果是这样,也许你应该认为这是你的Web应用程序的一个缺陷,并在该层解决它。 我可能是错的,但是想一想也是有点道理的。

我对这件事并不是非常高兴,但它是可靠的作品。 我已将Cookie插入到客户端请求中,而不是跟踪ASP .NET会话ID:

 listen app-servers 127.0.0.1:80 cookie server insert balance roundrobin option persist option redispatch server appserver1 10.0.0.1:80 cookie srv1 server appserver2 10.0.0.2:80 cookie srv2