Haproxy原理及部署

news2024/10/7 20:27:01

一、Haproxy简介

1、Haproxy应用分析

LVS在企业中康复在能力很强,但存在不足:

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

Haproxy是一款可以供高可用性、负载均衡和基于TCP和HTTP应用的代理软件 

  • 非常适用于并发大(并发达1w以上)web站点
  • 可保持站点的会话保持或七层处理

2、Haproxy的特性 

  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. 日志分析器,可对日志进行分析
     

3、常见的负载均衡策略 

  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请求。

4、 常见的Web集群调度服务器

  • 目前常见的Web集群调度器分为软件和硬件
  • 软件通常使用开源的LVS、Haproxy、Nginx
  • 硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等

5、LVS、Haproxy、Nginx区别 

  • LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;
  • LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;
  • LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式;
  • HAProxy功能强大,但整体性能低于4层模式的LVS负载均衡。
  • Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好。

nginx
① 支持正则
② 只支持基于端口的健康检查
③ 不支持session直接保持、但能通过ip_hash来解决
④ 对网络稳定性要求不高
⑤ 反向代理能力强

LVS
① 只能基于四层端口转发
② 尽在四层做分发作用 抗负载能力强
③ 应用范围广

haproxy
① 支持8中负载均衡策略
② 仅作负载均衡软件使用,在高并发情况下性能优于nginx
③ 支持URL检测  支持session保持
 

二、 Haproxy搭建 Web 群集

Haproxy服务器:192.168.247.21    
Nginx 服务器1:192.168.247.22  
Nginx 服务器2:192.168.247.23  
客户端:192.168.247.80

1、Haproxy服务器搭建

#参数要求:
TARGET=linux26	#内核版本,
#使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628

ARCH=x86_64 	#系统位数,64位系统

1.关闭防火墙,将安装Haproxy所需软件包传到/opt目录下
systemctl stop firewalld
setenforce 0

haproxy-1.5.19.tar.gz

2.编译安装 Haproxy
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

tar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64
make install

3.Haproxy服务器配置
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/

cd /etc/haproxy/
vim haproxy.cfg
global		#全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
--4~5行--修改,定义haproxy日志输出设置和日志级别,local0为日志设备,默认存放到系统日志
		log /dev/log   local0 info		#修改
        log /dev/log   local0 notice	#修改
        #log loghost    local0 info
        maxconn 4096			#最大连接数,需考虑ulimit -n限制,推荐使用10240
--8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉
        #chroot /usr/share/haproxy
        uid 99					#用户UID
        gid 99					#用户GID
        daemon					#守护进程模式
		nbproc 1				#添加,设置并发进程数,建议与当前服务器CPU核数相等或为其2倍

defaults   	#配置默认参数,这些参数可以被用到Listen,frontend,backend组件     
		log     global			#引入global定义的日志格式
        mode    http			#模式为http(7层代理http,4层代理tcp)
        option  httplog			#日志类别为http日志格式
        option  dontlognull		#不记录健康检查日志信息
        retries 3				#检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
        redispatch				#当服务器负载很高时,自动结束当前队列处理比较久的连接
        maxconn 2000			#最大连接数,“defaults”中的值不能超过“global”段中的定义
        #contimeout 5000        #设置连接超时时间,默认单位是毫秒
        #clitimeout 50000       #设置客户端超时时间,默认单位是毫秒
        #srvtimeout 50000       #设置服务器超时时间,默认单位是毫秒
        timeout http-request 10s 	#默认http请求超时时间
        timeout queue 1m   		#默认队列超时时间
        timeout connect 10s		#默认连接超时时间,新版本中替代contimeout,该参数向后兼容
        timeout client 1m		#默认客户端超时时间,新版本中替代clitimeout,该参数向后兼容
        timeout server 1m		#默认服务器超时时间,新版本中替代srvtimeout,该参数向后兼容
        timeout http-keep-alive 10s		#默认持久连接超时时间
        timeout check 10s		#设置心跳检查超时时间


