haproxy的部署还是很简单的, 本文重点介绍一下它的配置文件的设置。
haproxy的配置一般包含4部分: global, defaults, fornted, backend, 分别代表了全局设置, 默认设置, 前端设置, 后端设置。
global部分设置了全局的变量, 通常包含:log, uid, gid, deamon等。
其中log设置 了haproxy日志的输出等级, 输出位置等。
defaults部分设定了默认输出, 比如, 连接数, 连接超时时间。
该部分主要是设定acl, 通过acl将不同的请求进行分类或者处理, 转发到不同的backend后端来处理。
acl [flags] [operator] []
use_backend if
default_backend
通过ACL设定了多个转发规则, 通过use_backend 的if ACL_NAME, 转发到相关的backend。
如果if条件都没有匹配, 走到default_backend。 这里很像C/C++里面switch/case/default的用法。
balance [ ]
balance url_param [check_post []]
balance 是指定负载均衡的算法, 以及算法的指定的参数。 默认是用轮询的方法(balance roundrobin), 也可以采用哈希的方式, 通过hash-type来指定, 可以选择map-based或者consistent, consistent比较适合分布式的hash环境, 因为它在某个server故障, 影响的范围是很小, 而且能够保证相同的hash字段转发到相同的机器上面。 但是这种方式的均衡性不是很好。
option httpchk
option httpchk
option httpchk
option httpchk
httpchk是在http模式下, 检查后端的存活, 通常与server的 check搭配使用。
server name address:port param*
server:用来定义多台后端真实服务器
address:后端真实服务器的iP地址或主机名。
port:指定连接请求发往真实服务器时的目标端口,在未设定时,将使用客户端请求时的同一端口。
param*:为后端服务器设定的一系列参数,可用参数非常多:
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管理节点