Nginx负载均衡以及常用的7层协议和4层协议的介绍

一、引言

明人不说暗话,下面来解析一下 Nginx 的负载均衡。需要有 Linux 和 Nginx 环境哈。

二、nginx负载均衡的作用

高并发:负载均衡通过算法调整负载,尽力均匀的分配应用集群中各节点的工作量,以此提高应用集群的并发处理能力(吞吐量)。

伸缩性:添加或减少服务器数量,然后由负载均衡进行分发控制。这使得应用集群具备伸缩性。

高可用:负载均衡器可以监控候选服务器,当服务器不可用时,自动跳过,将请求分发给可用的服务器。这使得应用集群具备高可用的特性。

安全防护:有些负载均衡软件或硬件提供了安全性功能,如:黑白名单处理、防火墙,防 DDos 攻击等

三、upstream配置

首先给大家说下 upstream 这个配置,写一组被代理的服务器地址,然后配置负载均衡的算法。这里的被代理服务器地址有两种写法。

第一种方式

upstream testapp { server ip:端口;        #需要代理的服务器地址ipserver ip:端口;        #需要代理的服务器地址ip}server {listen 80;server_name localhost;location / {         proxy_pass  http://testapp;      #请求转向 testapp 定义的服务器列表         } 
}

第二种方式

upstream mysvr { server  http://ip:端口;     #需要代理的服务器ip和端口server  http://ip:端口;     #需要代理的服务器ip和端口}server {listen 80;server_name localhost;location  / {         proxy_pass  http://mysvr;     #请求转向mysvr 定义的服务器列表         } 
}

示例

我们使用第一种方法准备三台机器

代理器 :10.12.153.41

服务器1 :10.12.153.222

服务器2:10.12.153.140

首先保证服务器1和2能够正常访问到web页面

现在配置代理端的nginx配置文件

配置完成后重新加载就可以进入浏览器测试了

我们通过访问代理器10.12.153.41访问到了两个服务器的页面

默认访问页面是轮询的,什么是轮询下面会讲到哈

四、负载均衡算法

upstream 支持4种负载均衡调度算法:

1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;

2、ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。

3、url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候提高效率。

4、fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair模块。 

负载均衡调度算法配置示例

1、热备backup

当一台服务器发生事故时,才启用第二台服务器给提供服务

服务器处理请求的顺序为 001 001 001 001 001 001 突然001出现故障这是访问页面则会是002 002 002 002 ....

2、轮询weight

nginx默认就是轮询其权重默认为1,服务器处理请求的顺序:001 002 001 002 001 002....

weight的默认值为1可以不写。上面的upstream配置实例中使用的就是普通轮询。

3、加强轮询weight

即可以使用weight修改轮询次数,下面的配置轮询访问显示为001 001 001 002 002 001 001 001 002 002 ...

4、ip_hash

nginx会让相同的客户端ip请求相同的服务器,使用ip_hash这种负载均衡以后,可以保证用户的每一次会话都只会发送到同一台服务器上

注意事项

  • 一旦使用了ip_hash,当我们需要移除一台服务器的时候,不能直接删除这个配置项,而是需要在这台服务器配置后面加上关键字down,表示不可用;
  • 因为如果直接移除配置项,会导致hash算法发生更改,后续所有的请求都会发生混乱;

5、nginx负载均衡配置状态参数

down,表示当前的server暂时不参与负载均衡。
backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。 
max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误   
fail_timeout,在经历了max_fails次失败后,暂停服务的时间单位秒。max_fails可以和fail_timeout一起使用。

10.12.153.222 轮循两次且请求2次后失败,失败后暂停服务2秒

10.12.153.140 轮循三次且请求2次后失败,失败后暂停服务1秒

五、7层协议和4层协议介绍

7层负载和4层负载的区别

四层负载与七层负载最大的区别就是效率与功能的区别。

四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,

而七层负载均衡的优势则体现在功能多,控制灵活强大。

在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑。

七层协议

OSI(Open System Interconnection)是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范,共包含七层协议

如图显示

4层协议

TCP/IP协议 之所以说TCP/IP是一个协议族,是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。

从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。

