六、nginx负载均衡

负载均衡:将四层或者七层的请求分配到多台后端的服务器上。

从而分担整个业务的负载。提高系统的稳定性,也可以提高高可用(备灾,其中一台后端服务器如果发生故障不影响整体业务).

负载均衡的算法

round robin 轮询 rr

负载均衡的默认算法,请求轮流分配给后端服务器。

轮询算法适合用于后端处理器能力相近的情况,默认的算法,可以不加。

默认

加权轮询-weight round robin

轮询的升级版,给每个后端服务器赋予不同的权重。

处理能力更强的服务器设置更高的权重,处理能力低的设置低权重。

高峰时间可以通过这个方法进行流量的优化,适用于服务器处理能力差异比较大的情况。

weight=number

ip_Hash

当我们访问后端服务器,根据客户端的IP地址,使用hash算法计算出IP地址的hash值,然后再根据请求发送到相应的后端服务器。

如果客户端访问的ip地址相同,通过hash算法,再一次的请求会分配到上一次访问的服务器,保证会话的稳定。

负载均衡的会话保持——>ip_Hash

会话保持到期之后,会话中断,重新请求会重新计算hash值。

ip_hash;

最小连接数

配合加权轮询一起使用,最小连接数的算法可以将请求发送到当前连接比较少的后端服务器。

这种算法适用后端服务器处理任务耗时不同的情况,可以有效的避免所有的请求集中在处理能力更强的后端服务器上。

least_conn;

weight=number

URL_Hash

根据请求当中url地址来计算hash值,如果客户端请求的url地址相同,客户端的请求会被分配到同一个服务器。

后台服务器的数量发生变化,会影响结果。(这个讨论无意义)

hash_$request_uri  consistest;

负载均衡的特点

1、根据算法把请求分配到不同的服务器

2、客户端访问的是代理地址,响应也是代理服务器响应。

3、客户端并不了解后端服务器的情况

4、可以提高安全性,后端服务器是隐藏的。

5、负载均衡是有缓存的,可以直接访问缓存,提高响应的速度。

负载均衡的架构

我们做个实验,三台主机,具体配置如下:

zw4:192.168.254.14(代理服务器)

zw5:192.168.254.15(后端)

zw6:192.168.254.16(后端)

客户端:浏览器

配置流量分发,主要是依靠服务器完成的,主要配置在代理服务器完成配置算法。

七层代理

upstream:模块仅支持http协议,用来处理http的请求和响应。

upstream只能写在http模块当中,不能在server也不能在全局。

基于IP的七层

轮询

配置完之后,我们访问主机(192.168.254.14)的nginx,会发现轮流访问的是设定的2台服务器的nginx,并且状态码为200,表示没有缓存。

加权轮询

这时候权重高的服务器被访问的次数多一点,状态码依然为200,没有缓存。

ip_hash

这时候第一次会根据hash算法匹配到一台服务器,之后再访问都是他了,并且状态码为304,表示访问缓存,这是根据IP地址的hash缓存,也是会话保持。

最小连接数配合轮询

这时候和轮询没什么区别,这是因为不好演示最小连接数,状态码依然为200。

URL_hash

这时候第一次会根据算法匹配到一台服务器,之后再访问都是他了,并且状态码为304表示缓存。注意:这里的缓存是url缓存,url地址不变才导致的访问服务器不变,并不是真正的会话保持。

最后我们停掉192.168.254.15的nginx后,会发现负载均衡依然再正常运行,并且只能访问192.168.254.16的nginx,证明了高可用。

基于域名的七层

 基于域名的七层代理

首先配置代理服务器zw4的nginx主配置文件

注意:1、如果使用域名才做七层,需要把客户端访问的真实IP地址传递给服务端

           2、如果经过代理,所有经过的代理地址也要传递给服务端

接着三台主机都配置域名解析,记得也要修改另外两台后端(zw5和zw6)的nginx上的localhost。

这时候我们发现负载均衡已正常工作,当然也是默认的轮询算法。

四层代理

stream:模块不支持http协议,仅支持tcp和udp,处理数据包流量分发。

四层代理只能写在全局模块当中。

根据上面的实验我们依然在代理服务器zw4上配置nginx的主配置文件,注意server中的端口号不能和下面http模块中server的端口号一样,所有这里我们随便定了个81。

重启nginx后,我们发现负载均衡的算法依然是轮询。

注意:

四层算法默认是轮询,也支持加权轮询和最小连接数支持。

ip_hash和uri_hash,不能在四层算法中使用,因为四层不能处理响应。

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

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

相关文章

代码随想录训练营第十七天| 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

654.最大二叉树 题目链接/文章讲解: 代码随想录 视频讲解:又是构造二叉树,又有很多坑!| LeetCode:654.最大二叉树_哔哩哔哩_bilibili 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子…

面向对象进阶:多态

黑马程序员Java个人笔记 BV17F411T7Ao p129~132 目录 多态 多态调用成员的特点 调用成员变量 调用成员方法 理解 多态的优势 解耦合 多态的弊端 解决方案:强制类型转换 instanceof jdk14新特性,将判断和强转放一起 总结 多态 多态调…

系统思考沙盘模拟

今天《收获季节》沙盘模拟的第一天课程圆满结束,不仅从管理技巧的角度深入展开,还让大家体验了决策带来的直接影响。明天,我们将带领学员从系统思考和全局视角来重新审视这些问题,找到更深层的因果关系和系统性改进的思路。期待更…

AI 赋能直播新玩法 —— 无人直播,它到底藏着多少未知?

