HAProxy基于cookie实现客户端会话保持
使用ip_hash时,如果有众多用户使用相同的公网地址去访问同一个服务时,由于这些用户所使用的公网IP都为同一个,HAproxy就会把他们调度到同一后端的服务器,由此可能造成后天的单台服务器的压力过大,因此需要其他的方法来进行调度。
HAProxy可以实现插入一层cookie,当用户第一次访问会查看是否有cookie,如果没有就在响应报文中插入以程cookie返回给客户端,当用户再次访问就会根据cookie来调度请求。lvs和nginx无法实现
cookie
为当前server指定cookie值,实现基于cookie的会话黏性
cookie NAME [rewrite|insert|prefix] [indirect] [nocache] [postonly] [preserve] [httponly] [secure] [domain <domain>] [maxidle<idle>] [maxlife<life>]
NAME: cookie名称,用于持久连接
rewrite: 重写。如果之前有cookie就会覆盖了重写,或插入到前缀上
insert: 插入
prefix: 前缀
nocache: 当client和haproxy之间有缓存存在时,不缓存cookie
基于cookie实现会保持
修改配置文件,添加cooke选项
backend app
balance roundrobin
cookie Haproxy_Cookie insert nocache #定义一个key
#未服务器打赏标签 为value
server app1 192.168.1.254:80 check cookie web1
server app2 192.168.1.254:81 check cookie web2
haproxy实现cookie植入,实现会话保持:
1.定义key: SERVERID
2.定义value:为server段中的每个节点起一个名称; cookie name
3.当用户请求时,haproxy会下发一个httpheader信息, Set-Cookies: SERVERID:web01
4.当浏览器在次请求haproxy会在request中增加一个header: cookie: SERVERID:web1
5.已便实现会话保持的方案:
ip_hash: 基于来源ip进行hash取模,已便实现会话保持;
cookie植入:haproxy很容易实现,Nginx也可以实现,需要三方模块(自行完成一下)
session共享:基于Redis实现;