一 haproxy
HAProxy简介
HAProxy提供高可用、负载均衡以及基于TCP和HTTP的应用代理,适合处理高负载站点的七层数据请求。类似的代理服务可以屏蔽内部真实服务器,防止内部服务器遭受攻击。
HAProxy特点和优点:
1.支持原声SSL,同时支持客户端和服务器的SSL.
2.支持IPv6和UNIX套字节(sockets)
3.支持HTTP Keep-Alive
4.支持HTTP/1.1压缩,节省宽带
5.支持优化健康检测机制(SSL、scripted TCP、check agent...)
6.支持7层负载均衡。
7.可靠性和稳定性非常好。
8.并发连接40000-50000个,单位时间处理最大请求20000个,最大数据处理10Gbps.
9.支持8种负载均衡算法,同时支持session保持。
10.支持虚拟主机。
11.支持连接拒绝、全透明代理。
12.拥有服务器状态监控页面。
13.支持ACL.
二 HAProxy为了让同一客户端访问服务器可以保持会话。有三种解决方法:客户端IP、Cookie以及Session
1.HAProxy通过客户端IP进行Hash计算并保存,以此确保当相同IP访问代理服务器可以转发给固定的真实服务器。
2.HAProxy依靠真实服务器发送客户端的Cookie信息进行会话保持。
3.HAProxy将保存真实服务器的Session以及服务器标识,实现会话保持。(HAProxy只要求后端服务器能够在网络联通,也没有像LVS那样繁琐的ARP配置)
三 HAProxy的balance8种负载均衡算法:
1.roundrobin : 基于权重轮循。
2.static-rr : 基于权重轮循。静态算法,运行时改变无法生效
3.source : 基于请求源IP的算法。对请求的源IP进行hash运算,然后将结果与后端服务器的权重总数想除后转发至某台匹配服务器。使同一IP客户端请求始终被转发到某特定的后端服务器。
4.leastconn : 最小连接。(适合数据库负载均衡,不适合会话短的环境)
5.uri : 对部分或整体URI进行hash运算,再与服务器的总权重想除,最后转发到匹配后端。
6.uri_param : 根据URL路径中参数进行转发,保证在后端服务器数量不变的情况下,同一用户请求分发到同一机器。
7.hdr(<name>) : 根据http头转发,如果不存在http头。则使用简单轮循。
四 HAProxy主要工作模式
1.tcp模式:该模式下,在客户端和服务器之间将建立一个全双工的连接,且不会对7层的报文做任何处理的简单模式。此模式默认,通常用于SSL、SSH、SMTP应用。
2.http模式(一般使用):该模式下,客户端请求在转发给后端服务器之前会被深度分析,所有不与RFC格式兼容的请求都会被拒绝。
HAProxy架构图
五 使用keepalived+Haproxy主从配置来达到能够针对前段流量进行负载均衡到多台后端web1、web2、web3、img1、img2.但是由于haproxy会存在单点故障问题,因此使用keepalived来实现对Haproxy单点问题的高可用处理。
六 三大主流软件负载均衡器对比(LVS VS Nginx VS Haproxy)
衡量负载均衡器好坏的几个重要因素:
1、会话率 :单位时间内的处理的请求数
2、会话并发能力:并发处理能力
3、数据率:处理数据能力
经过官方测试统计,haproxy 单位时间处理的最大请求数为20000个,可以同时维护40000-50000个并发连接,最大数据处理能力为10Gbps。综合上述,haproxy是性能优越的负载均衡、反向代理服务器。
LVS
1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
3、应用范围比较广,可以对所有应用做负载均衡;
4、不支持正则处理,不能做动静分离。
5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
6、配置 复杂,对网络依赖比较大,稳定性很高。
Ngnix
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
2、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;
7、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
8、不支持Session的直接保持,但能通过ip_hash来解决。、对Big request header的支持不是很好,
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)
10、Nginx还能做Web服务器即Cache功能。
HAProxy
1 支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
2 能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3 支持url检测后端的服务器出问题的检测会有很好的帮助。
4 更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5 单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6 HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
7 支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
10 不能做Web服务器即Cache。
七 Haproxy的配置文件进行详解
八 实验拓扑图
1 准备五台虚拟机
2 配置ip
Client:192.168.1.1
HAproxy:192.168.1.2
Web1:192.168.1.3
Web2:192.168.1.4
Web3:192.168.1.5
3 下载软件
Client:#yum -y install elinks
HAproxy:#yum -y install haproxy
Web1/2/3:#yum -y install httpd
配置主页文件:#vim /etc/www/html/index.html
4.编辑HAproxy配置文件
#vim /etc/haproxy/haproxy.cfg
5.启动服务
#systemctl start haproxy
6.客户端测试
#elinks http:192.168.1.2(反复浏览,web1/2/3主页文件交替出现)
注:假若想访问监控界面:配置stats uri /haproxy项,重启服务(在haproxy服务器上加一个网卡。改为nat模式,用真实机浏览器访问http://新加网卡的IP/haproxy)
九 keepalived+haproxy
1.实验拓扑图
2.需要五台虚拟机
3.全部设置为nat模式
4.下载软件
主/备:yum -y install keepalived haproxy
Wed1/2/3:yum install httpd(配置主页文件)
5编辑配置文件
#vim /etc/keepalived/keepalived.conf
主:
备:
主/备:
6.在真实机用浏览器访问http://192.168.20.188,web1/2/3主页文件交替出现。(访问检测页面只需在IP地址后加/haproxy)
注:若主负载均衡器宕机,用浏览器依然可以看到web1/2/3主页交替出现。若其中一台web服务器宕机,依然可以看到web主页文件