【Nginx】Nginx负载均衡

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

Nginx的七层代理和四层代理:

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

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

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

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

        实际上,客户端访问的是代理服务器;请求通过代理服务器转发给web服务器,web服务器响应;

四层代理:

是基于tcp/ip协议层的代理转发方式;可以实现基于IP地址和端口进行负载均衡转发

四层代理无法获取http请求当中的URL信息,只能对tcp/udp数据包进行转发;也就是对流量转发

配置方法:stream;stream不能配置在http模块中,配置在全局当中,是属于一个独立的模块,不属于其他任何模块

1.四层代理和七层代理的区别(面试***)

        四层代理是基于IP地址和端口号进行的,只负责转发请求,速度较快

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

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

        七层代理的特点:基于http协议进行;可以对请求进行深入地解析和处理(流量控制、内容的过滤)

        四层:适用于需要高效处理大量连接请求的场景: TCP 和 UDP 协议的负载均衡;

        七层:适用于对请求进行精确处理和控制的场景:Web 应用程序的负载均衡

2.四层和七层哪个速度更快(面试)

        四层代理相比七层更快;

        四层只是流量转发,不能对请求进行解析和控制;快

        四层代理是通过内核转发的流量;快

        七层代理,需要对请求进行处理和解析;慢

        七层的 访问控制、流量处理 是通过用户态进行的;慢

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

正向代理:

        正向代理是面向客户端的;当客户端的IP地址被web服务器禁止访问后,(客户端)可以通过代理服务器去访问web服务器;

        web服务器只会知道是代理服务器的ip访问的它,而不知道是客户端

proxy_pass    #配置代理服务器访问的地址;只能写在location模块中
应用:正向代理更多的用在公司内网,公司内员工的主机都通过一个代理服务器访问互联网,而互联网上被访问的服务器,只知道代理服务器的ip,不知道公司内员工的ip,主要作用:加速,翻墙

反向代理:***

        客户端直接访问代理服务器

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

        负载均衡具有:高可用、可扩展、提高可维护性

工作中你是怎么做反向代理的(面试*)

反向代理就是负载均衡,根据场景的并发量来确定负载均衡的算法

并发量小:可以使用默认轮询,配合最小连接数使用即可

高并发:ip_hash或者url_hash来实现,访问一次之后,就不会再切换后端web服务器,下一次访问的就是缓存,速度快、后台web服务器的请求压力也会变小

upstream        基于http实现负载均衡;反向代理;

特点:
http请求的负载均衡方式
没有缓存
默认为轮询算法
1.轮询算法(rr)

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

vim /usr/local/nginx/conf/nginx.conf#gzip on;upstream ky30 {server 192.168.220.20;server 192.168.220.30;#指定通过代理服务器10,会把http的请求转发到20或者30上}location / {root    html;index   index.html index.htm;proxy_pass http://ky30;}

2.加权轮询算法

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

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

vim /usr/local/nginx/conf/nginx.conf#keepalive_timeout 0;keepalive_timeout 65;#gzip on;upstream ky30 {server 192.168.220.20 weight=2;server 192.168.220.30 weight=3;#通过代理服务器10,转发http请求时,网权重高的服务器上转发的次数会更多,权重少的转发就少}
3.ip_hash算法

        会根据IP地址计算出一个hash值,使用ip_hash算法,同一个客户端的请求会被分配到同一个后端服务器,可以保证会话的稳定性;

        如果后端服务器的数量发生变化,hash值会重新计算,请求的服务器也会发生变化

4.最少连接数算法least_conn

        可以轮询,会将请求发送到当前连接数最少的web服务器

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

5.url_hash算法

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

vim /usr/local/nginx/conf/nginx.conf#gzip on;upstream ky30 {hash $request_uri consistent;server 192.168.220.20 weught=2;server 192.168.220.30 weight=3;}
负载均衡的核心就是各类算法

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

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

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

        ip_hash;后端服务器数量发生变化,请求的服务器也会发生变化

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

stream

默认不带轮询;可以使用的轮询方式

算法:除不支持url_hash外,其他与upstream相同

实验

1.七层:

http        IP地址

http        域名

2.四层:

stream

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

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

相关文章

ZABBIX 6.4的完全安装步骤

此安装文档是我一步一步的验证过的,按步骤来可以顺畅的安成ZABBIX6.4的部署。 Zabbix 主要有以下几个组件组成: Zabbix Server6.4:Zabbix 服务端,是 Zabbix 的核心组件。它负责接收监控数据并触发告警,还负责将监控数…

(2023Arxiv)Meta-Transformer: A Unified Framework for Multimodal Learning

论文链接:https://arxiv.org/abs/2307.10802 代码链接:https://github.com/invictus717/MetaTransformer 项目主页:https://kxgong.github.io/meta_transformer/ 【注】:根据实验结果来看,每次输入一种数据源进行处…

Ajax-AJAX请求的不同发送方式

🥔:你一定能成为想要成为的人 发送AJAX请求不同方式 发送AJAX请求不同方式1、jQuery发送AJAX请求2、axios发送AJAX请求(重点)3、fetch发送AJAX请求 发送AJAX请求不同方式 1、jQuery发送AJAX请求 首先需要jquery的js文件&#xf…

Vc - Qt - QToolButton

