HAProxy 配置由五个非必选组件组成:
- global
通常和操作系统相关。 - defaults
配置默认参数,这些参数可以被利用到 frontend、backend、listen 组件。若 frontend、backend 和 listen 重新配置 defaults 中的参数,那么前者会使用重新配置的新值。 - frontend
接收请求的前端虚拟节点,frontend 可以根据规则直接指定具体使用后端的backend(可动态选择)。 - backend
后端服务集群的配置,是真实的服务器,一个 Backend 对应一个或者多个实体服务器。 - listen
Frontend 和 Backend 的组合体。
HAProxy 主要配置:
global # 全局配置
log 127.0.0.1 local0 # 日志输出配置,所有日志都记录在本机,通过 local 0输出
chroot /usr/local/haproxy # 改变当前工作目录
uid 99 #所属运行的用户uid
gid 99 #所属运行的用户组
pidfile /usr/haproxy.pid #pid文件位置
maxconn 4096 # 最大连接数
daemon # 以后台形式运行ha-proxy
nbproc 3 # 启动3个 ha-proxy 实例
defaults # 默认配置
log global
log 127.0.0.1 local3 # 日志文件的输出定向
option httplog # 日志类别,采用httplog
option httpclose # 每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现
option dontlognull # 保证 HAProxy 不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包
option forwardfor # 如果后端服务器需要获得客户端真实 ip 需要配置的参数,可以从 Http Header 中获得客户端 ip
option redispatch # 是否允许重新分配在session 失败后
retries 2 # 2次连接失败就认为服务器不可用,主要通过后面的 check 检查
maxconn 2000 # 最大连接数
balance roundrobin # 负载均衡算法
stats uri /haproxy-stats # HAProxy 监控页面的访问地址,可通过http://ip/haproxy-stats访问
contimeout 5000 # 连接超时时间
clitimeout 50000 # 客户端连接超时时间
srvtimeout 50000 # 服务器端连接超时时间
listen proxy_web
mode http
option forwardfor
balance roundrobin
cookie ServerID prefix
cookie JSESSIONID prefix
capture request header Cookie len 200
capture request header X-Forwarded-For len 15
capture request header Host len 15
capture request header Referrer len 15
appsession JSESSIONID len 52 timeout 1080000
bind :16002
#option forwardfor except 192.168.0.159
option httpchk GET /ok.jsp HTTP/1.0 # 用于健康检测的后端页面
server app_1 192.168.0.243:8080 cookie app1 minconn 100 maxconn 40960 check inter 5000 rise 2 fall 5 weight 2
server app_2 192.168.0.242:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 2
server app_4 192.168.0.245:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 1
stats enable
stats uri /haproxy-stat
stats realm "test_123 monitor"
stats auth admin:admin
HAProxy 支持两种主要的代理模式:
另外,Haproxy 也可用于 MySQL 数据库(读操作)的负载均衡。
同一客户端访问服务器,Haproxy 保持回话的三种方案: