Haproxy集群与常见的web集群软件调度器对比

一、常见的web集群调度器

web集群调度器分为软件和硬件:

①常用软件调度器:

LVS:性能最好,搭建复杂。

Nginx:性能较好,但集群节点健康检查功能性不强,高并发性能较弱。

Haproxy:高并发性能好。

②常用硬件调度器:

梭子鱼,绿盟。F5,Array等

二、Haproxy基本介绍

1、Haproxy是什么?

Haproxy是一个使用C语言编写的自由开放源代码软件,其提供高可用性,负载均衡,以及基于TCP和HTTP的应用程序代理。

是免费,快速并且可靠的一种解决方案。Haproxy非常适用于并发web站点,这些站点通常又需要会话保持或七层处理。

Haproxy的运行模式使得它可以很简单安全的整合到当前的架构中,同时可以保护web服务器不被暴露到网络上。

2、Haproxy的特性

  • 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;
  • 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;
  • 支持多达8种负载均衡算法,同时也支持会话保持;
  • 支持虚机主机功能,从而实现web负载均衡更加灵活;
  • 支持连接拒绝、全透明代理等独特的功能;
  • 拥有强大的ACL支持,用于访问控制;
  • 其独特的弹性二叉树数据结构,使数据结构的复杂性上升到了0(1),即数据的查寻速度不会随着数据条目的增加而速度有所下降;
  • 支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成;
  • 支持TCP加速,零复制功能,类似于mmap机制;
  • 支持响应池 (response buffering);
  • 支持RDP协议;
  • 基于源的粘性,类似nginx的ip hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器;
  • 更好统计数据接口,其web接口显示后端集群中各个服务器的接收、发送、拒绝、错误等数据的统计信息;
  • 详细的健康状态检测,web接口中有关于对上游服务器的健康检测状态, 并提供了一定的管理功能;
  • 基于流量的健康评估机制;
  • 基于http认证;
  • 基于命令行的管理接口;
  • 日志分析器,可对日志进行分析

3、Haproxy常用的8种负载均衡算法

Haproxy支持多种调度算法,最常用的有8种。

①轮询:RR

RR算法是最简单最常用的一种算法,就是轮询调度

理解举例:有三个节点A、B、C

第一个用户访问会被指派到节点A

第二个用户访问会被指派到节点B

第三个用户访问会被指派到节点C

第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果

②最小连接数:LC

最小连接算法,根据后端的节点连接数大小动态分配前端请求

理解举例: 有三个节点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算法有很大改进,是米钱用到比较多的一种算法

③基本来源访问:SH

基于来源访问调度算法,用于一些有Session会话记录在服务端的场景,可以基于来源的ip,cookie等做集群调度。

理解举例 有三个节点A、B、C,第一个用户第一次访问被指派到了A,第二个用户第一次访问被指派到了B

当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡器不重启,第一个用户都会被指派到A,第二个用户访问都会被指派到B,实现集群的调度

此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用

④url

表示根据请求的url,做cdn使用

⑤url_param

表示根据HTTP请求头来锁定每一次HTTP请求。

⑥rdp-cookie

表示根据cookie来锁定并哈希每一次TCP请求。

⑦soure

表示根据请求的源IP,类似nginx的IP hash机制

⑧static-rr

表示根据权重,轮询

三、Haproxy对比分析

1、LVS与Haproxy

LVS在企业应用中抗负载能力很强,但存在不足

  • LVS不支持正则处理,不能实现动静分离
  • 对于大型网站,LVS的实施配置复杂,维护成本相对较高

Haproxy是一款可提供高可用性,负载均衡,以及基于tcp和http应用的代理软件

  • 适用于负载大的web站点
  • 运行在硬件上可支持数以万计的并发连接的连接请求

2、LVS,Nginx与Haproxy

①LVS基于Linux操作系统实现软负载均衡,而Haproxy和Nginx是基于第三方应用实现的软负载均衡

②LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而实现Haproxy和Nginx都可以实现4层和7层技术,Haproxy可提供TCP和Http应用的负载均衡综合解决方案

③LVS因为工作在ISO模型的第四层,其状态监测功能单一,而Haproxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态监测方式

