会话保持在负载均衡中是一个非常重要的功能,目前开源的组件Nginx和HAProxy都具备会话保持的功能,但是在实现上,两个组件又有些许区别
-
Nginx的会话保持一般有两种实现方式,一种是原生的ip_hash,一种是来自第三方的模块
nginx-sticky-module
。 -
经过上述验证得知,sticky模块支持的会话保持,会在首次请求的响应中添加Set-Cookie标识,用以记录请求转发至特定的后端服务器。当第二次请求携带该Cookie标识时,nginx会将该请求转发至上述特定的服务器,此时后端的服务器收到的请求头会包含该Cookie标识。
与Nginx的sticky不同的是,HAProxy的cookie会话保持,支持后端服务器对HAProxy设置的Cookie会话保持标识不可见,即其屏蔽了反向代理层会话保持标识的存在,还原了客户端原始的请求头部信息。
- HAProxy支持cookie insert,即当客户端首次请求时,HAProxy后在请求响应中,添加Set-Cookie的HTTP头部信息,并将该Cookie与后端服务器的关系存于缓存的cookie表中。结合配置indirect选项,当第二次客户端携带该Cookie发起请求时,HAProxy通过查询本地缓存的cookie表,删除请求头中自行设置的Cookie标识,将请求转发至对应的服务器。此时后端服务器接受到的请求,不会包含HAProxy设置的Cookie标识,对于后端服务器来说,这个过程是透明的,它并不知道前置负载均衡组件会话保持的行为。
...