HAProxy集群与常见的Web集群软件调度器对比
- 1、常见的Web集群调度器
- 2、Haproxy基本介绍
- 2.1Haproxy是什么?
- 2.2Haproxy的特性
- 2.3Haproxy常用的8种负载均衡调度算法
- 2.3.1轮询:RR(Round Robin)
- 2.3.2最小连接数:LC(Least Connections)
- 2.3.3基本来源访问:SH(Source Hashing)
- 2.3.4 uri
- 2.3.5url_param
- 2.3.6rdp—cookie(name)
- 2.3.7source
- 2.3.8static-rr
- 4、LVS、nginx和HAProxy区别
- 5、Haproxy的优点
- 6、实验:部署haproxy集群+动静分离+keepalived主备
1、常见的Web集群调度器
Web集群调度器分为软件和硬件:
常用软件调度器:
- LVS:性能最好,搭建复杂
- Nginx:性能较好,但集群节点健康检查功能呢不强,高并发性能较弱
- Haproxy:高并发性能好
常用硬件调度器:
梭子鱼、绿盟、F5、Array等
2、Haproxy基本介绍
2.1Haproxy是什么?
(1)HAproxy是一种高性能、开源的负载均衡器和代理服务器,通常用于将客户端请求分发到多个后端服务器上。HAproxy主要用于提高应用程序的可用性、灵活性和性能,
(2)HAproxy通常被用作Web应用程序的负载均衡器,可以通过多种算法(例如轮询、IP散列或最少连接数)将请求分发到多个服务器上。HAproxy还可以进行会话保持,确保客户端的请求始终被发送到同一台服务器。此外,HAproxy还提供了一些高级功能,如SSL终止、HTTP2支持、健康检查和动态配置等。
(3)HAproxy的性能非常卓越,能够处理大量的并发连接和高流量,同时保持响应速度快和低延迟。它还支持多种操作系统和平台,并且可以与各种第三方工具和技术集成,例如Docker、Kubernetes、Prometheus、Grafana等。
2.2Haproxy的特性
1.可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;
2.最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;
3.支持多达8种负载均衡算法,同时也支持会话保持;
4.支持虚机主机功能,从而实现web负载均衡更加灵活;
5.支持连接拒绝、全透明代理等独特的功能;
6.拥有强大的ACL支持,用于访问控制;
7.其独特的弹性二叉树数据结构,使数据结构的复杂性上升到了0(1),即数据的查寻速度不会随着数据条目的增加而速度有所下降;
8.支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成;
9.支持TCP加速,零复制功能,类似于mmap机制;
10.支持响应池(response buffering);
11.支持RDP协议;
12.基于源的粘性,类似nginx的ip_hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器;
13.更好统计数据接口,其web接口显示后端集群中各个服务器的接收、发送、拒绝、错误等数据的统计信息;
14.详细的健康状态检测,web接口中有关于对上游服务器的健康检测状态,并提供了一定的管理功能;
15.基于流量的健康评估机制;
16.基于http认证;
17.基于命令行的管理接口;
18.日志分析器,可对日志进行分析。
2.3Haproxy常用的8种负载均衡调度算法
Haproxy支持多种调度算法,最常用的有8种
2.3.1轮询:RR(Round Robin)
RR算法是最简单最常用的一种算法,即轮询调度 理解举例:有三个节点A、B、C
第一个用户访问会被指派到节点A
第二个用户访问会被指派到节点B
第三个用户访问会被指派到节点C
第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果
2.3.2最小连接数:LC(Least Connections)
最小连接数算法,根据后端的节点连接数大小动态分配前端请求 理解举例: 有三个节点A、B、C,各节点的连接数分别为A:4 B:5 C:6
第一个用户连接请求,会被指派到A上,连接数变为A:5 B:5 C:6
第二个用户请求会继续分配到A上,连接数变为A:6 B:5
C:6;再有新的请求会分配给B,每次将新的请求指派给连接数最小的客户端
由于实际情况下A、B、C的连接数会动态释放,很难会出现一样连接数的情况
此算法相比较rr算法有很大改进,是米钱用到比较多的一种算法
2.3.3基本来源访问:SH(Source Hashing)
基于来源访问调度算法,用于一些有Session会话记录在服务端的场景,可以基于来源的IP、Cookie等做集群调度 理解举例:
有三个节点A、B、C,第一个用户第一次访问被指派到了A,第二个用户第一次访问被指派到了B
当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡器不重启,第一个用户都会被指派到A,第二个用户访问都会被指派到B,实现集群的调度
此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用
.csdn.net/ZHUZIH6/article/details/129795194
2.3.4 uri
表示根据请求的URI,做cdn需使用
2.3.5url_param
表示根据HTTP请求头来锁定每 一 次HTTP请求。
2.3.6rdp—cookie(name)
表示根据据cookie (name)来锁定并哈希每一次TCP请求。
2.3.7source
表示根据请求的源IP,类似Nginx的IP hash机制。
2.3.8static-rr
表示根据权重,轮询
4、LVS、nginx和HAProxy区别
1.LVS(Linux Virtual Server)是一种基于Linux内核实现的负载均衡器,可以将请求分发到多个后端服务器上。LVS支持多种负载均衡算法,如轮询、IP散列、最少连接数等。LVS的优点是高性能、稳定性好,但需要对内核进行定制和配置。
2.nginx是一种高性能的Web服务器和LVS适用于大规模分布式系统的负载均衡,nginx适用于静态资源缓存和反向代理等场景,HAProxy适用于Web应用程序的负载均衡和代理等场景。在实际应用中,可以根据具体的需求和场景选择适合的负载均衡器。反向代理服务器,也可以用作负载均衡器。nginx支持多种负载均衡算法,如轮询、IP散列、最少连接数等。nginx的优点是性能好、可靠性高、功能齐全,常用于静态资源缓存和反向代理等场景
3.HAProxy是一种高性能、开源的负载均衡器和代理服务器,通常用于将客户端请求分发到多个后端服务器上。HAProxy支持多种负载均衡算法,如轮询、IP散列、最少连接数等。HAProxy的优点是性能好、功能强大、配置灵活,可以用于各种负载均衡场景。
nginx
① 支持正则
② 只支持基于端口的健康检查
③ 不支持session直接保持、但能通过ip_hash来解决
④ 对网络稳定性要求不高
⑤ 反向代理能力强
LVS
① 只能基于四层端口转发
② 尽在四层做分发作用 抗负载能力强
③ 应用范围广
haproxy
① 支持8种负载均衡策略
② 仅作负载均衡软件使用,在高并发情况下性能优于nginx
③ 支持URL检测 支持session保持
总结:LVS适用于大规模分布式系统的负载均衡,nginx适用于静态资源缓存和反向代理等场景,HAProxy适用于Web应用程序的负载均衡和代理等场景。在实际应用中,可以根据具体的需求和场景选择适合的负载均衡器。
5、Haproxy的优点
1、Haproxy也是支持虚拟主机的
2、Haproxy支持8种负载均衡器策略
3、Haproxy的优点能补充nginx的一些缺点,比如支持Session的保持,Cookie的引导,同时支持通过获取指定url来检测后端服务器的状态
4、Haproxy跟LVS类似,本身就只是一款负载均衡软件,单纯从效率上来讲Haproxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的
5、Haproxy支持TCP协议的负载均衡转发
6、实验:部署haproxy集群+动静分离+keepalived主备
配置haproxy:192.168.190.130
1.//关闭防火墙,将安装Haproxy所需软件包传到/opt目录下
systemctl stop firewalld
setenforce 0
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
//安装依赖环境
tar zxvf haproxy-2.8.3.tar.gz
//解压文件
cd haproxy-2.8.3/
//进入到haproxy2.8.3中
make PREFIX-/usr/local/haproxy ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSS=1 USE_ ZLIB=1 USE_SYSTEMD=1
make install PREFIX=/usr/local/haproxy
useradd -M -s /sbin/nologin haproxy
vim /etc/haproxy/haproxy.cfg
//修改配置文件
#配置文件
vim haproxy.cfg
global
log 127.0.0.1 local0 info
log 127.0.0.1 local1 warning
maxconn 30000
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
daemon
spread-checks 2
defaults
log global
mode http #七层代理
option http-keep-alive
option forwardfor
option httplog
option dontlognull
option redispatch
option abortonclose
maxconn 20000
retries 3
timeout http-request 2s
timeout queue 3s
timeout connect 1s
timeout client 10s
timeout server 2s
timeout http-keep-alive 10s
timeout check 2s
#前端配置,根据用户的访问请求,跳转到对应的后端?
frontend http-in
#监听地址
bind *:80
acl dynamic path_end -i .jsp
use_backend tomcat_server if dynamic
#都没匹配到,跳转到默认
default_backend nginx_servers
backend tomcat_server
balance roundrobin
option http-server-close
cookie HA_STICKY_dy insert indirect nocache
server tomcat1 192.168.190.100:8080 cookie tomcat1 inter 2000 rise 2 fall 3
server tomcat2 192.168.190.101:8080 cookie tomcat2 check
backend nginx_servers
balance roundrobin
#节点服务器根目录下要有此文件
option httpchk GET /test.html
server nginx1 192.168.190.200:80 check inter 2000 rise 2 fall 3
server nginx2 192.168.190.120:80 check inter 2000 rise 2 fall 3
listen stats
bind *:1080
stats enable
stats refresh 30s
stats uri /stats
stats realm HAProxy\ Stats
stats auth admin:admin
cd /opt/haproxy-2.8.3/examples
cp haproxy.init /etc/init.d/haproxy
vim /etc/init.d/haproxy
vim /etc/init.d/haproxy
#!/bin/bash
#chkconfig: 2345 90 30
#description: Haproxy Service Control Script
PROGDIR=/usr/local/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/conf/$PROGNAME.cfg
PIDFILE=/var/run/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
start()
{
echo -e "Starting $DESC: $PROGNAME\n"
$DAEMON -f $CONFIG
echo "......"
}
stop()
{
echo -e "Stopping $DESC: $PROGNAME\n"
haproxy_pid="$(cat $PIDFILE)"
kill $haproxy_pid
echo "......"
}
restart()
{
echo -e "Restarting $DESC: $PROGNAME\n"
$DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
echo "......"
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}"
exit 1
;;
esac
exit 0
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/
chmod +x haproxy
chkconfing --add /etc/init.d/haproxy
chkconfing --list haproxy
chkconfig --level 35 haproxy on
chkconfing --list haproxy
service haproxy start
设置主备:
即将直接把haproxy的ip设置为keepalived的虚拟ip
即可实现主备