④Haproxy功能强大,但整体性能低于4层模式的LVS负载均衡

⑤Nginx主要用于web服务器或者缓存服务器。

3、Haproxy的优点

①Haproxy也是支持虚拟主机的

②Haproxy支持8种负载均衡器策略

③Haproxy的优点能补充nginx的一些缺点,比如支持Session的保持,Cookie的引导,同时支持通过获取指定url来检测后端服务器的状态

④Haproxy跟LVS类似,本身就只是一款负载均衡软件,单纯从效率上来讲Haproxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的

⑤Haproxy支持TCP协议的负载均衡转发

四、实验:部署Haproxy集群

实验环境:Haproxy服务器 192.168.170.111

nginx服务器 192.168.170.113

nginx服务器 192.168.170.114

客户端 192.168.170.115

第一步:部署nginx1 192.168.170.113

1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装依赖关系包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
 
3. #新建用户和组便于管理
useradd -M -s /sbin/nologin nginx
 
4. #切换至opt目录,将下载好的压缩包传进来解压
cd /opt
rz -E
tar -zxf nginx-1.12.0.tar.gz 
 
5. #切换至解压后的目录下编译
cd nginx-1.12.0
 
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
 
6. #安装
make -j4 && make install
 
7. #做软连接,让系统识别nginx的操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
 
8. #将nginx命令加入服务
cd /lib/systemd/system
vim nginx.service
#!/bin.bash
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
 
9. #创建站点目录
echo "this is nginx113 web" > /usr/local/nginx/html/index.html 
cat /usr/local/nginx/html/index.html
 
10. #重新加载单元.启动服务
systemctl daemon-reload 
systemctl start nginx
 
11. #查看是否能成功启动
ss -ntap|grep nginx
curl 192.168.79.113
或者浏览器访问
192.168.79.113

第二步:部署nginx服务器2 192.168.170.114

1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装依赖关系包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
 
3. #新建用户和组便于管理
useradd -M -s /sbin/nologin nginx
 
4. #切换至opt目录,将下载好的压缩包传进来解压
cd /opt
tar -zxf nginx-1.12.0.tar.gz 
 
5. #切换至解压后的目录下编译
cd nginx-1.12.0
 
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
 
6. #安装
make -j4 && make install
 
7. #做软连接,让系统识别nginx的操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
 
8. #将nginx命令加入服务
cd /lib/systemd/system
vim nginx.service
#!/bin.bash
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
 
9. #创建站点目录
echo "this is 230nginx2 web" > /usr/local/nginx/html/index.html 
cat /usr/local/nginx/html/index.html
 
10. #重新加载单元.启动服务
systemctl daemon-reload 
systemctl start nginx
 
11. #查看是否能成功启动
ss -ntap|grep nginx
curl 192.168.79.114
或浏览器访问
192.168.79.114

第三步部署Haproxy服务器 192.168.170.111

1. #关闭防火墙,将安装Haproxy所需软件包传到/opt目录下
systemctl stop firewalld
setenforce 0
 
cd /opt
haproxy-1.5.18.tar.gz
 
2. #安装依赖软件
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
 
3. #解压安装包,并切换至该软件包
cd /opt
rz -E
tar zxf haproxy-1.5.18.tar.gz 
cd haproxy-1.5.18/
 
4. #编译安装Haproxy
make TARGET=linux2628 ARCH=x86_64
make install
####################参数说明###################
TARGET=linux26 #内核版本,
#使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
ARCH=x86_64 #系统位数,64位系统
 
5. #Haproxy服务器配置
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
 
cd /etc/haproxy/
vim haproxy.cfg
global
--4~5行--修改,配置日志记录,local0为日志设备,默认存放到系统日志
		log /dev/log   local0 info		
        log /dev/log   local0 notice
        #log loghost    local0 info
        maxconn 4096					#最大连接数,需考虑ulimit -n限制
--8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉
        #chroot /usr/share/haproxy
        uid 99							#用户UID
        gid 99							#用户GID
        daemon							#守护进程模式
 
