Nginx教程(3)—负载均衡

news2024/9/28 19:18:19

文章目录

    • 3.1 负载均衡-轮询
    • 3.2 负载均衡-加权轮询
    • 3.3 upstream指令参数
    • 3.4 使用JMeter测试集群
    • 3.5 负载均衡之IP_hash
    • 3.6 一致性hash算法
    • 3.7 Nginx控制浏览器缓存
    • 3.8 Nginx反向代理缓存

Nginx教程一
Nginx教程二

3.1 负载均衡-轮询

轮询是Nginx默认使用的策略,轮询算法是最简单的一种负载均衡算法。它的原理是把来自用户的请求轮流分配给内部的服务器:从服务器1开始,直到服务器N,然后重新开始循环。在教程二中已经搭建了一个简单的Tomcat集群,下面对每个Tomcat下的webapp下的index.jsp加上一个表示后面用于区分,访问的是哪个服务器。

在这里插入图片描述

浏览器中访问www.tomats.com,进行多次访问,下面是第一次请求:

在这里插入图片描述

第二次访问:

在这里插入图片描述

第三次访问:

在这里插入图片描述

继续访问会发现Tomcat 1,2,3会轮流被访问到,这就是负载均衡的沦轮询策略

3.2 负载均衡-加权轮询

所谓的加权轮询是在轮询算法上进行的改进,由于每个服务器的性能可能会有差异,性能好的可以多进行一些请求处理,所以我们会给每个服务器加上一个权重,性能越好的权重越大,分配到的请求量越大。下面是在Nginx的核心配置文件Nginx.conf中配置各个服务器的权重

在这里插入图片描述

3.3 upstream指令参数

max_conns

用于限制一个服务器的最大连接数,默认值为0,表示不作任何限制,下面是在Nginx的核心配置文件Nginx.conf中配置

在这里插入图片描述

使用Jmeter进行测试(使用方法见3.4),设置线程数为200,每个线程访问10次

在这里插入图片描述

由于连接数的限制会出现很多失败的请求,并且规律是两个请求后的请求都是失败的

在这里插入图片描述
slow_start

配置集群服务器慢启动,会随着访问量的增大而去慢慢的启动服务器,而不是一开始就启动全部服务器,而设置slow_start的服务器的慢启动的过程是通过权重的逐步增加来实现的(所以要和权重配合使用)。

在这里插入图片描述
down

用于标识服务器的状态为不可用,用户访问不了

backup

backup标注的服务器,表示这是一个备用机,当当前使用的服务器宕机后,它才会被使用

max_fails和fail_timeout

前者表示最大失败次数,如果服务器配置了该参数,则发生在该服务器的请求次数达到了我们定义的次数系统就会认为该服务器已经宕机,会将该服务器踢出集群。后者是指失败的时间,它和前者配合使用,表示如果在后者指定的时间(假如为15s)内失败达到了前者规定的次数,则认为该服务器已经宕机,会将其踢出集群。

3.4 使用JMeter测试集群

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。

在这里插入图片描述

  1. 下载与打开

下载地址,直接在官网下载即可。

在这里插入图片描述

打开的主页面如下

在这里插入图片描述

  1. Jmeter的基本使用

添加线程组

在这里插入图片描述

配置线程组

在这里插入图片描述

线程组添加取样器(本质上是线程发送的请求类型),这里选择http类型

在这里插入图片描述

命令行启动tomcat服务(注意Tomcat要装到虚拟机上,而jmeter要装到本机,模拟的是本机作为客户端,虚拟机作为服务端),下面是本机访问服务器上的Tomcat

在这里插入图片描述

配置http访问

在这里插入图片描述

添加监听器(用于得到测试结果),首先添加结果树

在这里插入图片描述

添加聚合报告

在这里插入图片描述

添加用表格查看结果

在这里插入图片描述

点击绿色三角,查看结果

在这里插入图片描述

3.5 负载均衡之IP_hash

上面介绍了负载均衡的轮询、加权轮询算法,IP_hash同样也是负载均衡的一个算法,它根据用户的ip地址,通过hash处理返回一个特定的值,然后根据这个值,将用户的请求分配到特定的服务器进行处理。(底层是用的hash算法),在nginx中配置ip_hash很简单,如下即可:

在这里插入图片描述

使用不同的虚拟机,由于ip地址不同,映射的hash值也不同(也可能相同),所以访问的服务器也会不同(可能相同),注意hash算法映射的是ip地址是前三段,所以属于一个内网的机器会映射到相同的服务器(因为内网的所有机器都是前三段的)。

