Haproxy是一款免费、稳定、高效的轻量级负载均衡软件,现将其配置文件参数作如下说明:
global #全局配置参数
global #全局配置参数
log 127.0.0.1 local3 info #日志级别
maxconn 4096
user haproxy
group haproxy
daemon #设置为后台进程
pidfile /usr/local/haproxy/haproxy.pid #进程的pid文件
2 defaults #默认配置,被frontend,backend,listen段继承使用
log global #继承global日志
mode http #Haproxy工作模式,四层工作模式为TCP
option httplog #记载http日志
option dontlognull #不记录空日志
option forwardfor except 127.0.0.0/8 #使后端服务器获取客户端的真实IP
option redispatch #如果cookie中写入ServerID而客户端不会刷新Cookie,那么当ServerID对应的服务器宕机后,将强制定向到其它健康的服务器上
option abortonclose #当服务器负载过高时,将自动关闭队列中处理时间较长的连接请求
option http-server-close #每次请求完毕后主动关闭http通道
cookie SERVERID #允许向cookie中插入SERVERID,服务器的SERVERID在后端使用cookie关键字定义
retries 3 #服务器连接失败后的重试次数
maxconn 2000 #每个进程的最大连接数
timeout queue #等待最大时长
timeout http-request 10s #http请求超时时间,在客户端建立连接但不请求数据时,关闭客户端连接
timeout connect 5000 #连接最大超时时间,默认毫秒
timeout client 30000 #客户端最大超时时间
timeout server 30000 #服务端超时时间
timeout http-keep-alive 30s #会话保持时间
timeout check 10s #健康状态监测时的超时时间,过短会误判,过长资源消耗
stats refresh 30s #状态刷新频率
3 自定义监控
listen admin_stats # 配置段通过关联“前端”和“后端”定义了一个完整的代理,通常只对TCP流量有用
bind 0.0.0.0:1080 # 监听端口
mode http # http的7层模式
option httplog # 采用http日志格式
maxconn 10
stats refresh 30s # 统计页面自动刷新时间
stats uri /stats # 统计页面url
stats realm yooCloud Haproxy # 统计页面密码框上提示文本
stats auth admin:admin # 统计页面用户名和密码设置
stats hide-version # 隐藏统计页面上HAProxy的版本信息
4 普通前端后端代理
#前端代理
frontend www_hellozz_com
bind *:80 #绑定主机和端口
stats uri /haproxy?stats #uri状态
default_backend backend_www_hellozz_com #转发到对应的后端主机组
#后端代理
backend backend_www_hellozz_com #自定义头部信息获取客户端真实IP
option forwardfor header X-REAL-IP #自定义option健康检查
option httpchk GET /index.html #负载均衡方式 roundrobin 轮询,source like iphash,cookie,SERVERID
balance roundrobin
server node1 10.10.100.151:80 check inter 2000 rise 3 fall 3 weight 1 #真实Server check 支持url健康检测 inter 时间间隔默认为毫秒,rise 检查次数, fall 失败次数 weight 权重
5 基于ACL前端后端代理
#前端代理
frontend www_hellozz_com
bind *:80 #绑定主机和端口
stats uri /haproxy?stats #uri状态
default_backend backend_www_hellozz_com #转发到对应的后端主机组
acl is_backend_app_hellozz_com hdr_end(host) app.hellozz.com #设置ACL 如果是访问到指定的域名则去匹配相应制定的backend use_backend是关键字,如果不设置,则使用默认的
use_backend backend_app_hellozz_com if is_backend_app_hellozz_com
#后端代理
backend backend_www_hellozz_com
option forwardfor header X-REAL-IP #自定义头部信息获取客户端真实IP
option httpchk GET /index.html #自定义option健康检查
balance roundrobin #负载均衡方式 roundrobin 轮询,source like iphash,cookie,SERVERID
server node1 10.10.100.151:80 check inter 2000 rise 3 fall 3 weight 1 #真实Server check 支持url健康检测 inter 时间间隔默认为毫秒,rise 检查次数, fall 失败次数 weight 权重
backend backend_app_hellozz_com
option forwardfor header X-REAL-IP #自定义头部信息获取客户端真实IP
option httpchk GET /index.html #自定义option健康检查
balance roundrobin #负载均衡方式 roundrobin 轮询,source like iphash,cookie,SERVERID
server node2 10.10.100.152:80 check inter 2000 rise 3 fall 3 weight 1 #真实Server check 支持url健康检测 inter 时间间隔默认为毫秒,rise 检查次数, fall 失败次数 weight 权重
6 基于后缀匹配backend匹配
#前端代理
frontend www_hellozz_com
#绑定主机和端口
bind *:80
#uri状态
stats uri /haproxy?stats
#转发到对应的后端主机组
default_backend backend_www_hellozz_com
#根据后缀匹配下面两种写法都可以
acl is_static_reg url_reg /*.(css|jpg|png|js|gif)$
#acl is-static_path path_end .gif .png .js .css .jpg
use_backend backend_app_hellozz_com if is_static_reg
#后端代理
backend backend_www_hellozz_com
#自定义头部信息获取客户端真实IP
option forwardfor header X-REAL-IP
#自定义option健康检查
option httpchk GET /index.html
#负载均衡方式 roundrobin 轮询,source like iphash,cookie,SERVERID
balance roundrobin
#真实Server check 支持url健康检测 inter 时间间隔默认为毫秒,rise 检查次数, fall 失败次数 weight 权重
server node1 10.10.100.151:80 check inter 2000 rise 3 fall 3 weight 1
backend backend_app_hellozz_com
#自定义头部信息获取客户端真实IP
option forwardfor header X-REAL-IP
#自定义option健康检查
option httpchk GET /index.html
#负载均衡方式 roundrobin 轮询,source like iphash,cookie,SERVERID
balance roundrobin
#真实Server check 支持url健康检测 inter 时间间隔默认为毫秒,rise 检查次数, fall 失败次数 weight 权重
server node2 10.10.100.152:80 check inter 2000 rise 3 fall 3 weight 1
7 基于URL匹配
#前端代理
frontend www_hellozz_com
#绑定主机和端口
bind *:80
#uri状态
stats uri /haproxy?stats
#转发到对应的后端主机组
default_backend backend_www_hellozz_com
#基于URL匹配
acl is_do_path url_reg /api.do
use_backend backend_app_hellozz_com if is_do_path
#后端代理
backend backend_www_hellozz_com
#自定义头部信息获取客户端真实IP
option forwardfor header X-REAL-IP
#自定义option健康检查
option httpchk GET /index.html
#负载均衡方式 roundrobin 轮询,source like iphash,cookie,SERVERID
balance roundrobin
#真实Server check 支持url健康检测 inter 时间间隔默认为毫秒,rise 检查次数, fall 失败次数 weight 权重
server node1 10.10.100.151:80 check inter 2000 rise 3 fall 3 weight 1
backend backend_app_hellozz_com
#自定义头部信息获取客户端真实IP
option forwardfor header X-REAL-IP
#自定义option健康检查
option httpchk GET /index.html
#负载均衡方式 roundrobin 轮询,source like iphash,cookie,SERVERID
balance roundrobin
#真实Server check 支持url健康检测 inter 时间间隔默认为毫秒,rise 检查次数, fall 失败次数 weight 权重
server node2 10.10.100.152:80 check inter 2000 rise 3 fall 3 weight 1
8 基于基于 ua匹配
#前端代理
frontend www_hellozz_com
#绑定主机和端口
bind *:80
#uri状态
stats uri /haproxy?stats
#转发到对应的后端主机组
default_backend backend_www_hellozz_com
#基于UA 匹配
acl is_ua_path hdr_reg(User-Agent) -i android
use_backend backend_app_hellozz_com if is_ua_path
#后端代理
backend backend_www_hellozz_com
#自定义头部信息获取客户端真实IP
option forwardfor header X-REAL-IP
#自定义option健康检查
option httpchk GET /index.html
#负载均衡方式 roundrobin 轮询,source like iphash,cookie,SERVERID
balance roundrobin
#真实Server check 支持url健康检测 inter 时间间隔默认为毫秒,rise 检查次数, fall 失败次数 weight 权重
server node1 10.10.100.151:80 check inter 2000 rise 3 fall 3 weight 1
backend backend_app_hellozz_com
#自定义头部信息获取客户端真实IP
option forwardfor header X-REAL-IP
#自定义option健康检查
option httpchk GET /index.html
#负载均衡方式 roundrobin 轮询,source like iphash,cookie,SERVERID
balance roundrobin
#真实Server check 支持url健康检测 inter 时间间隔默认为毫秒,rise 检查次数, fall 失败次数 weight 权重
server node2 10.10.100.152:80 check inter 2000 rise 3 fall 3 weight 1
9 haproxy 调优
1 不设置进程
2 网卡速率
3 端口可能会用尽 更改内核参数增加算口方位 cat /proc/sys/net/ipv4/ip_local_port_range
设置tcp端口复用 cat /proc/sys/net/ipv4/tcp_tw_reuse 数字为 1
缩短端口占用时间:cat /proc/sys/net/ipv4/tcp_fin_timeout
使用多IP