HaProxy 配置文件说明

配置文件组成
HAPrpxy的配置文件haproxy.cfg由两大部分组成,global全局设定和proxies代理的设定,共分为五段:global,defaults,frontend,backend,listen。
global:  全局配置段:进程及安全配置相关的参数     性能调整相关参数     Debug参数
defaults:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件    
proxies:代理配置段
    defaults <name>:为frontend, backend, listen提供默认配置,这些参数可以被利用配置到frontend,backend,listen组件,优先级小于frontend,backend。
    frontend <name>:前端,相当于nginx中的server {} ,接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的  
    backend <name>: 后端,相当于nginx中的upstream {}  ,后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器
    listen <name>:  同时拥有前端和后端配置,Frontend和Backend的设置合体,


配置文件说明 
global配置参数: 
    chroot     #锁定运行目录 ,修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot()操作,可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限;
    deamon     #以守护进程运行 
    stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin #socket文件 ,mode 600为文件权限  level admin为用户权限
    user  uid         #运行haproxy的用户身份
    group uid         #运行haproxy的用户身份 
    nbproc num        #开启的haproxy进程数,与CPU保持一致 (和nbproc互斥)
    cpu-map 1 0       #绑定haproxy 进程至指定CPU, 多少个CPU写多少行cpu-map,第一个数值为进程编号,第二个为CPU编号 。(和nbproc互斥)
    nbthread          #指定每个haproxy进程开启的线程数,默认为每个进程一个线程,不能与cpu-map同时出现。
    maxconn           #每个haproxy进程的最大并发连接数 
    maxsslconn         #每个haproxy进程ssl最大连接数,用于haproxy配置了证书的场景下 
    maxconnrate        #每个进程每秒创建的最大连接数量 
    spread-checks      #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间 
    pidfile            #指定pid文件路径 
    log <address> <facility> [<level> [<minlevel>]] #定义全局的syslog服务器;最多可以定义两个
        global:     当前实例的日志系统参数同”global”段中的定义时,
        <address>:  定义日志发往的位置
        <facility>: 可以为syslog系统的标准facility之一;
        <level>:    定义日志级别
    option httplog  #开启记录httplog日志格式选项

Proxies配置-defaults:
    option redispatch                 #当server Id对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发 
    option abortonclose               #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接,关闭 
    option http-keep-alive            #开启与客户端的会话保持 
    option forwardfor                 #透传客户端真实IP至后端web服务器 ,后端日志格式中要添加 X-Forwarded-For
    option forwardfor   except 127.0.0.0/8  同上,排除网段
    option httplog                     可以以http格式记录下日志。
    mode http                         #设置默认工作类型,有tcp/http 
    timeout http-keep-alive 120s      #session 会话保持超时时间,范围内会转发到相同的后端服务器 
    timeout connect 120s              #客户端请求从haproxy到后端server的最长连接等待时间(TCP之前) 
    timeout server 600s               #客户端请求从haproxy到后端服务端的请求处理超时时长(TCP之后) 
    timeout client 600s               #设置haproxy与客户端的最长非活动时间 
    timeout check 5s                  #对后端服务器的默认检测超时时间
    balance [算法 ]                    #定义负载均衡算法,可用于“defaults”、“listen”和“backend”

Proxies配置-frontend:
    bind:指定HAProxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于listen字段中, 重点:如果要监听的不是本网卡的IP(如keepalived的VIP地址),需要要内核心开启net.ipv4.ip_nonlocal_bind=1
    bind [<address>]:<port_range> [, ...] [param*]
        bind :80 
        bind :443 ssl crt /etc/haproxy/site.pem
        bind :80,:443,:8801-8810 
        bind 10.0.0.1:10080,10.0.0.1:10443 
        bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy
    use_backend backend_name #调用的后端服务器组名称
    mode http/tcp            # 指定监听协议类型

