HAProxy常用配置详解

简介

HAProxy的安装非常简单 但是配置文件方面就比较复杂了 在安装路径下的doc目录下 有官方详细的使用文档。其实常用的配置也并不多 只要掌握了这些 HAProxy就可以很好的使用了

环境

软件名称 版本号 下载地址
haproxy 1.6.7 点击下载

步骤

根据功能和用途 HAProxy配置文件主要由五个部分组成 有些部分并不是必须的 可以根据实际情况使用

1. global部分             设置全局配置参数
2. defaults部分           默认参数配置部分
3. frontend部分           设置接受用户请求的前端虚拟节点
4. backend部分            设置后端服务器集群的配置
5. listen部分             frontend和backend部分的结合体 

global部分

global
        maxconn         10000
        log             127.0.0.1 local0 info
        uid             200
        gid             200
        chroot          /var/empty
        daemon
        nbproc          1
        pidfile         /var/run/haproxy.pid

maxconn: 设定每个HAProxy进程可接受的最大并发连接数 (相当于ulimit -n的设置)
log: 全局的日志配置 127.0.0.1 local0表示使用本机的rsys-log服务中的local0日志设备
    还支持四种日志级别 err, warning, info, debug
log-send-hostname: 在syslog信息的首部添加当前主机名 可以自定义字符串 默认当前主机名
uid/gid: 运行HAProxy进程的uid和gid 也可以用user/group代替
chroot: 限定运行用户的访问目录
daemon: 设置HAProxy进程后台运行
nbproc: 服务启动时创建的进程数 创建多个进程 可以减少每个进程的任务队列 但是可能使服务不稳定
pidfile: pid文件位置 启动用户必须有可写权限
stats: 用户访问统计数据的接口
node: 定义当前节点的名称 用于HA场景中多haproxy进程共享同一个IP地址时

defaults部分

defaults
        mode            http
        retries         3
        timeout connect 10s
        timeout client  20s
        timeout server  30s
        timeout check   5s

mode: 设置HAProxy实例默认运行模式 有tcp http health三个可选值
    tcp: 在此模式下 只做数据转发 不对七层报文做检查
    http: 会对七层报文做检查分析
    health: 此模式基本已被废弃
retries: 设置后端服务器连接失败重试次数 超过次数 HAProxy标记此服务器不可用
timeout connect: 成功连接到一台服务器最长等待时间
timeout client: 设置连接客户端发送数据最长等待时间 默认单位毫秒 可以使用其他单位后缀
timeout server: 设置服务器回应客户最长等待时间 默认单位毫秒 可以使用其他单位后缀
timeout check: 设置对后端服务器检查超时时间 默认单位毫秒 可以使用其他单位后缀

frontend部分

frontend www
        bind            *:80
        mode            http
        option          httplog
        option          forwardfor
        option          httpclose
        log             global
        default_backend htmpool

通过frontend关键字定义了一个名为www的前端虚拟节点
bind: 只能用在frontend和listen部分 用户定义一个或多个监听的套接字 端口还可以是个段 比如80-100
option httplog: 开启日志记录HTTP请求
option forwardfor: 请求头中添加X-Forwardfor-For记录 可以让后端服务器获取用户真实IP
option httpclose: 完成一次连接请求后 HAProxy将主动关闭此TCP连接
log global: 使用global中定义的日志选项配置格式
defaults_backend: 制定默认的后端服务器池 htmpool将在backend中定义

backend部分

backend htmpool
        mode            http
        option redispatch
        option abortonclose
        balance         roundrobin
        cookie          SERVERID
        option httpchk GET /
        server web1 192.168.4.233:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3
        server web2 192.168.4.234:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3

option redispatch: 用于cookie保持环境下 如果后端服务器异常 将客户请求强制定向到另一台正常服务器
option abortonclose: 服务器负载很高的情况下 自动结束当前队列中处理时间比较长的连接
balance: 定义负载均衡算法 HAProxy支持多种负载均衡算法 常用的如下几种
    roundrobin: 基于权重进行轮询的调度算法
    static-rr: 也是基于权重进行轮询的调度算法 不过为静态方法 在运行时调整其服务器权重不会生效
    source: 基于请求源IP的算法 可以使同一个客户端的IP请求始终由一台服务器处理
    leastconn: 将新的连接请求转发到最有最少连接数目的后端服务器 长会话的环境中比较适用
    uri: 此算法会对部分或整个URI进行hash运算 再经过与服务器的总权重相除 转发到匹配的服务器
    uri-param: 根据URL路径中的参数转发 可以保证同一用户的请求始终分发到同一台服务器上
    hdr: 根据http头进行转发 如果http头名称不存在 则使用roundrobin算法进行策略转发
cookie: 表示允许向cookie插入SERVERID 每台服务器的SERVERID可由server关键字定义
option httpchk <method> <uri> <version>: 表示启用HTTP的服务状态检测功能 method支持以下几种方式
    OPTIONS GET HEAD 一般的健康检查只需要采用HEAD方式 只查看Response的状态码是否是200就可以了
    uri则是要检测的URL地址 version指定检测时的HTTP版本号 默认HTTP/1.0
server <name> <address>[:port] [param*]: 这个则是定义多台后端服务器了 
    name: 为后端服务器指定一个名称
    address: 后端真实服务器的IP
    port: 后端真实服务器监听的端口号
    param*: 为后端服务器设定的一系列参数 常用参数如下
        check: 表示对后端服务器执行健康检查
        inter: 设置监控状态检测的时间 单位是毫秒
        rise: 由故障状态转移到正常状态需要成功检查的次数 rise 2表示2次检查成功 此服务器才可用
        fall: 由正常状态转移到故障状态需要失败检查的次数
        cookies: 目的在于实现持久连接的功能 cookie server1 表示web1的serverid为server1
        weight: 后端服务器的权重 默认1 最大256 设置0不参与负载均衡 权重越大 被选中的概率越大
        backup: 不参与负载均衡 只有在所有服务器都不可用的情况下才启用

listen部分

frontend和backend部分的结合体 它们中的指令 listen中都能用 新版的haproxy为了兼容旧版的才保留了listen部分 目前haproxy中 两种配置方式选一个即可

listen admin_stats
    bind 0.0.0.0:9188
    mode http
    log 127.0.0.1 local0 err
    stats refresh 30s
    stats uri /haproxy-status
    stats realm welcome login\ Haproxy
    stats auth admin:admin~!@
    stats hide-version
    stats admin if TRUE

stats refresh: 监控统计页面的自动刷新时间
stats uri: 监控统计页面的访问路径
stats realm: 访问统计页面时的文本提示信息
stats auth: 认证登陆的用户名和密码
stats hide-version: 隐藏版本信息
stats admin: 通过此选择 可以在监控页面上手工启用或禁用后端服务器

附录

HAProxy的日志配置策略

默认情况下 HAProxy为了节省读写的I/0所消耗的性能 没有自动配置日志输出功能 但是为了方便维护和调试 还是需要开启的

确定系统已经安装rsyslog
yum install -y rsyslog

添加配置文件 vim /etc/rsyslog.d/haproxy.conf
    $ModLoad imudp
    $UDPServerRun 514
    local0.* /var/log/haproxy.conf

通过UDP 514端口接收日志 然后还要修改/etc/sysconfig/rsyslog
修改为: SYSLOGD_OPTIONS="-c 2 -r -m 0"

然后重启rsyslog服务即可
service rsyslog restart

这里只讲解了HAProxy常用的配置方法 如果想深入了解其他配置项 可以查阅官方文档
官方文档位置: /usr/local/haproxy/doc/haproxy/