六月学习之Haproxy高级功能(基于cookie会话保持)
精选
原创
©著作权归作者所有:来自51CTO博客作者哭泣的馒头的原创作品,请联系作者获取转载授权,否则将追究法律责任
6、Haproxy高级功能
6.1、基于cockie会话保持
在backend服务器组启用cookie植入功能
haproxy会将后端服务器定义的serverID植入到客户端的cookie中,以保持会话的持久性,需要设置backend中的cookie以及server指定的cookie选项
6.1.1、配置示例
1、配置haproxy基于cookie实现会话绑定
#main frontend which proxy to the backends
frontend proxy.qingchen.com
bind *:80
mode http
use_backend webcluster
#round robin balancing between the various backends
backend webcluster
balance roundrobin
#回传数据时添加Set-Cookie,Key为SERVERID,Value为节点定义cookie值
cookie SERVERID insert nocache
#为每个服务器定义一个cookie名称标识
server web01 172.16.1.7:8888 check port 8888 inter 3s rise 2 fall 3 maxconn 2000 maxqueue 1000 weight 1 cookie web1
server web02 172.16.1.8:8888 check port 8888 inter 3s rise 2 fall 3 maxconn 2000 maxqueue 1000 weight 1 cookie web2
6.1.2、验证session
客户端第一次请求,haproxy会挑选一个节点响应,并会通过Set-Cookies返回该响应的是哪台后端节点
1、定义key: SERVERID
2、定义value:为server段中的每个节点起一个名称:cookie name
3、当用户请求时,haproxy会下发一个httpheader信息,Set-Cookies:SERVERID:web1
4、当浏览器再次请求haproxy会在request中增加一个header:cookie: SERVERID:web1
5、方便实现会话保持的方案
ip_hash:基于来源ip进行hash取模,以便实现会话保持
cookie植入:haproxy很容易实现,Nginx也可以实现,需要三方模块
session共享:基于Redis实现
6.1.3、redispatch参数
当使用了cookie持久化连接时,haproxy将会将其请求的后端服务器定义的SERVERID插入到客户端的cookie中,以保持会话的持久性
而此时,如果后端的服务器宕机了,但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个正常的后端server上,以保证服务的正常
cookie植入实现会话保持,完整配置示例
vim /etc/haproxy/haproxy.cfg
#main frontend which proxy to the backends
frontend proxy.qingchen.com
bind *:88
mode http
option forwardfor except 127.0.0.1
option redispatch #启用redispatch
maxconn 10000
use_backend webcluster
#round robin balancing between the various backends
backend webcluster
balance roundrobin
#回传数据时添加Set-Cookie,Key为SERVERID,Value为节点定义cookie值
cookie SERVERID insert nocache
#为每个服务器定义一个cookie名称标识
server web01 172.16.1.7:80 check cookie web1
server web02 172.16.1.8:80 check cookie web2