--删除下面所有listen项--,添加
listen  webcluster 0.0.0.0:80	#haproxy实例状态监控部分配置,定义一个名为webcluster的应用
        option httpchk GET /test.html	#检查服务器的test.html文件
        balance roundrobin				#负载均衡调度算法使用轮询算法roundrobin
        server inst1 192.168.10.16:80 check inter 2000 fall 3		#定义在线节点
        server inst2 192.168.10.17:80 check inter 2000 fall 3

4.添加haproxy 系统服务
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy

ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start	或	/etc/init.d/haproxy start

 

2、节点服务器部署

#关闭防火墙和安全机制
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
1、安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make

2、创建运行用户
useradd -M -s /sbin/nologin nginx

3、编译安装
cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/

cd nginx-1.22.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make && make install

4、优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

5、添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target


--192.168.247.22---
echo "this is kgc web" > /usr/local/nginx/html/test.html

--192.168.247.23---
echo "this is benet web" > /usr/local/nginx/html/test.html

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

systemctl start nginx     #启动nginx 服务

安装Nginx服务过程省略,2台服务器节点安装过程相同,按照上述步骤安装

192.168.247.22 

192.168.247.23 

 验证:客户端访问192.168.247.21/test.html ,不断刷新浏览器测试负载均衡效果

 

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

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

相关文章

开利网络企业数字化服务体系,为E+鲜生综合商业体提供驻点服务

随着开利网络深度合作伙伴E鲜生商业综合体的正式开业,开利网络持续为其提供数字化赋能服务,从数字化体系搭建、数字化营销体系落地到数字化团队落地扶持服务等,全流程跟踪项目上线落地过程情况,并根据市场反馈进行及时优化和调整。…

androidstudio Please specify a signing configuration for this variant (release)

当直接运行release版本时,报错Error: The apk for your currently selected variant cannot be signed. Please specify a signing configuration for this variant (package64-release). 解决报错:添加签名,signingConfigs 写在buildTypes前…

BLFS学习系列 第25章. 图形环境库 —— libdrm