QToolButton 是 Qt 框架中的一个类,是 QPushButton 的子类。它可以显示一个可单击的按钮,并且可以与弹出菜单、图标和文本等进行关联。 QToolButton的一些常见特性和用法包括: 设置文本:使用 setText() 函数设置按钮上的文本。设置…

webpack 热更新的实现原理

webpack 的热更新⼜称热替换(Hot Module Replacement),缩写为HMR。这个机制可以做到不⽤刷新浏览器⽽将新变更的模块替换掉旧的模块。 原理: ⾸先要知道 server 端和 client 端都做了处理⼯作: 在 webpack 的 watch…

Redis集群 (三十九)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、Redis主从复制 1.1 概念 1.2 作用 1.3 缺点 1.4 流程 1.5 搭建 1.6 验证 二、Reids哨兵模式 2.1 概念 2.2 作用 2.3 缺点 2.4 结构 2.5 搭建 2.6 验证 三、Red…

解决nvm安装后,node生效但npm无效

问题描述 nvm安装后,node生效但npm无效 清除缓存 C:\Users\cc\AppData\Roaming cc是我的用户名改成你自己的就行删除 npm和npm-cache

form表单构造http请求的写法

from是html的一个标签,from是html后早http请求的一种方式,它和input标签密切配合。 from有两个基本属性action和method,action就是http请求url中的路径部分。method就是构造的http请求的方法。 form和input标签配合构造键值对,键值…

数据结构笔记--二叉树经典高频题

1--二叉树的最近公共祖先 主要思路: 最近祖先只有两种情况:① 自底向上,当两个目的结点分别在当前结点的左右子树时,当前结点为两个目的结点的最近祖先;② 最近祖先与其中一个目的结点相同,则另一个目的结点…

Python-OpenCV中的图像处理-形态学转换

Python-OpenCV中的图像处理-形态学转换 形态学转换腐蚀膨胀开运算闭运算形态学梯度礼帽黑帽形态学操作之间的关系 形态学代码例程 形态学转换 形态学操作:腐蚀,膨胀,开运算,闭运算,形态学梯度,礼帽,黑帽等…

企业微信 企业内部开发 学习笔记

官方文档 文档 术语介绍 引入pom <dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-cp-spring-boot-starter</artifactId><version>4.5.3.B</version></dependency>核心代码 推送消息 final WxCp…

面试攻略,Java 基础面试 100 问(十一)

抽象类&#xff08;abstract class&#xff09;和接口&#xff08;interface&#xff09;有什么异同? 抽象类和接口都不能够实例化&#xff0c;但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现&#xff…

英码国产高配边缘计算盒子上市!搭载TPU处理器BM1684X,适配麒麟系统,支持OTA升级!

随着人工智能技术不断深入实际应用场景&#xff0c;加速各行各业场景应用落地&#xff0c;边缘计算的重要性越发凸显。相较于传统的集中式云计算&#xff0c;边缘计算在距离数据源或用户更近的地方提供计算能力&#xff0c;不仅满足了对实时性要求较高的场景应用需求&#xff0…

如何通过CSS选择器选择一个元素的子元素?如何选择第一个子元素和最后一个子元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 选择一个元素的子元素⭐ 选择第一个子元素和最后一个子元素⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&…

线程池,以及线程池的实现以及面试常问的问题,工厂模式,常见的锁策略(面试常考,要了解,不行就背)

一、&#x1f49b; 线程池的基本介绍 内存池&#xff0c;进程池&#xff0c;连接池&#xff0c;常量池&#xff0c;这些池子概念上都是一样的&#xff5e;&#xff5e; 如果我们需要频繁的创建销毁线程&#xff0c;此时创建销毁的成本就不能忽视了&#xff0c;因此就可以使用线…

Redis系列(一):深入了解Redis数据类型和底层数据结构

Redis有以下几种常用的数据类型&#xff1a; redis数据是如何组织的 为了实现从键到值的快速访问&#xff0c;Redis 使用了一个哈希表来保存所有键值对。 Redis全局哈希表&#xff08;Global Hash Table&#xff09;是指在Redis数据库内部用于存储所有键值对的主要数据结构。…

安卓13不再支持PPTP怎么办?新的连接解决方案分享

随着Android 13的发布&#xff0c;我们迎来了一个令人兴奋的新品时刻。然而&#xff0c;对于一些用户而言&#xff0c;这也意味着必须面对一个重要的问题&#xff1a;Android 13不再支持PPTP协议。如果你是一个习惯使用PPTP协议来连接换地址的用户&#xff0c;那么你可能需要重…

C++ 泛型编程:函数模板

文章目录 前言一、什么是泛型编程二、函数模板三、函数模板的使用四、多参数函数模板五&#xff0c;示例代码&#xff1a;总结 前言 当需要编写通用的代码以处理不同类型的数据时&#xff0c;C 中的函数模板是一个很有用的工具。函数模板允许我们编写一个通用的函数定义&#…

接口测试之Jmeter+Ant+Jenkins接口自动化测试平台

平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行&#xff0c;自动生成测试报告&#xff0c;以及持续集成。Jmeter支持接口的测试&#xff0c;Ant支持自动构建&#xff0c;而Jenkins支持持续集成&#xff0c;所以三者组合在一起可以构成一个功能完善的接口自动化…