Haproxy配置文件详解

发布于 2022-07-27  5.8k 次阅读


Haproxy的配置文件haproxy.cfg由两大部分组成:

  • global:全局配置段
  • proxies:代理配置段

global全局配置段:

  1. 进程及安全配置相关的参数
  2. 性能调整相关参数
  3. Debug参数

proxies代理配置段:

  1. defaults:为frontend,backend,listen提供默认配置
  2. frontend:前端,相当于nginx中的server{}
  3. backend:后端,相当于nginx中的upstream{}
  4. listen:同时拥有前端和后端配置

#1. global配置参数

参数 含义
log 日志配置,格式:log 机器IP 日志类型 日志级别。如:log 127.0.0.1 local3 info
maxconn 最大连接限制(优先级低)
uid,user 用户,运行Haproxy的用户是谁,可以写用户名也可以写用户ID。如:uid fq
gid,group 用户组,如:gid wql
daemon 守护进程运行
nbproc haproxy进程数,该值的设置应该和服务器CPU核心数一致,比如设置成16,及常见的2颗8核心CPU的服务器,即共有16,可以设置的值:<=16。创建进程数可以减少每个进程任务队列,提高效率
nbthread 指定每一个haproxy进程开启的线程数,默认为每一个进程一个线程
pidfile 指定haproxy进程ID存储位置,如: pidfile /var/lib/haproxy/haproxy.pid
chroot 锁定运行目录

例:

global
    maxconn 100000
    chroot /apps/haproxy
    stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
    uid 99
    gid 99
    #user  haproxy
    #group haproxy
    daemon
    #nbproc 4
    pidfile /var/lib/haproxy/haproxy.pid
    log 127.0.0.1 local2 info

#2. proxies配置

##2.1 defaults配置参数

参数
含义
log
日志配置,格式:log 机器IP 日志类型 日志级别。如:log 127.0.0.1 local3 info
mode
指定haproxy的工作模式,指定它是工作在4层还是7层。如:四层 TCP,七层http
maxconn
最大连接限制(优先级比global高)
retries
 健康检测次数,如:retries 3 ,3次连接失败认为服务不可用
 option
服务不可用后的操作,重定向到其他健康的服务器,如:option redispath
contimeout
重传计时器,定义haproxy将客户端m请求转发至后端服务器所等待的超时时长
clietimeout
(向后长连) haproxy作为客户,和后满服务器之间空闲连接m的超时时间,到时候发送fin指令
srvtimeout
(向前长连接) haproxy作为服务器,和用户之间空闲连接的超时时间,到时候发送fin指令
option abortclose
当服务器负载高的时候,自动结束掉当前队列处理比较久的链接
stats uri
设置统计页面的uri路径,如:stats uri /admin 
stats realm Private lands 
 
设置统计页面认证时的提示内容
stats auth admin:password
设置统计页面认证时的账号和密码,如果设置多个另起一行写入即可
stats hide-version
隐藏统计页面上的haproxy版本信息
haproxy的三大计时器:
  • contimeout( timeout connect)
  • clietimeout(timeout client)
  • srvtimeout(timeout server)

haproxy跟nginx有很大区别就在于它除了有健康检查还维护了客户端和服务端的关系

  • 但client发送请求,server失去链接并超时,haproxy就会将请求转发给其他server
  • 当client失去链接并超时,haproxy会直接丢弃请求
  • 这个关系通过心跳计时器来维护

例:

defaults
    log global
    mode http
    maxconn 3000
    retries 3
    option abortclose
    timeout connect 5000
    timeout client 50000
    timeout server 50000
    stats uri /admin
    stats auth wql:123456789
    stats hide-version

##2.2 frontend配置参数

frontend表示前端(代理器的前面),代理器的前面是用户

参数
含义
bind
对外提供服务的绑定地址,可以一次配多个IP,如:bind 192.168.68.133:8080只有访问这个地址才能提供服务,0.0.0.0:80表示只有访问本机地址就提供服务
mode
工作模式,前端时指定为http
log
日志配置,和之前的一样,假如值为global就表示使用global的日志配置 例:log global
option httpclose
用户连接过久,直接关闭

前端控制列表配置:

acl wql url_reg -i  \.html$
use_backend fq-server if wql

格式:acl 访问控制列表名字 控制规则 参数 规则表达式

    acl wql url_reg -i  \.html$ ,url_reg为url正则匹配, -i忽略大小写,\.html$为正则表达式,意思为只有用户访问的是以.html结尾的请求(if wql)都推送(use_backend)给后端服务器群组(fq-server为群组名称)

例:

frontend fw
    bind 0.0.0.0:80
    mode http
    log global
    option httpclose
acl wql url_reg -i  \.html$
use_backend fq-server if wql
default_backend fq-server

##2.3 backend配置参数

backend表示后端(代理器的后面),代理器的后面是服务器
参数
含义
mode
工作模式,四层值为tcp,七层为http
balance
指定负载均衡策略,如:roundrobin表示轮询
option httpchk GET 路径
对固定的server地址就行效验,发送GET请求,看是否正常。和retries搭配使用
cookie SERVERID insert indirect nocache
把服务器编号ID插入到回复给用户的cookie当中
server
指定服务器,基本格式:server 服务器别名 ip:端口,例:server wql1 192.168.68.133:80 
server的其他配置:
  1. weight:服务器权重
  2. cookie:需要发送给用户的cookie标识
  3. check inter:效验的间隔时间
  4. rise:成功次数,定义多少次成功才算真正成功
  5. fail:失败次数,定义多少次失败才算真正失败

如:

backend fq-server
    mode http
    option httpchk GET /index.html
    cookie SERVERID insert indirect nocache
    server wql1 192.168.68.133:80 weight 1 cookie 3 check inter 2000 rise 2 fail 5
    server wql1 192.168.68.134:80 weight 1 cookie 4 check inter 2000 rise 2 fail 5

##2.4 listen配置参数

listen主要用来替代frontend和backend

listen配置参数是所有frontend和backend的混合,只要是这两者有的listen都能用

例:

listen stats
    mode http
    bind 0.0.0.0:9999
    stats enable
    log global

listen web_port
    bind 0.0.0.0:80
    mode http
    log global
    server web1  127.0.0.1:8080  check inter 3000 fall 2 rise 5

路漫漫其修远兮,吾将上下而求索