nginx负载均衡(nginx结束)

本节主要内容

1、四层,七层代理的配置方法

2、负载均衡的算法

nginx负载均衡:反向代理来实现

 反向代理有两种转发方式:1、四层代理  2、七层代理

Nginx的七层代理和四层代理

七层是最常见的反向代理方式,只能配置在nginx配置文件的http模块,而且配置方法名称:upstream模块   不能写在server模块,也不能写在location模块中,在htp模块中是一个独立的配置。

七层代理:就是代理http的请求和响应

工作原理:客户端→http请求→七层代理(代理服务器上)→代理服务器转发http请求到内部的一组服务器上(web集群)→客户端不知道请求的是代理服务器还是内部服务器,而且通过代理服务器响应了内部服务器的ip,实际上访问的是代理服务器,请求到代理服务器,代理服务器转发给web服务器,web服务器响应。

四层代理:

四层代理是基于tcp/ip协议层的代理转发方式,可以实现基于ip地址和端口进行负载均衡转发,四层代理无法获取http请求的URL信息,只能对tcp/udp数据包进行转发。流量转发

在nginx中为stream,stream是不能配置在http模块中,配置在全局中,是属于一个独立的模块,不属于其他任何模块。

面试题一:七层代理和四层代理的区别

1、七层代理走的是http请求,可以对请求进行深入的解析和处理,流量控制,内容过滤。

四层代理走的是tcp/udp请求的数据包,转发的是流量。

2、四层代理不能对流量进行控制,也没办法对内容进行过滤,

3、四层代理通常适用于需要处理大量连接请求的场景

七层代理适用于对请求进行精确处理和控制的场景

面试题二:四层代理和七层代理谁的速度块

1、四层代理只是流量转发,不能对请求进行解析和控制,所以速度块。

七层代理要对请求进程处理和解析,所以速度慢。

2、四层代理走的是内核,内核转发的是流量,所以速度快。

七层代理走的是用户态,访问控制,流量处理,所以速度慢。

正向代理(用的少):

 谷歌看到的请求地址是代理服务器的地址

proxy_pass:配置代理服务器访问的地址,只能写在location模块中

反向代理(重点,用的多)

反向代理:客户端访问代理服务器,代理服务器转发请求或者流量到后端服务器

后端的web服务器会有多台(集群),用户并不知道最终访问的是哪一台服务器

反向代理的特点:负载均衡,高可用,可扩展,提高可维护性

upstream:基于https实现负载均衡,就是反向代理

总结:1、http请求的负载均衡方式

2、没有缓存,返回码没有304

3、负载均衡算法

负载均衡的算法(重点,面试会问):

1、默认算法,轮询(rr):请求轮流分配给后端服务器

轮询算法适用于web服务器处理能力相近的情况,不写入任何方法就是默认的轮询算法

2、加权轮询:建立在轮询算法的基础之上,通过给不同的web服务器权重,让处理能力更强的服务器可以分配到更多的请求。

虽然配置了权重值,但是轮询的结果未必准确。

例:

server 192.168.88.20  weight=2;

server 192.168.88.30  weight=3;

30服务器的权重大,会分配到更多的请求

3、ip_hash:根据IP地址计算出一个hash值,使用ip_hash算法,同一个客户端的请求会被分配到同一个后端服务器。保证会话的稳定性。后端服务器的数量发生变化,hash会被重新计算,请求的服务器也会发生变化。

4、最少连接数:least_conn; 轮询,请求发送到当前连接数最少的后端web服务器。

适用于后端服务器处理任务耗时不同的情况,避免了所有请求集中在处理能力更强的后端服务器上。会和加权轮询配合使用。

5、url_hash:根据uri地址计算hash值,使用url_hash,相同请求的uri会分配到同一个后端web服务器。


总结:1、并发量小,默认算法就可以满足使用条件。

2、后端web服务器的处理能力有差异,使用加权轮询和最小连接数配合使用。

3、高并发,会使用ip_hash或url_hash,第一次请求之后会有本地缓存,而且因为hash算法的原因,请求的后台web服务器不会发生变化,可以提高访问速度,访问的是缓存,减轻了后台服务器的请求压力。

4、ip_hash:后端web服务器数量发生变化,请求的服务器也会发生变化