Proxies配置-backend:
    mode http/tcp #指定负载协议类型 
    hash-type <method> #配合balance参数使用,定义用于将hash码映射至后端服务器的方法;其不能用于frontend区段;可用方法有map-based和consistent,在大多数场景下推荐使用默认的map-based方法
    option #配置选项,option后面加httplog,httpchk,smtpchk,mysql-check,pgsql-check,ssl-hello-chk方法,可用于实现更多应用层检测功能。
    server <name> <address>[:port] [param*]  #定义后端real server
        check           #对指定real进行健康状态检查,默认不开启 ,只有check后面没有其它配置也可以启用检查功能  #默认对相应的后端服务器IP和端口,利用TCP连接进行周期性健康性检查,注意必须指定端口才能实现健康性检查
            addr IP      #可指定的健康状态监测IP 
            port num     #指定的健康状态监测端口 
            inter num    #健康状态检查间隔时间,默认2000 ms 
            fall num     #后端服务器失效检查次数,默认为3 
            rise num     #后端服务器从下线恢复检查次数,默认为2 
        weight         #默认为1,最大值为256,0表示不参与负载均衡 
        backup         #将后端服务器标记为备份状态 
        disabled       #将后端服务器标记为不可用状态 
        redirect prefix http://www.magedu.net/ #将请求临时重定向至其它URL,只适用于http模式 
        maxconn <maxconn>:当前后端server的最大并发连接数 
        backlog <backlog>:当server的连接数达到上限后的后援队列长度
        backup:           设定为备用服务器
        cookie <value>:   #为指定server设定cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的server将在后续的请求中被选中,其目的在于实现持久连接的功能
        maxqueue <maxqueue>:设定请求队列的最大长度;
send-proxy observe
<mode>: 通过观察服务器的通信状况来判定其健康状态,默认为禁用,其支持的类型有“layer4”和“layer7”,“layer7”仅能用于http代理场景; 注意:name字段只能使用大小写字母,数字,‘-’(dash),'_‘(underscore),'.' (dot)和 ':'(colon),并且严格区分大小写,可以采用后面形式命名:业务-服务-端口号如:frontend magedu_web_port 注意: backend 的名称必须唯一,并且必须在listen或frontend中事先定义才可以使用,否则服务无法启动 haproxy时间定义说明 us: 微秒(microseconds),即1/1000000秒; ms: 毫秒(milliseconds),即1/1000秒; s: 秒(seconds); m: 分钟(minutes); h:小时(hours); d: 天(days);

 

配置文件写法一:frontend+backend配置实例:
frontend WEB_PORT_80 
    bind 192.168.7.248:80 
    mode http 
    use_backend web_prot_http_nodes 
backend web_prot_http_nodes 
    mode http 
    option forwardfor 
    server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3 rise 5 
    server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5

配置文件写法二:listen替代frontend+backend: 
    listen WEB_PORT_80 
    bind 192.168.7.102:80 
    mode http 
    option forwardfor 
    server web1 192.168.7.101:80 check inter 3000 fall 3 rise 5 
    server web2 192.168.7.102:80 check inter 3000 fall 3 rise 5
    
配置文件写法三:listen和backend混合
    listen web_host 
    bind 192.168.7.101:80 
    mode http 
    log global 
    acl web_host hdr_dom(host) www.magedu.net 
    use_backend magedu_host if web_host 
    backend magedu_host 
    mode http 
    server web1 192.168.7.103 check inter 2000 fall 3 rise 5 

 

使用子配置文件保存配置

当业务众多时,将所有配置都放在一个配置文件中,会造成维护困难。可以考虑按业务分类,将配置信息拆分,放在不同的子配置文件中,从而达到方便维护的目的。

#创建子配置目录
[root@centos7 ~]#mkdir /etc/haproxy/conf.d/

#创建子配置文件,注意:必须为cfg后缀
[root@centos7 ~]#vim   /etc/haproxy/conf.d/test.cfg
listen WEB_PORT_80
    bind 10.0.0.7:80
    mode http
    balance roundrobin
    server web1  10.0.0.17:80  check inter 3000 fall 2 rise 5
    server web2  10.0.0.27:80  check inter 3000 fall 2 rise 5

#添加子配置目录到unit文件中
[root@centos7 ~]#vim  /lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/  -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

[root@centos7 ~]#systemctl daemon-reload 
[root@centos7 ~]#systemctl restart haproxy

  

 

posted @ 2022-07-22 18:07  yuanbangchen  阅读(1387)  评论(0编辑  收藏  举报