8月9日上课内容 nginx负载均衡

news2024/11/15 23:53:01

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

负载均衡:通过反向代理来实现(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.coloradmin.cn/o/855538.html

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

相关文章

C语言:打开调用堆栈

第一步:打断点 第二步:FnF5 第三步:按如图找到调用堆栈

DC-8靶机

DC-8官网地址 信息收集 靶机MAC: 00:0C:29:3A:46:A1 主机发现 nmap -sP 192.168.80.0/24端口扫描 nmap -A -p- 192.168.80.142访问80端口 点击页面能点击的地方,发现每点击一个链接,地址栏的?nid后面的数字就会变 尝试在数字后面加个 引…

【Leetcode】链表中两数之和(模拟加法器)(击败100%)

step by step. 题目: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&…

2023年下半年软考初级程序员备考攻略

初级程序员考试科目包含基础知识和应用技术,各科目的考试形式都是笔试,满分均为75分。程序员考试需要各科目在一次考试中均及格才算合格,单科及格的成绩不保留,也不能转移到下次考试时使用。 这里给大家理清一个程序员考试的相关…

iOS开发-JsonModel的学习及使用

IOS JsonModel的学习及使用 当我们从服务端获取到json数据后的时候,我们需要在界面上展示或者保存起来,下面来看下直接通过NSDictionary取出数据的情况。 NSDictionary直接取出数据的诟病。 NSString *name [self.responseObj objectForKey:"nam…

Vue3弹出确认(Popconfirm)

效果如下图:在线预览 APIs 参数说明类型默认值必传title确认框的标题string | slot‘’falsedescription确认框的内容描述string | slot‘’falsecontent展示的文本string | slot‘’falseicon自定义弹出确认框 Icon 图标string | slot‘’falsemaxWidth弹出确认框…

《合成孔径雷达成像算法与实现》Figure3.8

与图3.7的代码区别只在于原始信号的表达式对了一个时间偏移 代码复现如下: clc clear all close all%参数设置 TBP 100; %时间带宽积 T 10e-6; %脉冲持续时间 tc …

SEED-Bench: Benchmarking Multimodal LLMs with Generative Comprehension

本文是LLM相关的文章,针对《SEED-Bench: Benchmarking Multimodal LLMs with Generative Comprehension》的翻译。 SEED-基准:用生成理解对多模式LLM进行基准测试 摘要1 引言2 相关工作3 SEED-Bench 摘要 基于强大的大型语言模型(LLM&#…

【SpringBoot框架篇】33.优雅集成i18n实现国际化信息返回

文章目录 1.简介2.MessageSource配置和工具类封装2.1.配置MessageSource相关配置2.2.配置工具类2.3.测试返回国际级文本信息 3.不优雅的web调用示例(看看就行,别用)4.优雅使用示例4.1.错误响应消息枚举类4.2.ThreadLocal工具类配置4.2.1.ThreadLocal工具类数据封装4…

不再限制CPU,这才是Win11完全体的样子嘛

从 Win11 刚问世时,微软就宣称将给其许多 Win10没有也不会支持的新功能。 其中 Android 子系统的支持算得上是最期待,但结果难免有些失望的部分。 先不说使用怎么样,光是安装就困难重重。 绕过限制升级了 Win11 ,但没想到安装 W…

idea双击启动无效,idea卡顿问题

idea双击启动无效:大概率是关机时没有正确关闭idea,再次开机导致无法正常启动idea 1.通过任务管理器杀死idea进程后重启idea 2.需要修改配置 打开 (以各自电脑实际为准)C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\bin&am…

LabVIEW使用图像处理检测显微图像中的白血病

LabVIEW使用图像处理检测显微图像中的白血病 人体最重要的部分是血液,因为它使人活着。它执行许多重要功能,例如转移氧气,二氧化碳,矿物质等。血液量不足会极大地影响新陈代谢,如果不及早治疗,这可能是非常…

接口自动化测试框架及接口测试自动化主要知识点

接口自动化测试框架: 接口测试框架:使用最流行的Requests进行接口测试接口请求构造:常见的GET/POST/PUT/HEAD等HTTP请求构造 接口测试断言:状态码、返回内容等断言JSON/XML请求:发送json\xml请求JSON/XML响应断言&…

c语言经典例题讲解(输出菱形,喝汽水问题)

目录 一、输出菱形 二、喝汽水问题 方法1:一步一步来 方法二:直接套公式 一、输出菱形 输出类似于下图的菱形: 通过分析:1、先分为上下两部分输出 2.在输出前先输出空格 3.找规律进行输出 可知,可令上半部分lin…

Python Opencv实践 - 图像属性相关

import numpy as np import cv2 as cv import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) plt.imshow(img[:,:,::-1])#像素操作 pixel img[320,370] print(pixel)#只获取蓝色通道的值 pixel_blue img[320,370,0]…

openwrt dns ssh相关问题

DHCP/DNS中 的技术叫dnsmasq 可配置hosts和 自定义挟持域名配置 image.png image.png 拦截优先级为挟持域名最高,另外需要重启服务方可生效,在系统,启动项中重启dnsmasq ssh 使用root用户SSH登录服务器出现Access Denied错误 只输入root就出现…

Python-OpenCV中的图像处理-图像金字塔

Python-OpenCV中的图像处理-图像金字塔 图像金字塔高斯金字塔拉普拉斯金字塔 金字塔图像融合 图像金字塔 同一图像的不同分辨率的子图集合,如果把最大的图像放在底部,最小的放在顶部,看起来像一座金字塔,故而得名图像金字塔。cv2…

C语言的动态分配空间C++的动态分配空间问题

动态分配空间 C:1、malloc 2、calloc C:new运算符 一 malloc malloc(): 这个函数用于分配一块指定大小的内存块,并返回一个指向该内存块的指针。语法如下: void* malloc(size_t size); 示例: int* ptr …

欧拉操作系统添加磁盘

1、查看磁盘空间 fdisk -l 2、创建新磁盘分区 fdisk /dev/vda 欢迎使用 fdisk (util-linux 2.37.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 This disk is currently in use - repartitioning is probably a bad idea. Its r…

(力扣)用两个栈实现队列

这里是栈的源代码:栈和队列的实现 当然,自己也可以写一个栈来用,对题目来说不影响,只要符合栈的特点就行。 题目: 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、pe…