HAProxy配置文件详解

前言

本文记录关于HAProxy的基础知识,供学习HAProxy者参考。深知水平有限,如有不对,请指正!

一、这是最初始的配置文件!

global                    #定义全局变量
        maxconn         10000           #并发最大链接数
        stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0        #log定义全局的syslog服务器
                                                #最多可以定义两个
                                                #日志保存在本地,local0可自定义
        uid             200             #haproxy用户的uid
        gid             200             #haproxy用户的gid
        chroot          /var/empty      #chroot是切换根目录,安全
        daemon                          #后台运行

# The public 'www' address in the DMZ
frontend public
        bind            192.168.1.10:80 name clear      #bind仅能用于frontend和listen区段
                                                        #用于定义一个或几个监听的套接字
接字
        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
        mode            http    #设定实例的运行模式或协议
        log             global  #为每个实例启用事件和流量日志,因此可用于所有区段。
        option          httplog #启用记录HTTP请求、会话状态和计时器的功能
        option          dontlognull #禁用空链接日志
        monitor-uri     /monitoruri #检测haproxy服务本身
        maxconn         8000    #会覆盖全局变量
        timeout client  30s     #客户端非活动状态的超时时长

        stats uri       /admin/stats    #stats uri指定监控目录
        use_backend     static if { hdr_beg(host) -i img } #use_backend根据规则指定
后端
        use_backend     static if { path_beg /img /css   }
        default_backend dynamic #default_backend为实例指定使用的默认后端

# The static backend backend for 'Host: img', /img and /css.
backend static                          #backend后端
        mode            http
        balance         roundrobin      #balance定义负载均衡算法
        option prefer-last-server
        retries         2       #重试2次失败认为服务器不可用
        option redispatch       #当 client 连接到挂掉的机器时,重新分配到健康的主机
        timeout connect 5s      #haproxy将客户端请求转发至后端服务器所等待时长
        timeout server  5s      #客户端与服务端建立链接后,等待服务器的超时时长
        option httpchk  HEAD /favicon.ico
        server          statsrv1 192.168.1.8:80 check inter 1000 #server指定服务器
        server          statsrv2 192.168.1.9:80 check inter 1000

# the application servers go here
backend dynamic
        mode            http
        balance         roundrobin
        retries         2
        option redispatch
        timeout connect 5s
        timeout server  30s
        timeout queue   30s     #等待最大时长
        option httpchk  HEAD /login.php
        cookie          DYNSRV insert indirect nocache
        fullconn        4000 # the servers will be used at full load above this number of connections
        server          dynsrv1 192.168.1.1:80 minconn 50 maxconn 500 cookie s1 check inter 1000
        server          dynsrv2 192.168.1.2:80 minconn 50 maxconn 500 cookie s2 check inter 1000
        server          dynsrv3 192.168.1.3:80 minconn 50 maxconn 500 cookie s3 check inter 1000
        server          dynsrv4 192.168.1.4:80 minconn 50 maxconn 500 cookie s4 check inter 1000

二、八种算法

1、roundrobin

表示简单的轮询,每个服务器根据权重轮流使用,在服务器的处理时间平均分配的情况下这是最流畅和公平的算法。该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。

2、leastconn

连接数最少的服务器优先接收连接。leastconn建议用于长会话服务,例如LDAP、SQL、TSE等,而不适合短会话协议。如HTTP.该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。

3、static-rr

每个服务器根据权重轮流使用,类似roundrobin,但它是静态的,意味着运行时修改权限是无效的。另外,它对服务器的数量没有限制。

该算法一般不用;

4、source

对请求源IP地址进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。只要服务器正常,同一个客户端IP地址总是访问同一个服务器。如果哈希的结果随可用服务器数量而变化,那么客户端会定向到不同的服务器;

该算法一般用于不能插入cookie的Tcp模式。它还可以用于广域网上为拒绝使用会话cookie的客户端提供最有效的粘连;

该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

5、uri

表示根据请求的URI左端(问号之前)进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。只要服务器正常,同一个URI地址总是访问同一个服务器。一般用于代理缓存和反病毒代理,以最大限度的提高缓存的命中率。该算法只能用于HTTP后端;

该算法一般用于后端是缓存服务器;

该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

6、url_param

在HTTP GET请求的查询串中查找中指定的URL参数,基本上可以锁定使用特制的URL到特定的负载均衡器节点的要求;

该算法一般用于将同一个用户的信息发送到同一个后端服务器;

该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

7、hdr(name)

在每个HTTP请求中查找HTTP头,HTTP头将被看作在每个HTTP请求,并针对特定的节点;

如果缺少头或者头没有任何值,则用roundrobin代替;

该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

8、rdp-cookie(name)

为每个进来的TCP请求查询并哈希RDP cookie;

该机制用于退化的持久模式,可以使同一个用户或者同一个会话ID总是发送给同一台服务器。如果没有cookie,则使用roundrobin算法代替;

该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

展开阅读全文

没有更多推荐了,返回首页