nginx在1.9.0的时候,增加了一个 stream 模块,用来实现四层协议(网络层和传输层)的转发、代理、负载均衡等。stream模块的用法跟http的用法类似,允许我们配置一组TCP或者UDP等协议的监听,然后通过proxy_pass来转发我们的请求,通过upstream添加多个后端服务,实现负载均衡

扩展

TCP (传输控制协议)和 UDP (用户数据报协议) 是两种不同的网络通信协议,它们在传输数据的方式可靠性、传输速度和应用场景等方面存在一些区别。
1.传输方式
TCP 是一种面向连接的协议,它在传输数据之前需要先建立连接,然后才能传输数据。而 UDP 是一种无连接的协议,它不需要建立连接就可以直接传输数据。

2.可靠性:
TCP 是一种可靠的协议,它可以保证数据的传输不会出现丢失、重复或乱序等问题。它通过确认机制.超时重传和滑动窗口等技术来保证数据的可靠性。而 UDP 是一种不可靠的协议,它不能保证数据的传输不会出现丢失、重复或乱序等问题。
3.传输速度:
TCP 的传输速度相对较慢,因为它需要建立连接、确认数据的传输和进行流量控制等操作。而 UDP 的传输速度相对较快,因为它不需要建立连接和进行流量控制等操作。
4.应用场景:
TCP 适用于需要可靠传输数据的应用场景,例如文件传输、电子邮件、远程登录等。而 UDP 适用于对传输速度要求较高,但对数据可靠性要求不高的应用场景,例如视频会议、实时游戏、DNS 解析等。
总的来说,TCP 和 UDP 都有各自的优缺点,需要根据具体的应用场景来选择使用哪种协议。

好了今天就分享到这里了!感谢大家观看!希望能够帮助到大家!

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

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

相关文章

Ftrans飞驰云联荣获“CSA 2023安全创新奖”

2023年12月21日,第七届云安全联盟大中华区大会在深圳成功举办。会上,CSA大中华区发布了多个研究成果并进行 CSA 2023年度颁奖仪式,Ftrans飞驰云联以其突出的技术创新能力和广泛的市场应用前景,荣获备受瞩目的“CSA 2023安全创新奖…

【算法与数据结构】62、LeetCode不同路径

文章目录 一、题目二、解法2.1 动态规划解法2.2 数论解法 三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 2.1 动态规划解法 思路分析:机器人只能向下或者向右移动,那么到达&a…

leetcode 2645. 构造有效字符串的最少插入数-python

题目: 给你一个字符串 word ,你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次,返回使 word 有效 需要插入的最少字母数。 如果字符串可以由 “abc” 串联多次得到,则认为该字符串 有效 。 解题方法 1.先判断字符串是否…

【剪枝】【广度优先】【深度优先】488祖玛游戏

作者推荐 【动态规划】458:可怜的小猪 涉及知识点 剪枝 广度优先 深度优先 488祖玛游戏 在这个祖玛游戏变体中,桌面上有 一排 彩球,每个球的颜色可能是:红色 ‘R’、黄色 ‘Y’、蓝色 ‘B’、绿色 ‘G’ 或白色 ‘W’ 。你的手中也有一些…

kubeadm安装kubernetes

基本环境配置 节点分为:master,node,masterlb(keepalived虚拟Ip,不占用机器) k8s-master01 16 k8s-node01 113 15 k8s-node02 115 进入之后直接选done done 上海 123456 设置静态ip 然后去虚拟机里面设置ens即可 查看命…

MFC为对话框资源添加类

VC6新建一个对话框类型的工程; 建立之后资源中默认有2个对话框,一个是主对话框,About这个是默认建立的关于版权信息的; 然后主对话框有对应的.h和.cpp文件;可以在其中进行编程; 默认建立的有一个 关于 对话框; 在资源中新插入一个对话框,IDD_DIALOG1是对话框ID; 新加…

国际版WPS Office 18.6.1

【应用名称】:WPS Office 【适用平台】:#Android 【软件标签】:#WPS 【应用版本】:18.6.1 【应用大小】:160MB 【软件说明】:软件日常更新。WPS Office是使用人数最多的移动办公软件。独有手机阅读模式…

