haproxy的部署还是很简单的, 本文重点介绍一下它的配置文件的设置。
haproxy的配置一般包含4部分: global, defaults, fornted, backend, 分别代表了全局设置, 默认设置, 前端设置, 后端设置。

global

global部分设置了全局的变量, 通常包含:log, uid, gid, deamon等。
其中log设置 了haproxy日志的输出等级, 输出位置等。

defaults

defaults部分设定了默认输出, 比如, 连接数, 连接超时时间。

fronted

该部分主要是设定acl, 通过acl将不同的请求进行分类或者处理, 转发到不同的backend后端来处理。

acl <aclname> <criterion> [flags] [operator] [<value>]
  • aclname
    必须字段, 指定ACL的名字, 以区分不同的ACL。
  • criterion
    必须字段, 转发准则, 比如hdr_reg 可以正则匹配hdr里面某个字段。
  • flags
  • operator
  • value
use_backend <backend> if <condition>
default_backend <backend>

通过ACL设定了多个转发规则, 通过use_backend 的if ACL_NAME, 转发到相关的backend。
如果if条件都没有匹配, 走到default_backend。 这里很像C/C++里面switch/case/default的用法。

backend

balance <algorithm> [ <arguments> ]
balance url_param <param> [check_post [<max_wait>]]

balance 是指定负载均衡的算法, 以及算法的指定的参数。 默认是用轮询的方法(balance roundrobin), 也可以采用哈希的方式, 通过hash-type来指定, 可以选择map-based或者consistent, consistent比较适合分布式的hash环境, 因为它在某个server故障, 影响的范围是很小, 而且能够保证相同的hash字段转发到相同的机器上面。 但是这种方式的均衡性不是很好。

option httpchk
option httpchk <uri>
option httpchk <method> <uri>
option httpchk <method> <uri> <version>

httpchk是在http模式下, 检查后端的存活, 通常与server的 check搭配使用。

server name address:port param*

server:用来定义多台后端真实服务器

address:后端真实服务器的iP地址或主机名。
port:指定连接请求发往真实服务器时的目标端口,在未设定时,将使用客户端请求时的同一端口。

param*:为后端服务器设定的一系列参数,可用参数非常多:

  • check:表示启用对此后端服务器执行健康检查。
  • inter:设置健康状态检查的时间间隔,单位为毫秒。
  • rise:设置人故障状态转换至正常状态需要成功检查的次数,如 rise 2:表示2次检查正确就认为此服务器可用。
  • fall:设置后端服务器从正常状态转换为不可用状态需要检查的次数,如 fall 3表示3 次检查失败就认为此服务器不可用。
  • cookie:为指定的后端服务器设定cookie值,此外指定的值将在请求入站时被检查,第一次为此值挑选的后端服务器将在后续的请求中一直被选中,其目的在于实现持久连接的功能。
  • weigth:设置后端真实服务器的权重,默认为1,最大值为256,设置为0表示不参与负载均衡。
  • maxconn:设定每个backend中server进程可接受的最大并发连接数,此选项等同于linux命令选项”ulimit -n”
  • backup:设置后端真实服务器的备份服器,仅仅在后端所有真实服务器均不可用的情况下才启用。

监控程序

haproxy本身提供了比较完备的监控功能,可以通过配置stat来进行管理, 一般在default段进行。
http://IP:port/admin?stats, 这里, IP是haproxy的ip, 端口是haproxy的端口。

stats   enable
        stats   refresh 30s   //统计页面自动刷新时间
        stats   uri /admin?stats    //访问的uri   ip:8080/admin
        stats   auth admin:admin  //认证用户名和密码
        stats   hide-version   //隐藏HAProxy的版本号
        stats   admin if TRUE   //管理界面,如果认证成功了,可通过webui管理节点