HAProxy集群与常见的Web集群软件调度器对比

news2024/11/24 17:41:13

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
即可实现主备

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1024360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【操作系统笔记】链接阶段ELF文件

链接阶段&#xff1a;符号解析 链接阶段主要包含&#xff1a; 符号解析重定位 一般情况下&#xff0c;每个 C 文件可以看成一个程序模块&#xff0c;比如下边的main.c就是一个程序模块 #include <stdio.h>extern int shared; int sum(int *a, int n); int array[2] …

关于RISC-V安全性的全面综述

目录 摘要引言RISC-V安全综述通用平台的安全要求信任的根源与硬件安全模块OTP管理模块安全内存对称加密&#xff08;如AES&#xff09;引擎不对称加密[131]&#xff08;例如&#xff0c;公钥RSA&#xff09;引擎HASH/HAMC引擎随机数/位生成&#xff08;例如TRNG[136]&#xff0…

滴滴 OrangeFS 数据湖存储关键技术揭秘!

2015年&#xff0c;滴滴为解决小文件和图片的存储&#xff0c;成立 GIFT 小对象存储项目。伴随着业务不断成长&#xff0c;我们面临的挑战也越来越多&#xff0c;经历多次非结构化存储架构演进&#xff0c;具体如下图所示&#xff1a; 随着公司不断发展&#xff0c;滴滴的业务有…

基于Java+SpringBoot+Vue的即可运动健身器材网站设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

Spring Boot常见面试题

Spring Boot简介 Spring Boot 是由 Pivotal 团队提供&#xff0c;用来简化 Spring 应用创建、开发、部署的框架。它提供了丰富的Spring模块化支持&#xff0c;可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能&#xff0c;降低了复杂性&#xff0c;同…

ClickHouse进阶(十九):clickhouse管理与运维-权限管理

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Kerberos安全认证-CSDN博客 &#x1f4cc;订阅&#xff1a;拥抱…

MySQL数据库——索引(1)-概述以及B-Tree结构

目录 索引概述 介绍 优缺点 索引结构&#xff08;1&#xff09; 介绍 二叉树 B-Tree 索引这一个章节将分为以下几个部分来学习&#xff1a; 索引概述索引结构索引分类索引语法SQL性能分析索引使用索引设计原则 索引概述 介绍 索引&#xff08;index&#xff09;是帮助M…

基于SSM的星空游戏购买下载平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

RocketMq(四)消息分类

一、普通消息 1、同步发送消息&#xff1a;指的是Producer发出⼀条消息后&#xff0c;会在收到MQ返回的ACK之后才发下⼀条消息。该方式的消息可靠性最高&#xff0c;但消息发送效率低。 二、顺序消息 三、延时消息

JAVAAndroid实现MQTT上位机软件功能-订阅主题与发布主题

一、前言 本文我们将介绍Android或JAVA程序作为MQTT客户端连接MQTT服务器并订阅主题报文并发布主题报文&#xff0c;由于我的Android使用的也是JAVA语言&#xff0c;因此下面我们将使用IDEA完成JAVA程序&#xff0c;以实现订阅主题和发布主题的功能&#xff0c;该程序也可在后期…

MQ - 08 基础篇_消费者客户端SDK设计(下)

文章目录 导图Pre概述消费分组协调者消费分区分配策略轮询粘性自定义消费确认确认后删除数据确认后保存消费进度数据消费失败处理从服务端拉取数据失败本地业务数据处理失败提交位点信息失败总结导图 Pre

Linux系统编程(会话和进程)

文章目录 前言一、会话的概念二、会话和终端的区别三、终端进程组标识四、创建会话总结 前言 本篇文章我们来讲解会话和进程的概念&#xff0c;会话大家可能比较少见&#xff0c;他的英文名称叫session。 一、会话的概念 在Linux中&#xff0c;会话&#xff08;Session&…

9月15日上课内容 Zookeeper集群 + Kafka集群

Zookeeper 本章结构 Zookeeper 概述 Zookeeper 定义 *&#xff08;了解&#xff09; Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 Zookeeper 工作机制 *****&#xff08;非常重要&#xff0c;需要掌握&#xff09; Zookeeper从设计模式…

diffusers中DDPMScheduler/AutoencoderKL/UNet2DConditionModel/CLIPTextModel代码详解

扩散模型的训练时比较简单的 上图可见&#xff0c;unet是epsθ是unet。noise和预测出来的noise做个mse loss。 训练的常规过程&#xff1a; latents vae.encode(batch["pixel_values"].to(weight_dtype)).latent_dist_sample() latents latents*vae.config.scali…

QT连接Sqlite

使用QTCreator&#xff1b; 根据资料&#xff0c;Qt自带SQLite数据库&#xff0c;不需要再单独安装&#xff0c;默认情况下&#xff0c;使用SQLite版本3&#xff0c;驱动程序为***QSQLITE***&#xff1b; 首先创建项目&#xff1b;在 Build system 中应选中qmake&#xff0c;…

前端自定义导出PPT

1、背景 前端导出PPT&#xff0c;刚接触这个需求&#xff0c;还是比较懵逼&#xff0c;然后就在网上查找资料&#xff0c;最终确认是可行的&#xff1b;这个需求也是合理的&#xff0c;我们做了一个可视化数据报表&#xff0c;报表导出成PPT&#xff0c;将在线报表转成文档类型…

【数据库系统概论】关系数据库中的关系数据结构

前言关系关系模式关系数据库关系模型的存储结构感谢 &#x1f496; 前言 上一篇文章【数据库系统概论】数据模型介绍了数据库系统中的数据模型的基本概念。其中提到了关系模型是最重要的一种数据模型。下面将介绍支持关系模型的数据库系统——关系数据库。 按照数据模型的三大…

蓝牙核心规范(V5.4)10.5-BLE 入门笔记之HCI

HCI全称:HOST Constroller Interface 主机控制器接口(HCI)定义了一个标准化的接口,通过该接口,主机可以向控制器发出命令,并且控制器可以与主机进行通信。规范被分成几个部分,第一部分仅从功能的角度定义接口,不考虑具体的实现机制,而其他部分定义了在使用四种可能的…

Mac 上如何安装Mysql? 如何配置 Mysql?以及如何开启并使用MySQL

前言&#xff1a; 有许多开发的小伙伴&#xff0c;使用的是mac&#xff0c;那么在mac上如何安装&#xff0c;配置Mysql&#xff0c;以及使用Mysql了&#xff0c;今天来一个系统的教程。 安装Mysql 使用mysql前&#xff0c;我们需要先下载mysql&#xff0c;并按照以下几个步骤…

【Oracle】Oracle系列之四--用户管理

文章目录 往期回顾前言1. 创建/删除用户&#xff08;1&#xff09;创建用户&#xff08;2&#xff09;修改口令&#xff08;3&#xff09;删除用户 2. 用户授权管理&#xff08;1&#xff09;对用户直接授权&#xff08;2&#xff09;通过角色对用户授权 往期回顾 【Oracle】O…