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实现

六月学习之Haproxy高级功能(基于cookie会话保持)_客户端

六月学习之Haproxy高级功能(基于cookie会话保持)_服务器_02


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