3.6 一致性hash算法

问题提出,在前面的ip_hash中根据hash算法的原理我们可以知道,当集群中的一台服务器宕机后,此时所有的用户请求的hash值都要重新进行计算,这个工作量是很大的在实际生活中,且用户的原先访问到的资源会全部丢失,用户浏览器的缓冲也会丢失。所以这里提出了一致性hash算法,其原理是将我们的hash值区间范围组织成一个圆形,如下,然后将服务器通过特定的hash算法计算出hash值放置到圆形的特定位置,当用户发送请求时,会计算出hash值,然后在圆环上找到特定位置,沿着顺时针方向找到最近的服务器,如果一个服务器宕机后,它会沿着顺时针方向继续寻找下一个服务器,而不需要重新计算hash值。

在这里插入图片描述

3.7 Nginx控制浏览器缓存

Nginx缓存主要分为下面两个部分

在这里插入图片描述

nginx控制浏览器缓存是通过expires指令,指令格式为expires time,配置如下,表示浏览器的缓存的寿命

在这里插入图片描述

expires @ 22h30m,该指令是expires另外的一种使用方法,表示在22点30分浏览器缓存过期。
expires -1h ,该指令表示缓存在当前时间的前一个小时过期
expires epoch,该指令不设置浏览器缓存
expires off,表示expires关闭
expires max,可以理解为浏览器缓存永不过期(因为过期时间设计的特别久)

3.8 Nginx反向代理缓存

前面介绍了浏览器缓存,下面介绍上游服务器到Nginx服务器的缓存,这里我已经提前将一张图片上传到了所有tomcat服务器中,并可以在本机访问到,如下:

在这里插入图片描述

下面在Nginx核心配置文件中进行配置,然后重启nginx服务,配置生效
在这里插入图片描述
可以看到在nginx文件目录下出现了upstream_cache文件夹,且没有内容

在这里插入图片描述

在本机访问前面的图片,会发现upstream_cache中出现了缓存,且1分钟后缓存会消失(原因见前面配置)

在这里插入图片描述

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

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

相关文章

jmeter做压测性能调优:SSL上下文切换导致SSL频繁握手【杭州多测师_王sir】【杭州多测师】...

一、问题背景在使用 JMeter 压测时,发现同一后端服务,在单机 500 并发下,HTTP 和 HTTPS 协议压测 RT 差距非常大。同时观测后端服务各监控指标水位都很低,因此怀疑性能瓶颈在 JMeter 施压客户端。二、问题分析切入点:垃…

【无标题】大模型时代,视觉推理任务竟然只用语言数据也能学习

原文链接:https://www.techbeat.net/article-info?id4394 作者:seven_ 要让AI模型真正具备智能感知和认知的功能,我们就不得不把视觉分析和自然语言理解二者结合起来进行研究。AI大模型社区的成长为我们带来了很多极具想象力和创造力的新应用…

基于FPGA通过1Gb以太网低延迟传输专业级4K AV信号解决方案

ME10 SoC是全栈AV Over IP片上IP系统(SoC),通过1Gb网络传输HDMI2.0 4K 4:4:4 的视频、音频和控制数据,ME10 SoC采用一个小的23 x 23毫米BGA封装。ME10主要特色为互通性和优越性能。 IPMX是AV的开放标准和规范的集合,专为专业AV市场开发的IP。…

【并发编程七】C++进程通信——套接字(socket)_80行代码实现一个聊天软件

【并发编程七】进程通信——套接字(socket)_80行代码实现一个聊天软件一、简介二、相关知识介绍1、winsock1.h、winsock2.h2、如何使用ws2_32.dll3、WSAStartup() 函数4、socket5、bind5、listen6、accept7、connect三、聊天软件的代码如下1、服务端2、客…

QT系列第5节 QT中常用输入控件

QT中经常利用控件来获取用户输入数据,本篇将介绍常用的用户输入控件 目录 (1) QSpinBox (2) QDoubleSpinBox (3)QSlider (4) QScrollBar (5)QProgressBar (6)QDia…

@MapperScan原理探究

1. 前言 MyBatis在整合Spring的时候,只需要加如下注解,就可以将Mapper实例注册到IOC容器交给Spring管理,它是怎么做到的呢??? MapperScan("com.xxx.mapper")提出几个问题: Mapper接…

Snipaste的使用

Snipaste截屏软件的使用: 1、开始截屏 第一种方式:快捷键 (默认是F1)也就是说按一下F1键就会进入截屏状态。 第二种方式:点击软件在任务栏上的图标。 2、选定截屏区域: 进入截屏状态后移动鼠标&#x…