一、简介 libdrm提供了一个用户空间库,用于在支持ioctl接口的操作系统上访问直接渲染管理器(DRM)。libdrm是一个低级别库,通常由图形驱动(程序)使用,如Mesa DRI驱动(程序&#xff0…

技术分享 | 编程界也内卷?浅析“斜杠青年”RCU

随着硬件晶体管的尺寸越来越小,CPU 的频率上限已经基本保持在 4G 左右,但现代人类对于网络的要求不断升级,想要占领市场各厂商只能激发自己的潜能,将单线程代码发展为多核/多线程系统,在这其中,并行是充分利…

解决Spring mvc + JDK17@Resource无法使用的情况

问题描述 我在使用jdk17进行Spring mvc开发时发现 Resource用不了了。 原因 因为JDK版本升级的改动,在Jdk9~17环境下,搭建Springboot项目,会出现原有Resource(javax.annotation.Resource)不存在的问题,导…

el-table动态合并单元格

el-table使用这个方法合并单元格&#xff0c;:span-method“hbcell” <el-table size"small" :data"table.data" border empty-text"暂无数据" :cell-style"cellStyle" :header-cell-style"tableHeaderColor":span-meth…

基于web的教务管理系统java jsp学校学生教师选课mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于web的教务管理系统 系统有3权限&#xff1a;系统…

恒运资本:数据资产入表正式落地,产业化大时代开启,概念股狂欢!

数据要素产业化大时代降临&#xff0c;哪些上市公司有望获益&#xff1f; 8月22日早盘&#xff0c;医疗设备龙头联影医疗开盘跌落&#xff0c;盘中一度跌超15%&#xff0c;跌破发行价&#xff0c;盘中跌幅创该股上市以来单日新高。午间收盘&#xff0c;跌幅仍有13.72%&#xff…

RTSP/Onvif协议EasyNVR安防视频云平台配置录像阈值实现边删边录需求的具体操作步骤

EasyNVR是基于RTSP/Onvif协议的视频接入、处理及分发的安防视频云平台&#xff0c;可提供丰富且灵活的视频能力&#xff0c;包括&#xff1a;设备接入、实时视频直播、录像、云存储、录像回放与检索等功能&#xff0c;也能支持GB28181协议进行平台级联。 有很多用户咨询我们&am…

通达信指标公式16:使用BARSLAST函数写一个指标回测的思路

★★★★★博文原创不易&#xff0c;我的博文不需要打赏&#xff0c;也不需要知识付费&#xff0c;可以白嫖学习小技巧&#xff0c;喜欢的老铁可以多多帮忙点赞&#xff0c;小红牛在此表示感谢&#xff0c;就是对作者的最大支持。愿与诸君共勉&#xff0c;悟道于股市★★★★★…

2023中国算力大会,和鲸科技携手生态伙伴,推动算力创新发展与应用

8月18日至8月19日&#xff0c;由工业和信息化部、宁夏回族自治区人民政府共同主办的 2023 中国算力大会在宁夏银川举行。本届大会以“算领新产业潮流 力赋高质量发展”为主题&#xff0c;聚焦算力前沿技术领域&#xff0c;展示算力融合应用成果&#xff0c;推动算力产业加速发展…

QToolButton

QToolButton API使用方式 使用方法和功能跟QPushButton基本一致, 只不过在对于关联菜单这个功能点上, QToolButton类可以设置弹出的菜单的属性, 以及在显示图标的时候可以设置更多的样式, 可以理解为是一个增强版的QPushButton。 API / 构造函数 / QToolButton::QToolButton(…

C语言小练习(二)

&#x1f31e; “去努力吧&#xff0c;最坏的结果不过是大器晚成&#xff01;” Day02 &#x1f4dd; 一.选择题&#x1f4dd;二.编程题 &#x1f4dd; 一.选择题 1.&#x1f388;、以下程序段的输出结果是&#xff08; &#xff09; #include <stdio.h> int main() {…

蚂蚁区块链投票案例(一)---蚂蚁链简介

文章目录 摘要背景蚂蚁链简介联盟链&#xff08;合约体验链&#xff09;开放联盟链开发者测试链 总结遗留问题测试环境和生产环境的问题&#xff1f; 摘要 计划用三篇文章&#xff0c;一个月左右的时间来实现一个蚂蚁开放联盟链上的区块链投票案例&#xff0c;本文是系列第一篇…

设计模式(8)外观模式

一、 1、使用背景&#xff1a;降低访问复杂系统的内部子系统时的复杂度&#xff0c;简化客户端之间的接口。 2、定义&#xff1a; 为子系统中的一组接口定义一个一致的界面&#xff0c;此模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。完美地体现…

恒运资本:科创板与创业板的区别?

近年来&#xff0c;跟着技能的飞速发展和立异认识的提高&#xff0c;科技立异成为了各国和企业竞相争夺的方向。在中国&#xff0c;“科创板”和“创业板”成为了人们重视的焦点。它们都是现代股票交易商场上的板块&#xff0c;但两者之间有何差异呢&#xff1f;下面从多个视点…

【allegro 17.4软件操作保姆级教程十一】表贴器件封装制作

&#x1f449;个人主页&#xff1a; highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 目录 封装组成元素 焊盘类型 表贴器件封装制作 环境设置 计算坐标 放置pin脚 …

pytorch基础实践-数据与预处理

文章目录 数据集Fashion-MNIST 数据集 数据预处理包的导入在Pytorch中进行 ETL利用torchvison包获取和处理数据集&#xff08;ET&#xff09; 访问数据集访问和查看 train_set 中的单个数据利用 DataLoader 成批访问数据 数据集 Fashion-MNIST 数据集 MNIST MNIST&#xff0c;…

day1 链表专题 牛客TOP100 BM 1-10

文章目录 链表BM1 反转链表BM2 链表内指定区间反转BM3 链表中的节点每k个一组翻转BM4 合并两个排序的链表BM5 合并k个已排序的链表BM6 判断链表中是否有环BM7 链表中环的入口结点BM8 链表中倒数最后k个结点BM9 删除链表的倒数第n个节点BM10 两个链表的第一个公共结点 链表 BM1…

ssm+vue绿色农产品推广应用网站源码和论文PPT

ssmvue绿色农产品推广应用网站041 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高…