10--7层负载均衡集群

前言:动静分离,资源分离都是在7层负载均衡完成的,此处常被与四层负载均衡比较,本章这里使用haproxy与nginx进行负载均衡总结演示。

1、基础概念详解

1.1、负载均衡

4层负载均衡和7层负载均衡是两种常见的负载均衡技术,它们在网络和应用分发方面有着不同的工作方式和应用场景。

1.1.1、4层负载均衡

4层负载均衡工作在OSI模型的第四层,即传输层。它主要基于数据包的源IP地址、目标IP地址、源端口号和目标端口号等信息来进行负载均衡和流量分发。

原理解释: 想象一家快递公司,每个快递包裹上都有发件人和收件人的地址,以及一个独特的包裹号码。4层负载均衡就像是一个分拣员,根据包裹的地址和号码来决定把包裹送到哪个目的地,但并不了解包裹的内容。这里的地址和号码就相当于数据包中的IP地址和端口号,通过这些信息来决定将请求分发给哪台服务器处理。

应用场景: 4层负载均衡通常用于基于TCP和UDP协议的负载均衡,能够有效地处理大量的网络流量和连接请求。它适用于需要高效处理大规模连接的场景,如网站访问、数据库访问等。

1.1.2、7层负载均衡 

7层负载均衡工作在OSI模型的第七层,即应用层。它不仅考虑网络数据包的源IP地址、目标IP地址和端口号,还深入到数据包的负载内容,比如HTTP请求的URL、Cookie等信息,从而做更加智能化的请求分发和负载均衡。

原理解释: 想象一位精明的接待员在一家酒店大堂里工作,不仅知道每位客人的姓名和房间号(相当于IP地址和端口号),还知道每位客人的需求和偏好(相当于HTTP请求的URL和Cookie信息)。7层负载均衡就像这位接待员,可以根据客人的需求和偏好,智能地将请求分发给最合适的服务节点处理。

应用场景: 7层负载均衡广泛应用于需要深度应用内容分发的场景,如Web应用程序中的HTTP和HTTPS流量、应用程序级别的负载均衡(如基于域名的负载均衡)。它能够根据应用层的信息做出更精细化的流量调度和应用服务优化。

1.1.3、总结

4层负载均衡更注重于网络连接的管理和分发,而7层负载均衡则在应用层面上更为智能化地进行请求的处理和分发。选择合适的负载均衡技术取决于具体的应用需求和性能要求。

1.2、HAProxy

1.2.1、HAProxy的特点

1、HAProxy支持虚拟主机。

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

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

4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡 对后端的MySQL节点进行检测和负载均衡

5、支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实用的负载均衡算法,适用各种需求。

1.2.3、HAProxy Session亲缘性

haproxy负载均衡保持客户端和服务器Session亲缘性的三种方式

  • 用户IP识别
  • cookie识别
  • session识别

2、HAProxy部署

2.1、基础环境

环境内默认关闭防火墙和selinux,时间同步完成,配置域名解析

IP角色
192.168.188.128

HAproxy

192.168.188.129web1
192.168.188.130web2

2.2、web服务器部署

[root@localhost ~]# yum install -y httpd
[root@localhost ~]# echo ">>>>>>>>>>>>>>>web1<<<<<<<<<<<<<" > /var/www/html/index.html#    web2配置这里时把网页内容修改一下方便观察
[root@localhost ~]#  systemctl start httpd
[root@localhost ~]#  systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

2.3、HAproxy部署