LLM主流框架:Causal Decoder、Prefix Decoder和Encoder-Decoder

本文将介绍如下内容: transformer中的mask机制Causal DecoderPrefix DecoderEncoder Decoder总结 一、transformer中的mask机制 在Transformer模型中,mask机制是一种用于在self-attention中的技术,用以控制不同token之间的注意力交互。具体…

探索WPF控件内容模型的四大支柱

WPF 内容模型 WPF控件内容模型主要指派生于System.Windows.Controls.Control类的各种控件,有四个可包含任意内容的类。 下表列出了继承自 Control 的类。 ContentControl:用于包含一段任意类型的内容。但是只能包含一个子元素作为其“内容”。它可以包…

图像分割deeplab系列

DeepLab系列是谷歌团队提出的一系列语义分割算法。DeepLab v1于2014年推出,并在PASCAL VOC2012数据集上取得了分割任务第二名的成绩,随后2017到2018年又相继推出了DeepLab v2,DeepLab v3以及DeepLab v3。DeepLab v1的两个创新点是空洞卷积&am…

【Python】新鲜出炉的海洋捕食者算法Python版本

2020年发表的海洋捕食者算法《Marine Predators Algorithm: A nature-inspired metaheuristic》。 作者只在原论文中给出了MATLAB代码,网上也没有Python版本,我自己用Python重写了MATLAB代码。 """2020海洋捕食者算法 """…

spaceship

通过数字平台启动您的网站、想法和未来,该平台旨在提供和连接您所需的域、托管、电子邮件和 Web 工具,并让您完全掌控 如果需要购买可以开5347的卡,点击获取

小学信息科技Python课程第2课:坐标与画笔

一、turtle画布与坐标系 在同一平面互相垂直且有公共原点的两条数轴构成平面直角坐标系。在坐标系中,水平方向的轴都称为x轴,垂直方向的轴都称为y轴 它们相交于O点,在这一个点里,x轴的值为0,y轴的值也为0,所…

掌握 Vue 响应式系统,让数据驱动视图(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

什么是网络数据抓取?有什么好用的数据抓取工具?

一、什么是网络数据抓取 网络数据抓取(Web Scraping)是指采用技术手段从大量网页中提取结构化和非结构化信息,按照一定规则和筛选标准进行数据处理,并保存到结构化数据库中的过程。目前网络数据抓取采用的技术主要是对垂直搜索引…

DNS解析和它的三个实验

一、DNS介绍 DNS:domain name server 7层协议 名称解析协议 tcp /53 主从之间的同步 udp/53 名字解析 DNS作用:将域名转换成IP地址的协议 1.1DNS的两种实现方式 1.通过hosts文件(优先级最高) 分散的管理 linux /etc/hos…

QA面试题

1、质量保证(QA)是什么? QA代表质量保证。QA 是一组活动,旨在确保开发的软件满足 SRS 文档中提到的所有规范或要求。QA 遵循 PDCA 循环: 计划/Plan - 计划是质量保证的一个阶段,组织在此阶段确定构建高质量软件产品所需的过程。做…

日志审计系统Agent项目创建——读取日志文件(Linux版本)

紧接着上一篇的分享,继续做日志文件的读取,点击连接即可日志文件初始化https://blog.csdn.net/wjl990316fddwjl/article/details/135553238 1、将指针移动到文件末尾 //文件移动到结尾fseek(fp, 0, SEEK_END); 2、定义当前指针的位置 lastPosition ft…

搭建算法日志自检小系统

&#x1f952; 前言 目前演示的是一个工具&#xff0c;但如此&#xff0c;未来完成有潜力可以演变为一整套系统。 &#x1f451;现场人员自检失败表计点位教程V2.0 NOTE: 如果没有“logfiles-meter-tool“目录的请联系我们进行提供&#xff01; &#x1f447; 进入<dist>…

WEB 3D技术 three.js 阴影属性

上文 WEB 3D技术 three.js 光照与阴影 我们说了阴影 那么 我们继续将阴影的属性 目前 我们的代码 import ./style.css import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";//创建相机 cons…