HAProxy介绍
HAProxy
HAProxy: 是法国人Willy Tarreau 开发的一个开源软件,是一 款应对客户端10000 以上的同时连接的高性能的TCP和HTTP 负载均衡器。
其功能是用来提供基于cookie的持久性,基于内容的交换,过载保护的高级流量管制,自动故障切换,以正则表达式为基础的标题控制运行时间,基于Web 的报表,高级日志记录以帮助排除故障的应用或网络及其他功能。
LB Cluster:
四层:lvs, nginx(stream) ,haproxy(mode tcp)
七层:http: nginx(http), haproxy(mode http), httpd...
HAProxy :http://www.haproxy.org
文档:https://cbonte.github.io/haproxy-dconv/
软件负载均衡一般通过两种方式来实现:
基于操作系统的软负载实现和基于第三方应用的软负载实现。
LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。
HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件。
HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。
HAProxy支持两种主要的代理模式
TCP 即4层 (大多用于邮件服务器、内部协议通信服务器等),在4层模式下,HAProxy仅在客户端和服务器之间转发双向流量。
它主要是通过分析IP层及TCP/UDP层的流量实现的基于IP加端口的负载均衡。
仅建立一次TCP连接。
HTTP 即7层模式,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或删除请求 (request)或者回应(response)里指定内容来控制协议,
七层负载均衡器可以根据报文内容,再配合负载均衡算法来选择后端服务器,因此也称为“内容交换器”。
负载均衡器与客户端及后端的服务器会分别建立一次TCP连接
七层负载均衡对负载均衡设备的要求更高,而七层负载均 衡的处理能力也必然低于四层模式的负载均衡。
HAProxy负载均衡策略非常多
HAProxy的负载均衡算法现在具体有如下8种:
roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
static-rr,表示根据权重,建议关注;
leastconn,表示最少连接者先处理,建议关注;
source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
ri,表示根据请求的URI;
rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;
hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
HAProxy优缺点
HAProxy的优点
1、HAProxy是支持虚拟主机的,通过frontend指令来实现
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件,单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
5、HAProxy支持TCP协议的负载均衡转发,可以对mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS
6、能对请求的url和header中的信息做匹配,有比LVS有更好的7层实现
7、自带强大的监控服务器状态的页面。
HAProyx的缺点
1、重载配置的功能需要重启进程,虽然也是 soft restart,但没有 Nginx 的 reaload 更为平滑和友好。
2、多进程模式支持不够好。
3、不支持 HTTP cache 功能,现在不少开源的 lb 项目,都或多或少具备 HTTP cache 功能。
HAProxy功能
HAProxy 是TCP / HTTP 反向代理服务器,尤其适合于高可用性环境。
可以针对HTTP 请求添加cookie,进行路由后端服务器
可平衡负载至后端服务器,并支持持久连接
支持基于cookie 进行调度
支持所有主服务器故障切换至备用服务器
支持专用端口实现监控服务
支持不影响现有连接情况下停止接受新连接请求
可以在双向添加,修改或删除HTTP 报文首部
支持基于pattern 实现连接请求的访问控制
通过特定的URI 为授权用户提供详细的状态信息
支持http 反向代理
支持动态程序的反向代理
支持基于数据库的反向代理
HAProxy 组成
程序环境:
yum install haproxy
rpm -ql haproxy
/etc/haproxy
/etc/haproxy/haproxy.cfg
/etc/logrotate.d/haproxy
/etc/rc.d/init.d/haproxy
/etc/sysconfig/haproxy
/usr/bin/halog
/usr/bin/iprange
/usr/sbin/haproxy
/usr/share/doc/haproxy-1.5.18
/usr/share/haproxy
/var/lib/haproxy
主程序:/usr/sbin/haproxy
配置文件:/etc/haproxy/haproxy.cfg
Unit file :/usr/lib/systemd/system/haproxy.service
配置段:
global :全局配置段
进程及安全配置相关的参数
性能调整相关参数
Debug 参数
proxies :代理配置段
defaults :为frontend, backend, listen 提供默认配置
fronted :前端,相当于nginx, server {}
backend :后端,相当于nginx, upstream {}
listen :同时拥有前端和后端,
简单的配置示例:
frontend web
bind *:80
default_backend websrvs
backend websrvs
balance roundrobin
server srv1 172.16.0.6:80 check
server srv2 172.16.0.7:80 check