使用ip_hash时,若是有众多用户使用相同的公网地址去访问同一个服务时,因为这些用户所使用的公网IP都为同一个,HAproxy就会把他们调度到同一后端的服务器,由此可能形成后天的单台服务器的压力过大,所以须要其余的方法来进行调度。
HAProxy能够实现插入一层cookie,当用户第一次访问会查看是否有cookie,若是没有就在响应报文中插入以程cookie返回给客户端,当用户再次访问就会根据cookie来调度请求。lvs和nginx没法实现html
为当前server指定cookie值,实现基于cookie的会话黏性linux
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
修改配置文件,添加cooke选项nginx
listen web bind 172.20.27.20:80 mode http cookie SERVER-COOKIE insert indirect nocache #插入cookie选项 option forwardfor server web1 192.168.27.21:80 cookie web1 check inter 3000 fall 3 rise 5 #在后端服务器中拆入cookie的值 server web2 192.168.27.22:80 cookie web2 check inter 3000 fall 3 rise 5
使用curl来查看报文头部web
[root@localhost ~]# curl -I www.mylinuxops.com HTTP/1.1 200 OK Server: nginx/1.17.0 Date: Tue, 04 Jun 2019 11:41:23 GMT Content-Type: text/html Content-Length: 8 Last-Modified: Tue, 04 Jun 2019 11:29:30 GMT ETag: "5cf6561a-8" Accept-Ranges: bytes Set-Cookie: SERVER-COOKIE=web2; path=/ #此为插入的cookie信息 Cache-control: private
因为curl命令没法记录cookie,接下来使用浏览器来访问后端