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