defaults        
		log     global					#定义日志为global配置中的日志定义
        mode    http					#模式为http
        option  httplog					#采用http日志格式记录日志
        option  dontlognull				#不记录健康检查日志信息
        retries 3						#检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
        redispatch						#当服务器负载很高时,自动结束当前队列处理比较久的连接
        maxconn 2000					#最大连接数
        contimeout      5000			#连接超时时间
        clitimeout      50000			#客户端超时时间
        srvtimeout      50000			#服务器超时时间
 
--删除下面所有listen项--,添加
listen  webcluster 0.0.0.0:80			#定义一个名为webcluster的应用
        option httpchk GET /index.html	#检查服务器的index.html文件
        balance roundrobin				#负载均衡调度算法使用轮询算法roundrobin
        server inst1 192.168.79.230:80 check inter 2000 fall 3		#定义在线节点
        server inst2 192.168.79.220:80 check inter 2000 fall 3
		
		
		
##########################参数说明########################
balance roundrobin #负载均衡调度算法
#轮询算法:roundrobin;最小连接数算法:leastconn;来源访问调度算法:source,类似于nginx的ip_hash
 
check inter 2000 #表示haproxy服务器和节点之间的一个心跳频率
fall3 #表示连续三次检测不到心跳频率则认为该节点失效
若节点配置后带有“backup”表示该节点只是个备份节点,只有主节点失效该节点才会上。不携带“backup”,表示为主节点,和其它主节点共同提供服务。
 
 
 
6. #添加haproxy系统服务
cp /opt/haproxy-1.5.18/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d/
chmod +x haproxy 
chkconfig --add /etc/init.d/haproxy 
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start

第四步:在客户端 192.168.170.115验证

在客户端使用浏览器打开 
192.168.79.210
不断刷新浏览器测试负载均衡效果
或
curl 192.168.79.210

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python实习生(自动化测试脚本开发) - 面经 - TCL新技术有限公司

JD: 招聘流程: 2024.1.3 Boss直聘 沟通 2024.1.4 约面 2024.1.6 上午面试 面试流程: 上来第一步,直接问Python基础语法,讲一下基础的数据类型 就记得元组和字典 分别具体说一下元组和字典 流程控制语句有哪些&…

IDEA启动项目读取nacos乱码导致启动失败

新安装的2023社区版IDEA,启动项目报错。 forest: interceptors: - com.gdsz.b2b.frontend.api.Interceptors.ApiInterceptor org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1 at org.yaml.snakeyaml.reader.S…

加速HPC计算机集群运行WRF模型,全闪存储阵列与高校科研关系密切

专门从事大气和空间科学的基础和应用研究的印度国家级研究实验室,具有举足轻重的地位,该实验室运行本地 HPC 数据中心。为了满足天气预报和大气研究的需要,该实验室利用了数值天气预报框架——天气研究和预报 (WRF) 模…

外汇天眼:塞舌尔实地探访外汇交易商Exclusive Markets!不存在真实办公场所

实勘原因 塞舌尔的外汇市场规模较小,主要汇率是与美元挂钩的塞舌尔卢比。塞舌尔的外汇市场不太发达,外汇经纪商数量有限,经纪商为本地客户和离岛客户提供外汇交易和汇款服务。外汇监管方面,塞舌尔央行是主要监管机构,…

经典排序算法之希尔排序|c++代码实现||什么是希尔排序|如何代码实现

引言 排序算法c实现系列第4弹——希尔排序 算法介绍 希尔排序(Shell Sort),也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。该排序算法的基本思想是将原始序列分成若干个子序列&#xf…

新质生产力助春播春管:佳格天地连续第5年上线大数据平台,服务春季生产

随着“惊蛰”节气过去,全国各地陆续掀起春播春管热潮。今年的政府工作报告中指出,2023年我国粮食产量1.39万亿斤,再创新高。2024年要坚持不懈抓好“三农”工作,扎实推进乡村全面振兴,粮食产量预期目标1.3万亿斤以上。 粮食产量预期目标的明确为一年农事生产指引了方向。同时,新…

SpringBoot第三课-日志

1.日志分类 2.默认使用 默认使用logback与slf4j作为底层默认日志 但是由于日志是系统启动就需要使用,所以与其他的自动配置不同,自动配置是后来使用的,而日志是使用监听器配置好的。 ApplicationListener 3.日志级别 1.级别介绍 SpringB…

