会话保持

最近更新时间:2020-06-03 13:27:58

会话保持

会话保持可使得来自同一 IP(网段)的请求被转发到同一台后端服务器上。默认情况下,负载均衡会将每个请求分别路由到不同后端服务器实例负载。但是,您可以使用会话保持功能使特定用户的请求被路由到同一台后端服务器实例上。

四层会话保持

四层转发支持简单会话保持能力,可以设置会话保持的时间,超过该时间阀值,会话中无新请求则断开连接。

七层会话保持

HTTP/HTTPS 监听可使用植入 cookie 和重写 cookie 来进行会话保持。

植入cookie

植入 cookie 是指由负载均衡服务器来给客户端设置 cookie,即 HTTP/HTTPS 响应报文中插入 SERVERID 字串和客户配置时指定的超时时间,在此时间内会将同一客户端的请求传入到同一个后端服务器,当客户端浏览器再次通过此 cookie 访问时,负载均衡不会传给后端的服务器,即插入 cookie 关键字与值对后端服务器来说是不需要知道的。

重写cookie

重写 cookie 是指负载均衡实例的拥有者可以按照自己的需要自定义在后端的服务器回复 HTTP/HTTPS 响应中插入 cookie 关键字与值,后端的服务器上同时需要维护此 cookie 的会话保持时间,在此响应报文经过负载均衡时,负载均衡会基于一定规则重写 cookie 用于会话保持,当携带 cookie 关键字与值的请求到来时会将此 cookie 关键字与值传入到初始插入 cookie 的后端服务器;但与初始相比 cookie 值的内容已经改变。

长连接和会话保持的关系

场景1:HTTP 七层业务

假设客户端端访问是 HTTP/1.1 协议,头部信息中设置 Connection:keep-alive 。通过 SLB,再访问到后端 KEC,此时不开会话保持,下一次访问,能否访问到同一台 KEC?

答:不能。

HTTP keep-alive 是由客户端跟 SLB 建立的,若此时没有开启 cookie 会话保持,则下一次访问,SLB会根据轮询策略,随机挑选后端的一台 KEC,此前的长连接等于白费了。

因此建议开启会话保持。

场景2:TCP 四层业务

假设客户端发起访问,传输层协议是 TCP,启用长连接。但没有开基于源 IP 的会话保持。下一次访问,同一个客户端,能否访问到同一个机器?

答:不一定。

首先,根据四层的实现机制,当 TCP 启用长连接时,如果该长连接一直没有断开,前后两次访问都是同一条连接,则可以访问到同一台机器。如果第二次访问时,第一条连接由于其他原因(网络重启、连接超时)被释放,这时第二次访问就有可能调度到其他后端云服务器上。且长连接默认全局的超时时间是 900s,即若没有新请求,则释放。

金山云,开启您的云计算之旅

免费注册