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
6.2、基于web管理haproxy
Haproxy有统计报告功能,可以让使用者通过web页面概览后端服务器的概况,甚至更改他们的状态
6.2.1、状态页配置
#stats settings
listen haproxy-stats
mode tcp
bind *:80
stats enable #启用stats功能
stats refresh 5s #设定自动刷新时间间隔
stats hide-version #隐藏haproxy版本
stats uri /haproxy?stats #stats页面的访问路径
stats realm "HAProxy stats" #认证信息提示
stats auth qingchen:123456 #认证的账号和密码
stats admin if TRUE #启用管理功能
6.2.2、状态页登录
通过http://IP:port/haproxy?stats访问该页面
6.3、基于socat管理haproxy
6.3.1、安装socat
yum install -y socat
6.3.2、修改配置文件
vim /etc/haproxy/haproxy.cfg
global
#turn on stats unix socket
stats socket /var/lib/haproxy/stats level admin
systemctl restart haproxy
6.3.3、实现主机动态下上线
配置
frontend proxy.qingchen.com
bind *:80-88
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
#获取详情
echo "show info" | socat stdio /var/lib/haproxy/stats
#动态下线主机
echo "disable server webservers/web1" | socat stdio /var/lib/haproxy/stats
#动态上线主机
echo "enable server webservers/web1" | socat stdio /var/lib/haproxy/stats
6.3.4、脚本实现动态上下线
执行前做相互免密
免密,将10.0.0.9主机与所有的节点进行免密登录;
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.5
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.6
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
#!/bin/bash
#集群节点
web_cluster="172.16.1.6 172.16.1.7 172.16.1.8"
#lb节点的IP
lb_server="172.16.1.5"
#集群资源池名称
cluster="webservers"
#节点的代码路径
webdir=/proxy
for host in ${web_cluster}
do
#1、登录负载均衡
ssh root@${lb_server} "echo 'disable server ${cluster}/${host}' | socat stdio /var/lib/haproxy/stats"
#2、更新节点代码
scp ./index.html.${host} root@${host}:${webdir}/index.html
sleep 2
#3、登录负载均衡,动态加入节点
ssh root@${lb_server} "echo 'enable server ${cluster}/${host}' | socat stdio /var/lib/haproxy/stats"
#4、等待几秒钟
sleep 5
done
标签:Haproxy,haproxy,stats,六月,高级,cookie,ssh,172.16,server
From: https://blog.51cto.com/u_13236892/6636443