企业为什么要发新闻稿?新闻发稿怎么做?

在当今信息流的时代,新闻稿作为企业传递信息、展示形象的重要工具,发挥着举足轻重的作用。那么,企业为何要发布新闻稿呢?本文将从宣传内容、品牌价值、传播效果、权威性和持久性等方面,深入探讨企业发布新闻稿的必要性…

回溯算法题解(难度由小到大)(力扣,洛谷)

目录 注意: P1157 组合的输出(洛谷)https://www.luogu.com.cn/problem/P1157int result[10000] { 0 }; 216. 组合总和 IIIhttps://leetcode.cn/problems/combination-sum-iii/ 17. 电话号码的字母组合https://leetcode.cn/problems/lett…

文献学习-13-机器人顶刊IJRR近期国人新作(2024.3)

一、IJRR简介 The International Journal of Robotics Research(IJRR)是机器人领域的高水平学术期刊,专注于发布关于机器人技术和相关领域的最新研究成果。IJRR创刊于1982年,是该领域的第一本学术刊物,2022-2023最新影…

qnx启动中控屏黑屏

bmetrics_service boot metrics service, 用于记录统计启动性能信息,读取/dev/bmetrics可以获取到这些信息 # use memorydump memorydump Sets the debug cookies, copies MMU info into reset_info asinfo, sets the secure monitor(TZ) dump buffer, starts tracelogger Usa…

消息队列-Kafka-消费方如何分区与分区重平衡

消费分区 资料来源于网络 消费者订阅的入口:KafkaConsumer#subscribe 消费者消费的入口:KafkaConsumer#poll 处理流程: 对元数据重平衡处理:KafkaConsumer#updateAssignmentMetadataIfNeeded 协调器的拉取处理:onsum…

Fiddler抓包丨最常用功能实战演练

Fiddler中常用的功能如下: 停止抓包清空会话窗内容过滤请求解码设置断点 一. 停止抓包 二. 清空会话窗 方法一,工具栏工具: 方法二,命令行形式: 当然,命令行工具也还支持其他命令的输入,这里不…

【C++】设计模式:建造者、原型、单例

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍设计模式:建造者、原型、单例。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#xf…

接口自动化测试用例的编写方法

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 phpunit 接口自动化测试系列 Post接口自动化测试用例 Post方式…

Java使用spire.doc操作word文档(合并、插入文字图片和表格、替换书签)

一、引入依赖 <dependency><groupId>e-iceblue</groupId><artifactId>spire.office</artifactId><version>7.5.4</version> </dependency> 二、word操作 1、合并word文档 import com.spire.doc.Document; import com.spir…

java多线程实现同步的方式介绍

在 Java 多线程编程中&#xff0c;同步是确保多个线程在访问共享资源时的正确性和一致性的重要机制。Java 提供了多种方式来实现线程同步&#xff0c;每种方式都有其特点和适用场景。以下是一些常见的同步方式及其特点和应用场景&#xff0c;以及简单的例子来说明它们的用法。 …

从零开始的LeetCode刷题日记:142.环形链表II

一.相关链接 视频链接&#xff1a;代码随想录&#xff1a;142.环形链表II 题目链接&#xff1a;142.环形链表II 二.心得体会 这道题是一道链表题&#xff0c;但他没有对头结点的操作&#xff0c;所以不用虚拟头结点。这道题要分两步进行&#xff0c;第一步是判断链表有没有环…

win11修改主机mac地址

很多时候&#xff0c;为了限制恶意的蹭流浪&#xff0c;除了分配固定的ip地址外&#xff0c;还限制mac地址。只有mac与ip一致&#xff0c;才能上网冲浪 网络适配器中修改 搜索“控制面板”打开 控制面板 > 网络和Internet > 网络和共享中心 >查看网络状态和任务>…

Redis什么这么快和Redis单线程模型和多线程

概述 1、完全基于内存&#xff0c;绝大部分请求是纯粹的内存操作&#xff0c;非常快速。数据存在内存中&#xff0c;类似于HashMap&#xff0c;HashMap的优势就是查找和操作的时间复杂度都是O(1)&#xff1b; 2、数据结构简单&#xff0c;对数据操作也简单&#xff0c;Redis中…