HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。 二、配置文件格式
配置文件中的参数具体参考:http://cbonte.github.io/haproxy-dconv/configuration-1.4.html
配置文件格式:
全局参数:
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2 #定义日志的,需要在syslog中开启
chroot /var/lib/haproxy #指定haproxy工作目录,能提高安全性
pidfile /var/run/haproxy.pid #pid文件文职
maxconn 40000 #最大并发连接数
user haproxy #指定用户运行haproxy
group haproxy
daemon #以守护进程方式工作于后台
# turn on stats unix socket
stats socket /var/lib/haproxy/stats # 代理相关配置主要分为四段:
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main *:5000 #定义前端的监听地址和端口
acl url_static path_beg -i /static /images /javascript /stylesheets
#定义访问控制列表,上述含义是以后面参数开头path的且不区分大小写为url_static列表
acl url_static path_end -i .jpg .gif .png .css .js
#同上
use_backend static if url_static
#如果匹配到url_static列表,则代理至backend定义的static server
default_backend app
#否则,默认到app server
backend :用于定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器。
backend static #定义后端server
balance roundrobin 算法rr
server static 127.0.0.1:4331 check #check代表健康检测
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
balance roundrobin
server app1 127.0.0.1:5001 check
server app2 127.0.0.1:5002 check
server app3 127.0.0.1:5003 check
server app4 127.0.0.1:5004 check
check:启动对此server执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定:
inter :设定健康状态检查的时间间隔,单位为毫秒,默认为2000;也可以使用fastinter和downinter来根据服务器端状态优化此时间延迟;
rise :设定健康状态检查中,某离线的server从离线状态转换至正常状态需要成功检查的次数;
fall :确认server从正常状态转换为不可用状态需要检查的次数;