url_hash:请求的地址发生变化,请求的服务器也可能发生变化

面试题三:怎么做反向代理(实际上问的是负载均衡)

反向代理就是负载均衡,要做负载均衡要看使用场景的并发量,访问人数有多少,根据这个指标来确定负载均衡的算法。

并发量小:默认的轮询算法或加权轮询配合最小连接数使用即可

高并发:ip_hash或url_hash来实现,访问一次之后就不会再切换到后端web服务器

下一次访问就是缓存,速度快,后台web服务器请求的压力也会变小。

stream和upstream都可以做反向代理

实验

upstream

轮询算法

192.168.88.30作为代理服务器

修改30服务器

 ky30相当于调用的函数,用proxy_pass来调用ky30

 

 

修改40服务器和50服务器

 

 

到浏览器查看

实验二:加权轮询

 

 

 

 在浏览器清除一下缓存,刷新几次发现轮询的结果不一定准确

实验三:ip_hash

 

 

 

 在浏览器新开一个页面,清除缓存,通过30代理服务器访问

 刷新几次发现一开始的状态码为200,后面的状态码都为304读取的是缓存

因为使用ip_hash算法,同一个客户端的请求会被分配到同一个后端服务器。保证会话的稳定性。

实验四:最少连接数

 

 

 请求40服务器时状态码为200

 请求50时,状态码为304

实验五:url_hash

 

 

 

 

 多刷新几次发现没有变化,访问的都是40服务器

到50服务器中

 

 

 

 请求的是location匹配的uri

使用url_hash会把相同请求的uri会分配到同一个后端web服务器

实验六:基于域名实现负载均衡

 ky30相当于一个名字可以随便去但是不能为特殊符号

 因为没有这个网址,需要在本地做个映射

 检查一下

到40服务器中修改域名

 

在本地做映射 

到50服务器中

 

做映射 

开一台新的虚拟机

 

回到客户机30

 在请求头中要包含真实ip地址,和真实的域名才可以在浏览器中成功访问

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

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

相关文章

[保研/考研机试] KY129 简单计算器 浙江大学复试上机题 C++实现

描述 读入一个只包含 , -, *, / 的非负整数计算表达式,计算该表达式的值。 输入描述: 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中…

设计模式——单例模式(懒汉和饿汉)

单例模式 一、概念 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。一个类只能有一个实例在生活中是很常见的,比如打印机程…

Clickhouse 数据存储

一、数据分区 数据是以分区目录的形式组织的,每个分区独立分开存储.这种形式,查询数据时,可以有效的跳过无用的数据文件。 1.1 数据分区的规则 分区键的取值,生成分区ID,分区根据ID决定。根据分区键的数据类型不同&am…

【论文阅读】基于深度学习的时序异常检测——TimesNet

系列文章链接 参考数据集讲解:数据基础:多维时序数据集简介 论文一:2022 Anomaly Transformer:异常分数预测 论文二:2022 TransAD:异常分数预测 论文三:2023 TimesNet:基于卷积的多任…

Webpack5新手入门简单配置

1.初始化项目 yarn init -y 2.安装依赖 yarn add -D webpack5.75.0 webpack-cli5.0.0 3.新建index.js 说明:写入下面的一句话 console.log("hello webpack"); 4.执行命令 说明:如果没有安装webpack脚手架就不能执行yarn webpack&#xff08…

【cs61b】学习笔记day2

历史文章目录 【cs61b】学习笔记day1 文章目录 历史文章目录List两个小问题bits声明一个变量引用类型方框和指针表示法数组的实例化链表 SLList List 两个小问题 思考下面两个代码分别输出什么 Walrus a new Walrus(1000, 8.3); Walrus b; b a; b.weight 5; System.out.…

ubuntu搭建wifi热点,共享网络(x86、arm相同)

目录 1 首先检查网络管理器服务是否开启 (ubuntu需要界面) 2 创建并配置需要共享的wifi 首先,明确下这篇文章说的是啥,是为了在ubuntu系统的电脑上,搭建一个wifi热点,供其他移动设备连接上网。就像你…

Smart HTML Elements 16.1 Crack

