global配置参数
maxconn 100000 #每个haproxy进程的最大并发连接数
chroot /apps/haproxy #把haproxy锁定一个工作目录;当发生特殊情况,haproxy被控制时,也只能在锁定的目录下,不能跳转到其他目录
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin #指定socket文件路径及文件的权限
user haproxy
group haproxy
#uid 99
#gid 99 #99是nobody
daemon #以守护进程方式启动
nbproc 4 #haproxy工作进程数量;与CPU核心数量相对应
cpu-map 1 0 #第一个工作进程绑定在第0核CPU上
cpu-map 2 1 #第二个工作进程绑定在第1核CPU上
cpu-map 3 2
cpu-map 4 3
maxconn #每个haproxy进程的最大并发连接数
maxsslconn #每个haproxy进程ssl最大连接数,用于haproxy配置了证书的场景下
maxconnrate #每个进程每秒创建的最大连接数量
pidfile /var/lib/haproxy/haproxy.pid
spread-checks 3 #后端server状态检查,随机提前或延迟百分比时间,建议2-5(20%-50%)之间;设置当前检测时间为3s,则会提前3s的20%-50%,或者
延后3s的20%-50%;把同时探测的压力分散开
log 127.0.0.1 local3 info #生成的日志发送给本机的syslog服务器;最多可以定义两个;定义的是local3设备,所以需要在syslog服务器的配置文件中进行定
义;vim /etc/rsyslog.conf;添加local3.* /var/log/haproxy.log,记录local3设备的所有级别的日志到指定文件中;并且
需要开启$ModLoad imtcp、$InputTCPServerRun 514这两行,使用TCP协议进行日志转发;systemctl restart rsyslog
Proxies配置
defaults [<name>] #默认配置项,针对以下的frontend、backend和lsiten生效,可以多个name;defaults后面的name是一个可有可无的。
frontend <name> #前端servername,类似于Nginx的一个虚拟主机 server;后面必须有name。
backend <name> #后端服务器组,等于nginx的upstream;后面必须有name。
listen <name> #将frontend和backend合并在一起配置;后面必须有name。
注意1:name字段只能使用”-”、”_”、”.”、和”:”,并且严格区分大小写,例如:Web和web是完全不同的两组服务器。
注意2:如果frontend、listen中进行了配置,则以frontend、listen为准;如果frontend、listen中未进行配置,则以defaults配置为准。
Proxies配置-defaults
option redispatch #当server Id(real server)对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接;一般长时间处理的服务器(连接数据库等),需要关闭该选项
option http-keep-alive #开启与客户端的会话保持,在不超时的情况下,再次访问就不需要TCP三次握手建立连接
option forwardfor #透传客户端真实IP至后端web服务器
mode http #haproxy默认工作类型,基于应用层;如果后端服务器有自己的应用层协议,可单独在后端代理上定义协议类型;工作中一般为TCP
timeout connect 120s #客户端请求到后端server的最长连接等待时间(haproxy与后端服务器TCP三次握手之前)
timeout server 600s #客户端请求到后端服务端的超时超时时长(TCP之后);如果在600s后端服务器还未给haproxy返回,则会报502(后端服务器超时)
timeout client 600s #与客户端的最长非活动时间;600s内客户端没有向haproxy请求资源,则haproxy将会主动切断与客户端的连接
timeout http-keep-alive 120s #session 会话保持超时时间,范围内会转发到相同的后端服务器
timeout check 5s #对后端服务器的检测超时时间
Proxies配置-frontend
示例1:
1 frontend yewu-service-80 #前端的名字一般为:业务-服务-端口号
2 bind 192.168.38.37:80,192.168.38.37:81 #指定haproxy监听的IP及端口,可以是多个IP;也可以写成,IP:80-89,或者是sock文件
3 mode tcp #指定负载均衡协议类型
4 use_backend yewu-service-80-nodes #调用后端服务器组的名称
示例2:
1 frontend http_https_proxy #https监听
2 bind :80
3 bind :443 ssl crt /etc/haproxy/site.pem
Proxies配置-backend
定义一组后端服务器,backend服务器将被frontend进行调用。
server #定义后端real server
check #对指定real server进行健康状态检查,默认不开启
addr IP #可指定的健康状态监测IP
port num #指定的健康状态监测端口;一般先对后端重要的服务的端口进行检查,如果重要服务的端口存在,则进行后端服务器的负载均衡;一般反向代理的
IP和端口号与重要服务的IP不在同一个网段;如nginx与php,先检查后端nginx服务器的php的9000端口是否存在,存在才反向代理后端的nginx
服务器
inter num #健康状态检查间隔时间,默认2000ms
fall num #后端服务器失效检查次数,默认为3,失败3次,从后端服务器组里面踢出去;1次失败有可能是网络问题,所以设置为检测失败3次;检测的时候,
用户的请求也会往服务器进行转发,所以失败检测次数不能太多;被踢出去后,用户的请求将不会往该服务器转发
rise num #后端服务器从下线恢复检查次数,默认为2;后端服务器宕机,恢复后,检查成功2次后,重新添加到haproxy反向代理的服务器组里面
weight #默认为1,最大值为256,0表示不参与负载均衡
backup #将后端服务器标记为备份状态;当所有服务器都宕机时,backup服务器才会启动,相当于say sorry服务器
disabled #将后端服务器标记为不可用状态
redirect prefix http://www.xxx.net/ #将请求临时重定向至其它URL,只适用于http模式
maxconn <maxconn>:当前,后端server的最大并发连接数
backlog <backlog>:当server的连接数达到上限后的后援队列长度
示例:
1 backend yewu-service-80-nodes #指定后端服务器组的名称;一般为,前端名称-nodes
2 mode tcp #后端服务器组的协议类型必须与前端一致
3 server web1 192.168.38.27:80 weight 1 check addr 192.168.38.27 port 9000 inter 3s fall 3 rise 5 #反向代理前,先检查192.168.38.37:9000
端口是否可以访问,可访问才会进行反向代
理;如果9000端口不能访问,则不进行反向
代理
4 server web2 192.168.38.47:80 check #指定后端服务器的名称、IP、端口号,以及检查
使用listen替换frontend+backend的配置方式
1 listen yewu-service-80 #指定名称,业务-服务-端口号
2 bind 192.168.38.37:80 #指定haproxy所监听的IP及端口号
3 mode http #指定反向代理的协议类型
4 option forwardfor #把用户的IP透传给后端服务器
5 server web1 192.168.38.27:80 weight 1 check inter 3000 fall 3 rise 5 #指定后端服务器的名称、IP、端口号等
6 server web2 192.168.38.47:80 weight 1 check inter 3000 fall 3 rise 5