[root@localhost ~]# yum install -y epel-release
[root@localhost ~]# yum install -y haproxy#    注意下方的域名解析
[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.188.129 web1
192.168.188.130 web2[root@localhost ~]# vim /etc/haproxy/haproxy.cfg#    配置文件内容下方单独展示
[root@localhost ~]# systemctl restart haproxy

 haproxy配置文件内容

[root@localhost ~]# cat /etc/haproxy/haproxy.cfg 
global
#全局设置log 127.0.0.1 local3 info#日志 放在本地 自定义型 日志级别maxconn 4096#haproxy能接受的最大连接数uid nobody#uid 99gid nobody#gid 99#上面四行是运行haproxy的身份,使用的是linux自带的nobody账户,两个注释行代表不同版本的配置方式#有些版本使用用户名会在日志产生警告,有些版本使用id会产生警告daemon#守护进程运行nbproc 1#进程启动的数量,一般用服务器核心数pidfile /run/haproxy.pid#haproxy进程ID存储位置
defaults
#默认设置,有些部分和global重复log global#日志设置遵循全局设置mode http#应用层7层模式,可检测urlmaxconn 2048#最大的连接数2048,default优先级大于global,这个设置覆盖上方设置retries 3#后端服务器健康检查。3次连接失败就认为后端服务器不可用option	redispatch#服务不可用后的操作,重定向到其他健康服务器contimeout 5000#(重传计时器)定义haproxy将客户端请求转发至后端服务器,所等待的超时时长clitimeout 50000#(向后长连接)haproxy作为客户,和后端服务器之间!!!空闲连接!!!的超时时间,到时候发送fin指令srvtimeout 50000#(向前长连接)haproxy作为服务器,和用户之间空闲连接的超时时间,到时候发送fin指令#timeout connect 5000#timeout client 50000#timeout server 50000#这三行是上面计时器的另一种写法,和uid部分一样,是避免版本不同产生警告信息的写法option abortonclose#当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接stats uri /admin?stats#配置haproxy统计监测页面为/admin?statsstats realm Private lands#设置统计页面认证时的提示内容stats auth admin:password#配置进入统计监测页面的用户名和密码stats hide-version#隐藏haproxy版本信息(安全需求)frontend http-in
#用户侧设置bind 0.0.0.0:80#监听所有网络接口的80端口。也就是说,HAProxy会接收并处理发送到服务器80端口的所有HTTP请求。mode http#应用层7层模式,可检测urllog global#日志设置遵循全局设置option httplog#指定日志格式为网站格式option httpclose#关闭一部分网站空闲连接acl html url_reg  -i  \.html$#定义一个名为html的ACL,匹配URL中包含.html的请求,其中-i忽略大小写use_backend html-server if  html#使用html-server后端,前提是 符合上面定义的htmldefault_backend html-server#未被区分的客户端请求就用 html-serverbackend html-server
#定义一个名为html-server的后端mode http#应用层7层模式balance roundrobin#均衡选项,指定为轮询option httpchk GET /index.html#使用GET请求检查/index.html路径的健康状态cookie SERVERID insert indirect nocache#将服务器的id号插入到回复给用户的信息中,通过这种方式进行会话保持,使用间接方式并且不缓存server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5server html-B web2:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5#设定服务器群组#html-A:后端服务器web1:80,权重为1,SERVERID cookie值为3,健康检查间隔2000毫秒,连续2次成功认为健康,连续5次失败认为不健康。

2.4、测试结果

使用命令行界面查看(windows客户端缓存问题,会导致看到的是同一个网站)

 使用本机浏览器访问设置的统计监测页面

2.5、补充

动静分离配置内容示例如下,与上方不同的在匹配部分,该处已添加注释

[root@localhost ~]# cat /etc/haproxy/haproxy.cfg 
globallog 127.0.0.1 local3 infomaxconn 4096uid nobody
#       uid 99gid nobody
#       gid 99daemonnbproc 1pidfile /run/haproxy.pid
defaultslog		   globalmode	   httpmaxconn 2048retries 	3option	redispatchcontimeout	5000clitimeout	    50000srvtimeout	    50000
#timeout connect 5000
#timeout client 50000
#timeout server 50000option abortonclosestats uri /admin?statsstats realm Private landsstats auth admin:passwordstats hide-versionfrontend http-inbind 0.0.0.0:80mode httplog globaloption httplogoption httpcloseacl php url_reg  -i  \.php$			 #acl <ACL名字>  <类型>  <大小写>  <规则>acl html url_reg  -i  \.html$		  	 #use_backend  <服务器组>  if  <ACL名字>use_backend php-server if  phpuse_backend html-server if  htmldefault_backend html-server		 #默认使用的服务器组backend php-servermode httpbalance roundrobinoption httpchk GET /index.phpcookie SERVERID insert indirect nocacheserver php-A 192.168.122.30:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5server php-B 192.168.122.40:80 weight 1 cookie 2 check inter 2000 rise 2 fall 5backend html-servermode httpbalance roundrobinoption httpchk GET /index.htmlcookie SERVERID insert indirect nocacheserver html-A 192.168.122.10:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5server html-B 192.168.122.20:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5

3、nginx负载均衡部署

优势:nginx复制用户请求,在后端服务器出现问题时。nginx会再复制一份请求发给另一台后端服务器。 lvs则在这种情况,只能用户重新发请求。

劣势:流量会经过nginx,nginx成为瓶颈。

nginx7层负载均衡语法示例:

location  / {}
location ~ \.html${
proxy_pass ...
}
location ~ \.php${
proxy_pass ...
}
location ~ \.(jpg|png|css|js)${
proxy_pass ...
}     

3.1、基础环境

3.2、nginx部署

此处接“HAProxy基础部署”实验环境继续操作,卸载haproxy即可继续使用

[root@localhost ~]# systemctl stop haproxy
[root@localhost ~]# yum remove -y haproxy
[root@localhost ~]# yum install -y nginx
[root@localhost ~]# vim /etc/nginx/nginx.conf#    文件配置如下
[root@localhost ~]# systemctl restart nginx
http {
。。。。。。
upstream html{#定义html群组server web1:80;server web2:80;}server {location / {proxy_pass http://html;#    本身不处理将请求推送至html群组}
。。。。。。。
}
}

 所属位置图解如下

3.3、访问测试

3.4、补充

动静分离示例如下,通过新增服务器群组和匹配规则完成动静分离

    upstream html {server web1:80;server web2:80;}upstream php {server web3:80;server web4:80;}
server {location / {proxy_pass http://html;}location ~ \.php$ {proxy_pass http://php;}
}

4、概念补充(面试题)

LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

LVS:是基于四层的转发

HAproxy:是基于四层和七层的转发,是专业的代理服务器

Nginx:是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发

区别:LVS由于是基于四层的转发所以只能做端口的转发、而基于URL的、基于目录的这种转发LVS就做不了工作选择:HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做,在很大并发量的 时候我们就要选择LVS,像中小型公司的话并发量没那么大,选择HAproxy或者Nginx足已,由于 HAproxy由是专业的代理服务器,配置简单,所以中小型企业推荐使用HAproxy

简述 HAProxy 常见的负载均衡策略?

HAProxy 负载均衡策略非常多,常见的有如下 8 种:

roundrobin:表示简单的轮询。

static-rr:表示根据权重。

leastconn:表示最少连接者先处理。

source:表示根据请求的源 IP,类似 Nginx 的 IP_hash 机制。

ri:表示根据请求的 URI。

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

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

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

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

相关文章

vite+vue3+ts项目搭建流程 (pnpm, eslint, prettier, stylint, husky,commitlint )

vitevue3ts项目搭建 项目搭建项目目录结构 项目配置自动打开项目eslint①vue3环境代码校验插件②修改.eslintrc.cjs配置文件③.eslintignore忽略文件④运行脚本 prettier①安装依赖包②.prettierrc添加规则③.prettierignore忽略文件④运行脚本 stylint①.stylelintrc.cjs配置文…

前端自动化

前端自动化的内容 自动化代码检查自动化测试自动化构建自动化部署自动化文档 前端自动化的最佳实践

基于改进YOLOv5的安全帽检测算法 | 引入Ghost卷积 + 添加CA注意力机制 + 更换Neck网络之BiFPN + 更换损失函数之WIoU

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。为了解决建筑工地、隧道、煤矿等施工场景中现有安全帽检测算法对于小目标、密集目标以及复杂环境下的检测精度低的问题&#xff0c;设计实现了一种基于YOLOv5的改进目标检测算法&#xff0c;记为YOLOv5-GBCW。首先使用Ghos…

C语言 | Leetcode C语言题解之第166题分数到小数

题目&#xff1a; 题解&#xff1a; struct HashMapNode {int key;int val;UT_hash_handle hh; };struct HashMapNode* hashMap NULL;int hashMapAdd(int key, int val) {struct HashMapNode* node;HASH_FIND_INT(hashMap, &key, node);if(node ! NULL){return node->…

fiddler抓https包

1&#xff0c;安装fiddler省略 2&#xff0c;下载证书步骤&#xff1a;tools-options-https 点击确认&#xff0c;点击OK&#xff0c;点击是 把证书安装到谷歌浏览器上步骤&#xff1a;点击谷歌浏览器右上角的设置&#xff0c;在搜索框中搜索证书&#xff0c;点击“证书管理”…

从0搭建一个vue项目,不使用脚手架从html到vue

前言 从最开始学习web网页开始&#xff0c;搭建一个网页只需要创建一个html文件对其进行编写dom标签语言即可&#xff1b;后来分离了html&#xff0c;css和js&#xff0c;搭建一个网页开始需要文件夹&#xff0c;文件夹包含了这3类文件以及静态文件&#xff0c;图片&#xff0c…

【会议征稿】2024年应用计算智能、信息学与大数据国际会议(ACIIBD 2024,7月26-28)

2024年应用计算智能、信息学与大数据国际学术会议&#xff08;ACIIBD 2024&#xff09;将于2024年7月26-28日在中国广州举办。会议将聚焦于计算智能及其应用、信息、大数据等相关的研究领域&#xff0c; 广泛邀请国内外知名专家学者&#xff0c;共同探讨相关学科领域的最新发展…

26.高级特性(上)

目录 一、不安全的Rust二、不安全的超能力2.1 概念2.2 解引用裸指针2.3 调用不安全的函数或方法2.3 创建不安全代码的安全抽象2.4 使用extern函数调用外部代码2.5 访问或修改可变静态变量2.6 实现不安全trait2.7 访问联合体中的字段 三、高级trait3.1 关联类型在trait定义中指定…

【昇思初学入门】第七天打卡-模型训练

训练模型 学习心得 构建数据集。这通常包括训练集、验证集&#xff08;可选&#xff09;和测试集。训练集用于训练模型&#xff0c;验证集用于调整超参数和监控过拟合&#xff0c;测试集用于评估模型的泛化能力。 &#xff08;mindspore提供数据集https://www.mindspore.cn/d…

使用Python和NLTK进行NLP分析的高级指南

在本文中&#xff0c;将利用数据集来比较和分析自然语言。 本文涵盖的基本构建块是&#xff1a; WordNet和同义词集相似度比较树和树岸命名实体识别 WordNet和同义词集 WordNet是NLTK中的大型词汇数据库语料库。WordNet维护与名词&#xff0c;动词&#xff0c;形容词&#…

Unity 弧形图片位置和背景裁剪

目录 关键说明 Unity 设置如下 代码如下 生成和部分数值生成 角度转向量 计算背景范围 关键说明 效果图如下 来自红警ol游戏内的截图 思路&#xff1a;确定中心点为圆的中心点 然后 计算每个的弧度和距离 Unity 设置如下 没什么可以说的主要是背景图设置 代码如下 …

攻克PS之路——Day1(A1-A8)

#暑假到了&#xff0c;作为可能是最后一个快乐的暑假&#xff0c;我打算学点技能来傍身&#xff0c;首先&#xff0c;开始PS之旅 这个帖子作为我跟着B站up主学习PS的记录吧&#xff0c;希望我可以坚持下去&#xff01; 学习的链接在这里&#xff1a;A02-PS软件安装&#xff0…

基于SSM+VUE的网上订餐系统(带1w+文档)

基于SSMVUE的网上订餐系统(带1w文档) 网上订餐系统的数据库里面存储的各种动态信息&#xff0c;也为上层管理人员作出重大决策提供了大量的事实依据。总之&#xff0c;网上订餐系统是一款可以真正提升管理者的办公效率的软件系统。 项目简介 基于SSMVUE的网上订餐系统(带1w文档…

亚马逊云科技官方活动:一个月拿下助理架构师SAA+云从业者考试认证(送半价折扣券)

为了帮助大家考取AWS SAA和AWS云从业者认证&#xff0c;小李哥争取到了大量考试半价50%折扣券&#xff0c;使用折扣券考试最多可省75刀(545元人民币)。 领取折扣券需要加入云师兄必过班群&#xff0c;在群中免费领取。目前必过班群招募到了超过200名小伙伴&#xff0c;名额有限…

从0到1使用vite搭建react项目保姆级教程(持续更新中)

一、vite创建react项目 要使用Vite创建一个React项目&#xff0c;你需要按照以下步骤操作&#xff1a; 1、确保你已经安装了Node.js&#xff08;建议使用最新的稳定版本&#xff09;。 2、 使用npm命令安装Vite CLI工具&#xff0c;再来创建项目 npm create vitelatest my-vi…

解决ChatGPT遇到“抱歉,我无法完成你的请求”问题

在使用ChatGPT时&#xff0c;可能会遇到这样的问题&#xff1a;当多次重复输入相同的内容时&#xff0c;系统会返回 抱歉&#xff0c;我无法完成你的请求 。本文将解释为什么会出现这种情况&#xff0c;并提供一些避免这种情况的解决方法。 为什么会出现“抱歉&#xff0c;我…

TSLANet:时间序列模型的新构思

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

2024-6-20 Windows AndroidStudio SDK(首次加载)基础配置,SDK选项无法勾选,以及下载失败的一些解决方法

2024-6-20 Windows AndroidStudio SDK(首次加载)基础配置,SDK选项无法勾选,以及下载失败的一些解决方法 注意:仅仅是SDK这种刚安装时的配置的下载,不要和开源库的镜像源扯到一起&#xff01;&#xff01;&#xff01;&#xff01; 最近想玩AndroidStudio的JNI开发, 想着安装后…