Smart HTML Elements 是一个现代 Vanilla JS 和 ES6 库以及下一代前端框架。企业级 Web 组件包括辅助功能(WAI-ARIA、第 508 节/WCAG 合规性)、本地化、从右到左键盘导航和主题。与 Angular、ReactJS、Vue.js、Bootstrap、Meteor 和任何其他框架集成。 智…

Linux常用命令大全

目录操作 切换目录 cd 查看目录 ls -l 列出文件详细信息 或者直接ll-a 列出当前目录下所有文件及目录,包括隐藏的a(all) 创建目录 mkdir -p 创建目录,若无父目录,则创建p(parent) 输出信息 echo 打印文件到命令行(查看文件) cat 改变…

stm32与上位机电脑间最快的通信方式是什么?

对于小型多关节机械臂的控制电路设计,选择合适的通信方式可以提高MCU与上位机之间的实时性。以下是一些在STM32上常用的通信方式,你可以根据你的具体需求选择适合的: 串口通信(UART):串口通信是一种常见的…

【stm32】初识stm32—stm32环境的搭建

文章目录 🛸stm32资料分享🍔stm32是什么🎄具体过程🏳️‍🌈安装驱动🎈1🎈2 🏳️‍🌈建立Start文件夹 🛸stm32资料分享 我用夸克网盘分享了「STM32入门教程资料…

【单片机】51单片机串口的收发实验,串口程序

这段代码是使用C语言编写的用于8051单片机的串口通信程序。它实现了以下功能: 引入必要的头文件,包括reg52.h、intrins.h、string.h、stdio.h和stdlib.h。 定义了常量FSOC和BAUD,分别表示系统时钟频率和波特率。 定义了一个发送数据的函数…

关于eclipse导入部署具有增删改查的项目

目录 前言:当我们刚刚进入公司的第一步就是去部署当前公司的项目,本博客就是详细介绍怎么去部署当前公司的项目。 一,开发工具: 二,具体步骤: 2.1导入公司的项目 打开eclipse开发工具 2.2配置当前的环…

下载网络文件到本地

文章目录 目录 前言 操作步骤 1.引入 2.读取出文件内容 3.筛选出URL 4.下载表情包 总结 前言 这里记录一次用代码下载网络文件的过程,以获取抖音表情包为例。 一、操作步骤 1.引入 首先抖音有网页版,用浏览器就可以观看,用户评论发布表情在…

蓝桥杯上岸每日N题 第八期 (全球变暖)!!!

蓝桥杯上岸每日N题第八期(全球变暖)!!! 同步收录 👇 蓝桥杯上岸必背!!!(第五期BFS) 大家好 我是寸铁💪 冲刺蓝桥杯省一模板大全来啦 🔥 蓝桥杯4月8号就要开始了 &am…

MAPPO 算法的深度解析与应用和实现

【论文研读】 The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games 说明: 来源:36th Conference on Neural Information Processing Systems (NeurIPS 2022) Track on Datasets and Benchmarks. 是NIPS文章,质量有保障&…

黑马机器学习day2

1.1sklearn转换器和估计器 转换器和预估器(estimator) 1.1.1转换器 实例化一个转换器类 Transformer调用fit_transform() 转换器调用有以下几种形式: fit_transformfittransform 1.1.2估计器 在sklearn中,估计器是一…

uni——月份选择(横向滑动tab,横向滚动选择日期)

案例展示 案例代码 已封装成组件使用 <template><view><view class"tabBox"><scroll-view scroll-x"true" :scroll-left"scrollLeft" :scroll-with-animation"true"><view class"box"><…

[excel]vlookup函数对相同的ip进行关联

一、需求&#xff08;由于ip不可泄漏所以简化如下&#xff09; 有两个sheet: 找到sheet1在sheet2中存在的ip&#xff0c;也就是找到有漏洞的ip 二、实现 vlookup函数有4个参数 第一个:当前表要匹配的列&#xff0c;选择第一个sheet当前行需要处理的ip即可 第二个:第二个shee…

北京多铁克FPGA笔试题目

1、使用D触发器来实现二分频 2、序列检测器&#xff0c;检测101&#xff0c;输出1&#xff0c;其余情况输出0 module Detect_101(input clk,input rst_n,input data, //输入的序列output reg flag_101 //检测到101序列的输出标志 );parameter S0 2d0;S1 2d1;S2 2d2;S4 …