8月9日上课内容 nginx反向代理与负载均衡

负载均衡工作当中用的很多的,也是面试会问的很重要的一个点

负载均衡:通过反向代理来实现(nginx只有反向代理才能做负载均衡)

正向代理的配置方法(用的较少)

反向代理的方式:四层代理与七层代理

1、NGINX的七层代理四层代理:

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

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

客户端------>http请求------>七层代理(代理服务器上)------>代理服务器转发http请求到内部的一组服务器(web集群)

-------------->客户端不知道请求的是代理服务器还是内部服务器,而且通过代理服务器隐藏了内部服务器的ip。

实际上访问的是代理服务器,请求到代理,代理转发给web服务器。web服务器响应。

注:代理服务器只是负责转发,最终还是由web服务器来响应用户的。

四层代理:四层代理是基于tcp/ip协议的代理转发方式(四层就是传输层,协议),可以实现基于ip地址和端口进行负载均衡转发。 

四层代理无法获取http请求当中的URL信息,只能对tcp或者udp的数据包进行转发。流量转发stream,stream是不能配置在http模块中的,配置在全局当中。是属于一个独立的模块,不属于其他任何模块。

四层代理和七层代理之间的区别(面试题,重点)

1、七层走的是http请求四层走的是tcp/udp的数据包,转发的是流量。

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

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

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

七层:对请求进行精确处理和控制的场景。

在实际工作中,四层和七层可以配合使用。

2、四层代理和七层代理谁的速度快(核心):

四层代理速度比七层代理速度快

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

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

1、七层慢,他对请求进行解析和处理,速度比较慢

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

七层代理可以提供更高级的服务和更高的用户体验。

正向代理:

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

例:

nginx1

nginx2

 

访问看一下日志文件

流量是通过代理服务器61来访问的

反向代理:客户端访问代理服务器,代理服务器转发请求或者流量到后端服务器,后端的web服务器会有多台,用户并不知道最终访问的服务器是哪一台服务器。

主要作用:负载均衡 高可用 可扩展 提高可维护性

你在工作中怎么做反向代理?实现方式是什么?(面试题,重点)

upstring:基于http实现负载均衡。就是反向代理。

调用ky30

修改一下62 63的配置 

 

通过61这个代理服务器把流量转发到62 63上

用轮询算法,分给test1 test2

upstream:基于http实现负载均衡。也就是反向代理

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

2、没有缓存

3、负载均衡的算法(实现方式,重点,掌握)

1、默认算法:轮询算法 rr 请求轮流分配给后端服务器,轮询算法适用于web服务器处理能力相近的情况,默认算法,可以不加。

2、加权轮询:

检查一下语法:

访问一下

2、加权轮询:建立在轮询算法的基础之上,通过给不同的web服务器权重,让处理能力更强的服务器可以分配到更多的请求。虽然配置了权重值,但是轮询的结果未必准确。

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

请求一下:

发现第一次请求之后,再请求的状态码都是304,读取的是缓存,且每次请求访问的都是同一个服务器。

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

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

5、url_hash:

 

清一下缓存,开一下新的终端,看一下

发现每次的请求也会分配到同一个服务器

换一个客户机访问一下:

发现请求的是location匹配的是uri,请求的也是同一个服务器

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

算法应用总结:

小场景:并发量很小,默认算法就可以满足适用条件

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

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

注意:ip_hash,后端web服务器数量发生变化,请求的服务器也可能会发生变化。

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

你怎么做反向代理的?概括总结

反向代理--->负载均衡--->算法--->根据不同的场景(并发量)选择不同的算法

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

并发小:默认轮询或者加权轮询,配合最小连接数使用即可。

高并发:ip_hash或者url_bash来实现,访问一次之后就不会再切换后端服务器。下一次访问的就是缓存,速度快,后台服务器请求的压力,也会变小。(仅限于http请求,不能写在stream里)

stream可以用加权,可以用轮询,转发流量不能基于ip_hash和url_hash

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

nginx1

配置完需要在本地做一个配置

nginx2 后台代理服务器配置

nginx3 后台服务器配置

都需要做本地映射

改完在撰写栏写一个重启nginx服务的命令

这样就三台机器可以同时执行重启命令

用test1作为客户端

映射服务器

映射地址是61,因为访问test,通过test这个代理服务器的地址来进行转发,所以配置的是test

虽然设置了域名,host地址还没有被传到后端服务器,所以无法解析,是404

在代理服务器上nginx1配,location模块中配置,把头部信息传给后端服务器

主机地址和真实ip地址写进去

请求头要包含主机名和真实的ip地址

配置完之后重启一下服务即可

访问没问题,再改一下访问地址

客户机直接访问,没问题,说明没问题

