会话保持可使得来自同一 IP(网段)的请求被转发到同一台后端服务器上。默认情况下,负载均衡会将每个请求分别路由到不同后端服务器实例负载。但是,您可以使用会话保持功能使特定用户的请求被路由到同一台后端服务器实例上,这样可以使某些需要保持会话的应用程序(如购物车)合理地工作。
四层会话保持
四层转发情境支持简单会话保持能力,会话保持时间可设为 0-3600
秒中的任意整数值,超过该时间阀值,会话中无新请求则断开连接。
七层会话保持
七层转发情境支持基于 cookie 插入的会话保持能力(由负载均衡器向客户端植入 cookie)。
会话保持时间暂时不支持可调整,默认为 75
秒。超过该时间阀值,会话中无新请求则断开连接。关于插入 cookie 会话保持的更多信息可以参考这里。
配置会话保持
在创建负载均衡监听器时,“高级配置”配置中,选择开启“会话保持”,调整“保持时间”。
长连接和会话保持的关系
场景1:HTTP 七层业务
假设 Client 端访问是 HTTP/1.1 协议,头部信息中设置 Connection:keep-alive。通过 CLB,再访问到后端 CVM,此时不开会话保持,下一次访问,能否访问到同一台 CVM?
答:不能。
首先,HTTP keep-alive 是指 TCP 连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。CLB 集群的默认超时时间是 75s(75s 内无新请求刷新,则默认断开 TCP 连接)。
HTTP keep-alive 是由 Client 端跟 CLB 建立的,若此时没有开启 cookie 会话保持,则下一次访问,CLB会根据轮询策略,随机挑选后端的一台CVM,此前的长连接等于白费了。
因此建议开启会话保持。
当设置 cookie 会话保持的时间为 1000s 时,Client 端再次发起请求。由于距离上一次请求,已经超过了 75s,TCP的连接要重新建立。应用层判断 cookie,找到同一台 CVM,Client 访问的 CVM 还是上一次访问的那一台。
场景2:TCP 四层业务
假设 Client 端发起访问,传输层协议是 TCP,启用长连接。但没有开基于源 IP 的会话保持。下一次访问,同一个 Client,能否访问到同一个机器?
答:不一定。
首先,根据四层的实现机制,当 TCP 启用长连接时,如果该长连接一直没有断开,前后两次访问都是同一条连接,则可以访问到同一台机器。如果第二次访问时,第一条连接由于其他原因(网络重启、连接超时)被释放,这时第二次访问就有可能调度到其他后端云服务器上。且长连接默认全局的超时时间是 900s,即若没有新请求,则释放。