​ 在数字浪潮汹涌澎湃的时代,直播领域正历经一场前所未有的变革,AI 赋能的无人直播宛如一颗神秘新星,闯入大众视野,撩拨着人们的好奇心,可它究竟潜藏着多少待解谜团,尚无人能完全洞悉。 从技术的幽微深处…

【深度学习】热力图绘制

热力图(Heatmap)是一种数据可视化方法,通过颜色来表示数据矩阵中的数值大小,以便更直观地展示数据的分布和模式。热力图在许多领域中都有应用,尤其在统计分析、机器学习、数据挖掘等领域,能够帮助我们快速识…

ssm-springmvc-学习笔记

简介 简单的来说,就是一个在表述层负责和前端数据进行交互的框架 帮我们简化了许多从前端获取数据的步骤 springmvc基本流程 用户在原本的没有框架的时候请求会直接调用到controller这个类,但是其步骤非常繁琐 所以我们就使用springmvc进行简化 当用…

Axure原型设计:打造科技感可视化大屏元件

在数字化时代,数据可视化大屏已成为企业展示数据、监控业务状态的重要工具。一个设计精良的大屏不仅要有丰富的信息展示,更需具备强烈的科技感,以吸引观众的注意力并提升数据解读的效率。Axure,作为一款功能强大的原型设计工具&am…

supervision - 好用的计算机视觉 AI 工具库

Supervision库是一款出色的Python计算机视觉低代码工具,其设计初衷在于为用户提供一个便捷且高效的接口,用以处理数据集以及直观地展示检测结果。简化了对象检测、分类、标注、跟踪等计算机视觉的开发流程。开发者仅需加载数据集和模型,就能轻…

探索 Cesium 的未来:3D Tiles Next 标准解析

探索 Cesium 的未来:3D Tiles Next 标准解析 随着地理信息系统(GIS)和 3D 空间数据的快速发展,Cesium 作为领先的开源 3D 地球可视化平台,已成为展示大规模三维数据和进行实时渲染的强大工具。近年来,随着…

Launcher启动流程

Launcher启动流程分2个阶段: AMS systemReady() 会启动一个临时Activity:com.android.settings.FallbackHome,如下流程等到用户解锁成功后,FallbackHome轮询到有可用的RealHome包,会销毁掉自己,AMS发现没有…

链式栈的实现及其应用

目录 一、链式栈结构模型 二、链式栈的实现 2.1创建 2.2压栈 2.3出栈 2.4判断栈是否为空 2.5查看栈顶 2.6释放栈 三、应用 链式栈实际上就是基于链表,压栈和弹栈可分别看作头插和头删,链表尾部就是栈底,头指针就是栈顶指针 一、链式…

视频监控汇聚平台方案设计:Liveweb视频智能监管系统方案技术特点与应用

随着科技的发展,视频监控平台在各个领域的应用越来越广泛。然而,当前的视频监控平台仍存在一些问题,如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果,也制约了视频监控平台的发展。 为了解决这些问…

Ubuntu 20.04LTS 系统离线安装5.7.44mysql数据库

Ubuntu 20.04LTS 系统离线安装5.7.44mysql数据库 环境下载 MySQL 5.7.44 包安装标题检查服务是否启动成功遇到的问题登陆&修改密码&远程访问 环境 操作系统:Ubuntu 20.04.4 LTS 数据库:MySQL 5.7.34 内核版本:x86_64(amd…

国信华源科技赋能长江蓄滞洪区水闸管护项目验收成果报道

“碧水悠悠绕古城,闸启长江万象新。”近日,由北京国信华源科技有限公司倾力打造的万里长江蓄滞洪区水闸管护项目,圆满通过验收,为这片鱼米之乡的防洪安全注入了新的科技活力。 长江之畔,水闸挺立,犹如干堤上…

Spring Boot教程之二十五: 使用 Tomcat 部署项目

Spring Boot – 使用 Tomcat 部署项目 Spring Boot 是一个基于微服务的框架,在其中创建可用于生产的应用程序只需很少的时间。Spring Boot 建立在 Spring 之上,包含 Spring 的所有功能。如今,它正成为开发人员的最爱,因为它是一个…

【论文阅读】PRIS: Practical robust invertible network for image steganography

内容简介 论文标题:PRIS: Practical robust invertible network for image steganography 作者:Hang Yang, Yitian Xu∗, Xuhua Liu∗, Xiaodong Ma∗ 发表时间:2024年4月11日 Engineering Applications of Artificial Intelligence 关键…

游戏引擎学习第42天

仓库: https://gitee.com/mrxiao_com/2d_game 简介 目前我们正在研究的内容是如何构建一个基本的游戏引擎。我们将深入了解游戏开发的每一个环节,从最基础的技术实现到高级的游戏编程。 角色移动代码 我们主要讨论的是角色的移动代码。我一直希望能够使用一些基…

wine的使用方法

wine版本 所有分支,新的主要版本: wine-x.0 All branches, release candidates:各分支、候选版本: wine-x.0-rcn Stable branch updates: 稳定分支更新: wine-x.0.z Development branch updates: wine-x.y wine *.exe “更改目…

Comparator.comparing 排序注意

1. 对数字型字符串排序 List<String> values new ArrayList<>();values.add("10");values.add("6");values.add("20");values.add("30");values.add("50");//方法1 &#xff08;正确的排序方法&#xff09;//倒…

springboot3整合javafx解决bean注入问题

springboot整合javafx时候&#xff0c;很多问题就在于controller没有被spring容器管理&#xff0c;无法注入bean&#xff0c;在这里提供一套自己的解决思路 执行逻辑 这里仅仅提供一个演示&#xff0c;我点击按钮之后&#xff0c;从service层返回一个文本并显示 项目结构 创…