HAProxy配置文件分成五个部分,主要介绍常用配置
1.global:设置全局配置参数,主要是进程、操作系统相关的配置
2.defaults:配置默认参数,这些参数可以被用到frontend、backend、listen组件
3.frontend:接收请求的前端虚拟节点,可以添加相应的规则匹配到后端backend
4.backend:后端真实服务器集群配置
5.listen:frontend和backend的组合

global组件

global
#以守护进程方式启动
daemon
#设置运行haproxy的用户和组
user haproxy
group haproxy
#设置haproxy启动时的进程数
nbproc 4
#每个进程支持的最大并发连接数
maxconn 20000
#设置最大打开文件描述符
ulimit-n 16384
#设置haproxy的pid文件
pidfile /var/run/haproxy.pid
#设置日志配置
log 127.0.0.1 local0 info

defaults组件

defaults
#访问协议,mode {http|tcp|health},http是七层模式 tcp是四层模式 health是健康检测
mode http
#日志配置,也可以使用 log global 引入全局配置
log 127.0.0.1 local0 error
#设置连接后端服务器失败重连次数,超过该值将会将对应服务器标记为不可用
retries 3
#启动日志记录HTTP请求,默认haproxy是不记录HTTP请求的
option httplog
#当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;
#而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。
option redispatch
#当服务器负载很高的时候,自动结束当前队列处理比较久的连接
option abortonclose
#启用该项,日志将不会记录空连接。官方建议如果上游服务器没有其他负载均衡器,建议不要使用该参数
option dontlognull
#客户端与服务端完成一次连接请求后,自动关闭此TCP连接
option httpclose
#连接超时(毫秒)
timeout connect 5000
#客户端超时(毫秒)
timeout client 5000
#服务器超时(毫秒)
timeout server 5000
#检查超时时间(毫秒)
timeout check 5000

frontend组件

#定义一个web前端部分
frontend myweb
#监听的端口
bind 0.0.0.0:80
#访问协议
mode http
#日志配置
log global
#允许插入X_forward_for数据包头给后端server,可让后端server获得客户端的真实IP
option forwardfor

#定义一个web_static_req的acl,当请求的url末尾是以.css .jpg .png .jpeg .js .gif结尾时,将会匹配
acl web_static_req /*.(css|jpg|png|jpeg|js|gif)$
#定义一个realserver_req的acl,当 static_server 中存活机器小于1时将会被匹配
acl realserver_req nbsrv(static_server) lt 1

#默认规则
default_backend web_server
#如果realserver_req满足,走backend web_server
use_backend web_server if realserver_req
#如果web_static_req满足,走backend static_server
use_backend static_server if web_static_req

backend组件

backend web_server
mode http
#轮询算法:roundrobin 权重算法:static-rr 最少连接算法:leastconn 请求源IP算法:source
balance roundrobin
#开启对后端服务器的健康检测
option httpchk GET /test/index.php
#后端真实服务器
check表示接受健康检测 inter表示健康检测间隔 rise表示检测成功多少次正常才算正常 fail表示检测多少次失败才算失败 weight表示分发权重 maxconn表示最大连接
server server1 172.18.0.2:3306 check inter 2000 rise 3 fall 3 weight 1 maxconn 2000
server server2 172.18.0.3:3306 check inter 2000 rise 3 fall 3 weight 1 maxconn 2000
server server3 172.18.0.4:3306 check inter 2000 rise 3 fall 3 weight 1 maxconn 2000

listen组件

listen admin_stats
bind 0.0.0.0:8888
mode http
log global
#haproxy统计页面刷新间隔
stats refresh 30s
#URI相对地址
stats uri /dbs
#统计报告格式
stats realm Global\ statistics
#登陆帐户信息 用户名:密码
stats auth admin:admin
#隐藏统计页面上的haproxy版本信息
stats hide-version

#数据库负载均衡
listen proxy-mysql
#访问的IP和端口
bind 0.0.0.0:3306
#网络协议
mode tcp
#负载均衡算法(轮询算法)
#轮询算法:roundrobin
#权重算法:static-rr
#最少连接算法:leastconn
#请求源IP算法:source
balance roundrobin
#日志格式
option tcplog
#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
option mysql-check user haproxy
#使用keepalive检测死链
option tcpka
#后端真实服务器
server MySQL_1 192.168.37.100:3306 check weight 1 maxconn 2000
server MySQL_2 192.168.37.101:3306 check weight 1 maxconn 2000
server MySQL_3 192.168.37.102:3306 check weight 1 maxconn 2000