根据功能和用途将haproxy分为了5个部分,这五个部分不都是必须的,可以根据需要选择就行了,只是将haproxy完整的配置分为了五个部分,这样配置起来全局感就会很强(本文只介绍五个部分作用,不对参数进行细说)
(1)global部分
用来设定全局配置参数,属于进程级的配置,通常和操作系统配置有关。
global
log 127.0.0.1 local2 info
pidfile /var/run/haproxy.pid
maxconn 4000 #每个haproxy进程可以接受的最多并发数
user haproxy
group haproxy
daemon #以后台形式运行ha-proxy
nbproc 1 #工作进程数量 cpu内核是几就写几
(2) defaults 部分
默认参数的配置部分。在此部分设置的参数值,默认会自动引用到下面的frontend、backend和listen部分中,因此,如果某些参数属于公用的配置,只需在defaults部分添加一次即可。而如果在frontend、backend和listen部分中也配置了与defaults部分一样的参数,那么defaults部分参数对应的值自动被覆盖。
defaults
mode http #工作模式 http ,tcp 是 4 层,http是 7 层
log global
retries 3 #健康检查。3次连接失败就认为服务器不可用,主要通过后面的check检查
option redispatch #服务不可用后重定向到其他健康服务器。
contimeout 5000 #ha服务器与后端服务器连接超时时间,单位毫秒ms
clitimeout 50000 #客户端超时
srvtimeout 50000 #后端服务器超时
(3)frontend部分
此部分用于设置接收用户请求的前端虚拟节点。frontend是在HAProxy 1.3版本之后才引入的一个组件,同时引入的还有backend组件。通过引入这些组件,在很大程度上简化了HAProxy配置文件的复杂性。frontend可以根据ACL规则直接指定要使用的后端backend。(front部分说的通俗一点就是:配置用户访问前端虚拟节点的属性信息,比如配置端口以及什么类型的访问)
frontend web
bind *:80 #监听哪个ip和什么端口
option httplog #日志类别 http 日志格式
acl html url_reg -i \.html$ #1.访问控制列表名称html。规则要求访问以html结尾的url(可选)
use_backend httpservers if html #2.如果满足acl html规则,则推送给后端服务器httpservers
default_backend httpservers #默认使用的服务器组
(4)backend部分
此部分用于设置集群后端服务集群的配置,也就是用来添加一组真实服务器,以处理前端用户的请求。添加的真实服务器类似于LVS中的real server节点。
backend主要是设置集群部分的配置,也就是设置后端有多少个集群节点,还有设置负载均衡的算法,以及对后端服务健康检查的一个设置,这些都需要在backend里面设置,frontend组件和backend组件引入之后简化了配置的复杂性
backend httpservers #名字要与上面的名字必须一样
balance roundrobin #负载均衡的方式
server http1 192.168.13.133:80 maxconn 2000 weight 1 check inter 1s rise 2 fall 2
server http2 192.168.13.137:80 maxconn 2000 weight 1 check inter 1s rise 2 fall 2
(5)listen部分
在1.3版本之前是没有fronted和backend的,这两个部分的内容是配置在listen里面,那么一个部分配置起来的内容会非常的多,读起来也非常的难懂。在1.3版本之后分成了backend fronted两个部分,分开之后可读性大大增加,但是还是可以去使用listener这么一个部分,listen部分可以使用也可以不使用
listen这个部分是早期fronted backend的结合,在新版本里面也可以使用也可以不使用
listen stats
bind *:81
stats enable
stats uri /haproxy #使用浏览器访问 http://192.168.246.169/haproxy,可以看到服务器状态
stats auth yjssjm:123 #用户认证,客户端使用elinks浏览器的时候不生效