Haproxy

HAProxy介绍

HAProxy是可提供高可用性、负载均衡以及基于TcP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HProxy非常适用于并发大(并发达1w以上) web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。

HAProxy的主要特性有:

  1. 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;

  2. 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;

  3. 支持多达8种负载均衡算法,同时也支持会话保持;

  4. 支持虚拟机主机功能,从而实现web负载均衡更加灵活;

  5. 支持连接拒绝、全透明代理等独特的功能;

  6. 拥有强大的ACL支持,用于访问控制;

  7. 其独特的弹性二义树数据结构,使数据结构的复杂性上升到了0(1),即数据的查寻速度不会随着数据条日的增加而速度有所下降;·支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成;

  8. 支持TCP加速,零复制功能,类似于mmap机制;

  9. 支持响应池(response buffering) ;

  10. 支持RDP协议;

  11. 基于源的粘性,类似nginx的ip hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器;·更好统计数据接口,其web接口显示后端集群中各个服务器的接收、发送、拒绝、错误等数据的统计信息;

  12. 详细的健康状态检测,web接口中有关于对上游服务器的健康检测状态,并提供了一定的管理功能;

  13. 基于流量的健康评估机制;

  14. 基于http认证;

  15. 基于命令行的管理接口;

  16. 日志分析器,可对日志进行分析。

HAProxy负载均衡策

(1) roundrobin,表示简单的轮询

(2) static-rr,表示根据权重

(3) leastconn,表示最少连接者先处理

( 4) source,表示根据请求源IP

(5) uri,表示根据请求的URI,做cdn需使用;

(6) url param,表示根据请求的URl参数' balance url param’requires an URL parameter name

(7) hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

