HAProxy
HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。最关键的是,HAProxy具备媲美商用负载均衡器的性能和稳定性。
1.负载均衡:L4和L7两种模式,支持RR/静态RR/LC/IP Hash/URI Hash/URL_PARAM Hash/HTTP_HEADER Hash等丰富的负载均衡算法
2.健康检查:支持TCP和HTTP两种健康检查模式
3.会话保持:对于未实现会话共享的应用集群,可通过Insert Cookie/Rewrite Cookie/Prefix Cookie,以及上述的多种Hash方式实现会话保持
4.SSL:HAProxy可以解析HTTPS协议,并能够将请求解密为HTTP后向后端传输
5.HTTP请求重写与重定向
6.监控与统计:HAProxy提供了基于Web的统计信息页面,展现健康状态和流量数据。基于此功能,使用者可以开发监控程序来监控HAProxy的状态
性能
采用单线程、事件驱动、非阻塞模型,减少上下文切换的消耗,能在1ms内处理数百个请求。并且每个会话只占用数KB的内存。
大量精细的性能优化,如O(1)复杂度的事件检查器、延迟更新技术、Single-buffereing、Zero-copy forwarding等等,这些技术使得HAProxy在中等负载下只占用极低的CPU资源。
HAProxy大量利用操作系统本身的功能特性,使得其在处理请求时能发挥极高的性能,通常情况下,HAProxy自身只占用15%的处理时间,剩余的85%都是在系统内核层完成的。
HAProxy作者在8年前(2009)年使用1.4版本进行了一次测试,单个HAProxy进程的处理能力突破了10万请求/秒,并轻松占满了10Gbps的网络带宽。
HAProxy一旦成功启动,除非操作系统或硬件故障,否则就不会崩溃
配置
global #全局属性
daemon #以daemon方式在后台运行
maxconn 256 #最大同时256连接
pidfile /home/ha/haproxy/conf/haproxy.pid #指定保存HAProxy进程号的文件
defaults #默认参数
mode http #http模式
timeout connect 5000ms #连接server端超时5s
timeout client 50000ms #客户端响应超时50s
timeout server 50000ms #server端响应超时50s
frontend http-in #前端服务http-in
bind *:8080 #监听8080端口
default_backend servers #请求转发至名为"servers"的后端服务
backend servers #后端服务servers
server server1 127.0.0.1:8000 maxconn 32 #backend servers中只有一个后端服务,名字叫server1,起在本机的8000端口,HAProxy同时最多向这个服务发起32个连接
注意:HAProxy要求系统的ulimit -n参数大于[maxconn*2+18],在设置较大的maxconn时,注意检查并修改ulimit -n参数
HAProxy的配置文件共有5个域
global: 用于配置全局参数
default: 用于配置所有frontend和backend的默认属性
frontend: 用于配置前端服务(即HAProxy自身提供的服务)实例
backend: 用于配置后端服务(即HAProxy后面接的服务)实例组
listen: frontend+backend的组合配置,可以理解成更简洁的配置方法
global域的关键配置
daemon:指定HAProxy以后台模式运行,通常情况下都应该使用这一配置
user [username] :指定HAProxy进程所属的用户
group [groupname] :指定HAProxy进程所属的用户组
log [address] [device] [maxlevel] [minlevel]:日志输出配置,如log 127.0.0.1 local0 info warning,即向本机rsyslog或syslog的local0输出info到warning级别的日志。其中[minlevel]可以省略。HAProxy的日志共有8个级别,从高到低为emerg/alert/crit/err/warning/notice/info/debug
pidfile :指定记录HAProxy进程号的文件绝对路径。主要用于HAProxy进程的停止和重启动作。
maxconn :HAProxy进程同时处理的连接数,当连接数达到这一数值时,HAProxy将停止接收连接请求
stats enable:启用统计页;基于默认的参数启用stats page;
stats auth <user>:<passwd>:认证时的账号和密码,可使用多次;默认不需要认证
stats realm <realm>:认证时的标题,提示;默认为 "HAProxy Statistics"
stats uri <prefix>:自定义stats page uri,访问的接口,默认 /haproxy?stats,
stats refresh <delay>:设定自动刷新时间间隔;
stats admin { if | unless } <cond>:启用stats page中的管理功能
stats hide-version 隐藏版本信息
配置示例:
listen stats
bind :9099
stats enable
stats uri /haproxy?admin
stats realm HAPorxy\ Stats\ Page
stats auth admin:haproxy
stats admin if TRUE
访问uri为:http://HAProxy_IP:9099/haproxy?admin
启动 service haproxy start
停止 service haproxy stop
重启 service haproxy restart