绩效考核管理方案

第一部分 总 则 第一条:目的 1、通过绩效考核,传递组织目标和压力,促使员工提高工作绩效,达到“培养员工、提高员工的工作能力、纠正员工偏差、使之更好地为公司服务,达到公司与个人之间的双赢”的目的。 2、加强公司的…

四、fs文件系统模块

fs模块是Node.js官方提供用来操作文件的模块,属于核心模块,提供了一些列的方法和属性,用来满足用户的操作需求; 引入fs模块 const fs require(fs); fs.readFile() 读取 读取指定的内容,fs.readFile(path[&#xff…

图文排版 之 line-height

图文排版 之 line-height 设置行盒子的高度. line-height 经常被用来设置多行文本的行间距. 对于块级元素, line-height 制定了行盒子的最小高度. 对于非替换的内联元素, line-height 的值用来计算行盒子的高度. 一般来说, 大家都知道一个 div 的高度默认是由其子元素撑起的, …

史上最全 Java 高频面试合集,命中率高达 95%

进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全,其中概括的知识点有:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、 Redis、MySQL、Spring、S…

现代控制理论

系统的状态空间表达式的建立 建立系统状态空间表达式的三种方法 (1)根据系统的方框图列写 (2)从系统的基本原理推导 (3)根据传递函数或者高阶微分方程实现 方框图法 有些系统的系统机理还没搞清楚可以使…

nodejs+vue高校教室管理系统

摘 要 1 1 系统概述 4 1.1研究背景 4 1.2研究现状 4 1.3主要内容 5 2 系统开发环境 6 2.3 MySql数据库 6 2.4 B/S结构 7 3 需求分析 8 3.1技术可行性:技术背景 8 3.2经济可行性 8 3.3操作可行性 8 3.4系统设计规则 9 3.5系统流程和逻辑 9 4系统概要设计 13 4.1 概…

Delaunay三角网之分治算法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Delaunay三角网现有的构网算法有很多种,有学者曾对其中一些算法进行了调查和评估(如下图所示)。结果表明,在少量点时,Lawson的增量插入算法、Lee和Schachter的分治算法以及Fortune的平面扫描算法在速度上大致相…

Hexo+stun主题+Gitee5分钟快速搭建你的个人Blog

环境配置 首先要下载Node.js,然后安装Git,接着注册码云,最后安装Hexo,Hexo安装命令行(cmd 或 gitbash): npm install hexo-cli -g速度慢可以先改一下安装源: npm config set registry https://registry.npm.taobao.orgHexo搭建 目…

Linux调试器-gdb介绍

文章目录gdb的基础使用gdb是什么gdb的使用gdb的下载**l 显示代码****b 行号 :打断点****info b :查看断点****d 断点序号 :删除断点****r :运行调试****n(next) :逐过程****s(step):逐语句****c&#xff08…

程序员接私活的那些事

每日坚持一点点,就离目标近一点。 文章目录怎么在空闲时间获得格外的收入接私活的有哪些途径接私活的途中需要注意什么格外福利怎么在空闲时间获得格外的收入 今天我们就不聊技术问题,咱们聊聊一个有意思的话题—>怎么在空闲的时间获得格外的收益&…

设计模式3 - 结构型模式

23种设计模式分析与见解开篇、UML、软件设计原则https://blog.csdn.net/lili40342/article/details/128358435创建型模式https://blog.csdn.net/lili40342/article/details/128358392结构型模式https://blog.csdn.net/lili40342/article/details/128358313行为型模式https://bl…

UNIAPP实战项目笔记54 登录时用state存储用户信息并持久化用户登录和退出登录功能

UNIAPP实战项目笔记54 登录时用state存储用户信息并持久化用户登录和退出登录功能 登录信息各个页面同步使用的是state 登录信息的持久化使用的是本地存储 打开APP自动初始化本地存储数据到state中 实际案例图片 登录页面数据渲染 代码 login.vue页面 登录成功后显示的页面 &l…

论文阅读 - Social Bot-Aware Graph Neural Network for Early Rumor Detection - CCF B

目录 摘要: 1 绪论 2 问题定义 3 SBAG模型 3.1社交机器人检测 3.2 机器人感知图神经网络 3.2.1基于GCN的用户发布 3.2.2 基于GAT的用户交互 3.2.3文本编码器 3.2.4 输出层 3.3 训练 4 实验 4.1 数据集 4.2 实验设置 4.3 基线 4.4 实验结果 4.4.1 谣言…