会话保持可使得来自同一 IP 的请求被转发到同一台后端服务器上。默认情况下,负载均衡会将每个请求分别路由到不同后端服务器实例负载。但是,您可以使用会话保持功能使特定用户的请求被路由到同一台后端服务器实例上,这样可以使某些需要保持会话的应用程序(如购物车)合理地工作。七层协议(HTTP/HTTPS)支持基于 Cookie 插入的会话保持能力(由负载均衡器向客户端植入 Cookie)。基于cookie的会话保持目前支持2种:1.insert模式。2.rewrite模式
Insert模式会话保持
原理
植入Cookie:客户端第一次访问时,ALB会在返回请求中植入Cookie(即在HTTP/HTTPS响应报文中插入SERVERID),访问时保存返回的cookie,下次客户端携带此Cookie访问,负载均衡服务会将请求定向转发给之前记录到的后端服务器上
insert模式下,访问LB回包时LB会植入一个lbinsertroute的cookie名称,并写入cookie值(不需要后端target中nginx配置cookie)
验证方法
1.创建insert会话保持的target-group,并配置超时时间
2.访问并获取保存cookie,cookie为lbinsertroute名称的cookie
curl -c cookie.txt 100.124.23.71:18191
访问端通过wireshark抓包查看cookie是否更新
访问时获取的cookie保存
3.使用该cookie连续访问
//cookie超时时间内,访问保持在同一个target,超时后按照tg的算法分配
Rewrite模式会话保持
原理
重写Cookie:当ALB发现用户自定义了Cookie,将会对原来的Cookie进行重写,下次客户端携带新的Cookie访问,ALB会将请求定向转发给之前记录的后端服务器
后端target中配置了cookie时,如果rewrite模式且名称与target配置一致(子集也行),LB就会对配置的cookie名称进行重写,如果不一致则直接把target返回包里的cookie返回。(需要后端target中nginx配置cookie)
验证方法
1.配置会话保持模式为rewrite,并配置cookieName
后端target配置set-cookie,名称与cookieName一致
2.访问并保存cookie,访问时会返回配置的cookieName的cookie,不同target返回的cookie值不同
curl -c cookie.txt 100.124.23.71:18191
访问端通过wireshark抓包查看cookie是否更新
3.带对应的cookie访问,请求转发给之前记录的target