(8) rdp-cookie (name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

配置文件详解

chroot    #锁定运行目录
deamon    #以守护进程运行,后台运行
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin process 1
#socket文件
user, group, uid, gid  #运行haproxy的用户身份
nbproc    n     #开启的haproxy work 进程数,默认进程数是一个
#nbthread  1    #和多进程 nbproc配置互斥(版本有关,CentOS8的haproxy1.8无此问题),指定每个haproxy进程开启的线程数,默认为每个进程一个线程
#如果同时启用nbproc和nbthread 会出现以下日志的错误,无法启动服务Apr  714:46:23 haproxy haproxy: [ALERT] 097/144623 (1454) : config : cannot enable multiple processes if multiple threads are configured. Please use either nbproc or nbthread but not both.

cpu-map 10     #绑定haproxy worker 进程至指定CPU,将第1个work进程绑定至0号CPU
cpu-map 21     #绑定haproxy worker 进程至指定CPU,将第2个work进程绑定至1  号CPU
maxconn  n      #每个haproxy进程的最大并发连接数
maxsslconn  n   #每个haproxy进程ssl最大连接数,用于haproxy配置了证书的场景下
maxconnrate n   #每个进程每秒创建的最大连接数量
spread-checks n #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间,默认值0
pidfile         #指定pid文件路径
log 127.0.0.1  local2 info #定义全局的syslog服务器;日志服务器需要开启UDP协议,最多可以定义两个

defaults
        log     global    	#引入global定义的日志格式
        mode    http      	#模式为http(7层代理http,4层代理tcp)
        option  httplog	   	#日志类别为http日志格式		 	
        option  dontlognull	#不记录健康检查日志信息
        retries 3           #检查节点服务器失败次数,连续达到3次,则反馈不可用 
        redispatch			#当服务器负载很高时,自动结束当前队列处理比较久的连接
        maxconn 2000		#最大连接数,此处的数值不能大于全局里的数值
        contimeout      5000  #设置连接超时时间,默认单位是毫秒
		clitimeout      50000 #设置客户端超时时间,默认单位是毫秒
		srvtimeout      50000 #设置服务器超时时间,默认单位是毫秒

#以下是新版本中的
timeout http-request 10s  	#默认http请求超时时间
timeout queue 1m 			#默认队列超时时间	
timeout connect 10s 		#默认连接超时时间,新版本中替代
timeout client 1m
timeout server 1m
timeout http-keep-alive
timeout check 10s


defaults [<name>] #默认配置项,针对以下的frontend、backend和listen生效,可以多个name也可以没有name
frontend <name>   #前端servername,类似于Nginx的一个虚拟主机 server和LVS服务集群。
backend <name>   #后端服务器组,等于nginx的upstream和LVS中的RS服务器
listen   <name>   #将frontend和backend合并在一起配置,相对于frontend和backend配置更简
洁,生产常用


使用listen替换 frontend和backend的配置方式,可以简化设置,通常只用于TCP协议的应用
#官网业务访问入口
listen  webcluster 0.0.0.0:80
        option httpchk GET /test.html
        balance roundrobin
        server  inst1 192.168.91.102:80 check inter 2000 fall 3
        server  inst2 192.168.91.103:80 check inter 2000 fall 3

配置安装hapaxy服务

haproxy服务器:192.168.91.100
http1:192.168.91.101
http2:192.168.91.102

setenforce 0
systemctl stop firewalld
[root@master100 opt]#systemctl stop firewalld
[root@master100 opt]#setenforce 0
#传入安装包
[root@localhost ~]# yum -y install pcre-devel bzip2-devel gcc gcc-c++ make
[root@localhost opt]# tar xzvf haproxy-1.4.24.tar.gz 
[root@localhost opt]# cd haproxy-1.4.24/
[root@localhost haproxy-1.4.24]# make TARGET=linux2628 ARCH=X86_64
#内核版本
[root@localhost haproxy-1.4.24]# make install
[root@localhost haproxy-1.4.24]#mkdir /etc/haproxy
[root@localhost haproxy-1.4.24]#cd examples/
[root@localhost examples]#cp haproxy.cfg /etc/haproxy/
[root@localhost examples]#cd /etc/haproxy/
[root@localhost haproxy]#vim haproxy.cfg 

global
        log /dev/log    local0 info
        ###修改日志文件都是local0
        log /dev/log    local0 notice
        ###修改日志文件都是local0
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy
        ###注释掉根目录
        uid 99
        gid 99
        daemon
        nbproc 1
        ###设置服务器1核
        #debug
        #quiet

defaults
#此处配置默认即可
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000


listen  webcluster 0.0.0.0:80
        option httpchk GET /test.html
        balance roundrobin
        server  inst1 192.168.91.102:80 check inter 2000 fall 3
        server  inst2 192.168.91.103:80 check inter 2000 fall 3



[root@localhost examples]#cd /opt/haproxy-1.4.24/examples
[root@localhost examples]#cp haproxy.init /etc/init.d/haproxy
[root@localhost examples]#cd /etc/init.d/
[root@localhost init.d]#chmod +x haproxy 
[root@localhost init.d]#chkconfig --add haproxy 
[root@localhost sbin]#ln -s /usr/local/sbin/haproxy  /usr/sbin/
[root@localhost sbin]#service haproxy start




#节点服务
setenforce 0
systemctl stop firewalld
[root@master100 opt]#systemctl stop firewalld
[root@master100 opt]#setenforce 0
[root@master100 opt]#yum install httpd -y
[root@master100 opt]#cd /var/www/html/
[root@master100 opt]#vim test.html
[root@master100 opt]#systemctl start httpd
[root@master100 opt]# ss -ntap |grep 80
[root@localhost sbin]#curl 192.168.91.100/test.html

企业常用集群调度器的优缺点

Nginx的优点:

●工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构。Nginx正则规则比HAProxy更为强大和灵活。
●Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,LVS对网络稳定性依赖比较大,稳定要求相对更高。
●Nginx安装和配置、测试比较简单、方便,有清晰的日志用于排查和管理,LVS的配置、测试就要花比较长的时间了。
●可以承担高负载压力且稳定,一般能支撑几万次的并发量,负载度比LVS相对小些。
●Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等。
●Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。
●Nginx作为Web正向加速缓存越来越成熟了,速度比传统的Squid服务器更快,很多场景下都将其作为向代理加速器。
●Nginx作为静态网页和图片服务器,这方面的性能非常优秀,同时第三方模块也很多。

Nginx的缺点:

●Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些。
●对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
●不支持Session的直接保持,需要通过ip_hash和cookie的引导来解决。

LVS的优点:

●抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生。因此负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。
●LVS工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案。
●无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。
●应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库等。

LVS的缺点:

●软件本身不支持正则表达式处理,不能做动静分离。相对来说,Nginx/HAProxy+Keepalived则具有明显的优势。
●如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了。相对来说,Nginx/HAProxy+Keepalived就简单多了。

HAProxy的优点:

●HAProxy也是支持虚拟主机的。
●HAProxy支持8种负载均衡策略。
●HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导,同时支持通过获取指定的url来检测后端服务器的状态。
●HAProxy跟LVS类似,本身就只是一款负载均衡软件,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
●HAProxy支持TCP协议的负载均衡转发。

LVS  Nginx  Haproxy 的区别?

负载均衡性能:

[硬件负载均衡器F5 >] LVS 最好 >  Haproxy 其次 > Nginx 弱于其它两种

支持的代理类型:

1.LVS基于Linux系统内核实现的软负载均衡,只支持4层代理的IP转发,不支持正则匹配
2.Haproxy和Nginx基于应用程序实现的软负载均衡,都能支持4层和7层代理转发,支持正则匹配

支持的节点健康检查方式:

1.LVS可以配合keepalived实现支持对TCP端口和URL路径方式的健康检查
2.Nginx默认情况下只支持被动健康检查,主动健康检查模块需要依赖第三方模块
3. Haproxy支持TCP端口、URL路径、脚本等方式的健康检查
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值