再到虚拟机中访问一下:

 

访问成功

四层代理:

stream单独一个模块,stream模块里面再单独配置一个server模块,调用upstream的server方法

配置端口号,让四层能够转发

检查一下,发现错误:

看一下日志

80端口被占用,把server端口改一下

再重启一下nginx,用浏览器访问一下,成功

也可以实现轮询

实验总结:

1、七层:

http根据ip地址

根据域名

2、四层

stream

ip_hash

轮询:默认 rr

           加权

最小连接数 

注:匹配uri不行

默认不带轮询

要想它轮询得加权

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

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

相关文章

三.SpringBoot整合Elasticsearch

SpringBoot整合Elasticsearch 前言一.java调用es的方式和工具二.java集成Elasticsearch-Rest-Client1.引入pom2.导入版本不一致问题3.编写配置类4.测试类4.1 执行前4.2 执行后 5.其他篇章 前言 我们整合es直接给es发请求就可以了,但是现在有很多方式去调用es的接口…

实战项目——多功能电子时钟

一,项目要求 二,理论原理 通过按键来控制状态机的状态,在将状态值传送到各个模块进行驱动,在空闲状态下,数码管显示基础时钟,基础时钟是由7个计数器组合而成,当在ADJUST状态下可以调整时间&…

HTML5 Canvas和Svg:哪个简单且好用?

HTML5 Canvas 和 SVG 都是基于标准的 HTML5 技术,可用于创建令人惊叹的图形和视觉体验。 首先,让我们花几句话介绍HTML5 Canvas和SVG。 什么是Canvas? Canvas(通过 标签使用)是一个 HTML 元素,用于在用户计算机屏幕…

kubernetes中最小组件——Pod

目录 一、Pod简介 二、Pod的使用方式 三、Pause——Pod中底层基础容器 四、为什么kubernetes这样设计Pod 五、Pod的分类 1.自主式Pod 2.控制器管理的Pod 3.静态Pod 六、Pod容器的分类 1. 基础容器(infrastructure container) 2. 初始化容器&am…

Reinforcement Learning with Code 【Chapter 10. Actor Critic】

Reinforcement Learning with Code 【Chapter 10. Actor Critic】 This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation of …

pc端网页用vue并且实现响应式 vue+bootstrap-vue

1、hbuiler内新建vue项目 在项目文件夹下用npm加载依赖(或者用hbuilder内打开命令) 2、配置路由 src内新建router文件夹,router内新建index.js index.js内配置重定向到首页 main.js内配置路由 import router from /router/index.js new…

java获取到heapdump文件后,如何快速分析?

简介 在之前的OOM问题复盘之后,本周,又一Java服务出现了内存问题,这次问题不严重,只会触发堆内存占用高报警,没有触发OOM,但好在之前的复盘中总结了dump脚本,会在堆占用高时自动执行jstack与jm…

9.3.2.1网络原理(UDP)

1.UDP的基本特点:无连接,不可靠传输,面向数据报,全双工. 2.1~1024的端口号有特定的含义,不建议使用.比如21:ftp,22:ssh,80:http,443:https. 3.CRC校验算法:循环冗余校验和,把UDP报中的每个字节都依次进行累加,把累加的结果,放到两个字节的变量中,溢出也无所谓,因为都加了一遍.…

基于python+MobileNetV2算法模型实现一个图像识别分类系统

一、目录 算法模型介绍模型使用训练模型评估项目扩展 二、算法模型介绍 图像识别是计算机视觉领域的重要研究方向,它在人脸识别、物体检测、图像分类等领域有着广泛的应用。随着移动设备的普及和计算资源的限制,设计高效的图像识别算法变得尤为重要。…

oracle的管道函数

Oracle管道函数(Pipelined Table Function)oracle管道函数 1、管道函数即是可以返回行集合(可以使嵌套表nested table 或数组 varray)的函数,我们可以像查询物理表一样查询它或者将其赋值给集合变量。 2、管道函数为并行执行,在…

Python 中的机器学习简介:多项式回归

一、说明 多项式回归可以识别自变量和因变量之间的非线性关系。本文是关于回归、梯度下降和 MSE 系列文章的第三篇。前面的文章介绍了简单线性回归、回归的正态方程和多元线性回归。 二、多项式回归 多项式回归用于最适合曲线拟合的复杂数据。它可以被视为多元线性回归的子集。…

【C语言】小游戏-三字棋

大家好,我是深鱼~ 目录 一、游戏介绍 二、文件分装 三、代码实现步骤 1.制作简易游戏菜单 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑随机下棋 6.判断输赢 7.判断棋盘是否满了 四、完整代码 game.h(相关函数的声明,整个代码要引用的头文件以及宏…