【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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

爬虫ip池越大越好吗?

作为一名资深的程序员,今天我要给大家分享一些关于爬虫ip池的知识。关于ip代理池的问题,答案是肯定的,池子越大越好。下面跟我一起来盘点一下ip池大的好处吧! 1、提高稳定性 爬虫ip池越大,意味着拥有更多可用的爬虫ip…

大O表示法表示算法运行时间

大O表示法用来度量一个算法的运行时间。书写为O(n),其中n为一个算法所执行的操作次数。当我们讨论算法的运行时间时,说的是一个算法在给定的输入列表增加的情况下算法执行操作数的增速,也就是运行时间的增速。 二分查找算法 下面介绍两种简…

锐捷设备密码管理、密码恢复、恢复出厂设置

目录 配置登录用户名密码以及Enable密码 只需要密码登录 需要用户名和密码登录(无AAA) 需要用户名和密码登录(有AAA) 密码恢复 Web密码忘记 Telnet/SSH密码忘记 Console密码忘记 所有密码都忘记,通过Console进…

Java GUI,mybatis实现资产管理系统

Java GUI——资产管理系统 前言:为了做java课设,学了一手Java GUI。感觉蛮有意思的,写写文章,做个视频记录一下。欢迎大家友善指出我的不足 资产管理系统录制视频,从头敲到尾 模块划分 资产信息管理 资产信息查询 …

SpringBoot在线失物招领系统

一个基于SpringBootSemanticUI的pc Web在线失物招领系统 http://localhost:8080/swzl/index 主页 http://localhost:8080/swzl/login 登录页 用户表user admin字段为true是管理员 false用户 springboot2.3 springmvc mybatis html ajax idea 或eclipse maven mys…

【Linux进行时】进程概念

进程的概念 什么是进程呢? ❓首先我们需要认识一下什么叫进程呢? 课本概念:程序的一个执行实例,正在执行的程序等 🔥内核观点:担当分配系统资源(CPU时间,内存)的实体。…

SpringBoot06---前端路由VueRouter

单页面应用,意思是只有一个html,变化的内容是不同组件进行切换,每个组件加载网络请求,渲染对应的数据,这个内容就是学习怎么完成组件切换 以网易云音乐为例: 网易云音乐 (163.com) 现在无需注册&#xf…

springBoot的日志文件

日志是程序的重要组成部分,主要可以用来定位和排查问题。除此之外,还可以用来: 1. 记录用户的登录日志,方便分析用户是正常登录还是恶意破解; 2. 记录系统的操作日志,方便数据恢复和定位操作人;…

docker 安装elasticsearch、kibana

下载es镜像 docker pull elasticsearch 启动es容器 docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -d elasticsearch 验证es界面访问 ​​​​​http://节点ip:9200/ ​…

leetcode 416. 分割等和子集

2023.8.12 太难了ToT.... 一题做了一个下午。 本题是动规题目的0-1背包问题系列。将分割子集转化为 在nums数组中任取任意元素使其和等于总元素和的一半,即可满足题目条件。 1、使用一个bool型二维dp数组,dp[i][j] 的含义是:任取nums数组在索…

已有公司将ChatGPT集成到客服中心以增强用户体验

Ozonetel正在利用ChatGPT来改善客户体验。该公司表示,他们通过使用ChatGPT收集与客户互动过程收集的“语料”能够更有针对性地提高服务效率,提供个性化的用户体验,并实现更高的客户满意度。[1] 通过这套解决方案,客服中心将拥有一…

27.Netty源码之FastThreadLocal

highlight: arduino-light FastThreadLocal FastThreadLocal 的实现与 ThreadLocal 非常类似,Netty 为 FastThreadLocal 量身打造了 FastThreadLocalThread 和 InternalThreadLocalMap 两个重要的类。下面我们看下这两个类是如何实现的。 FastThreadLocalThread 是对…

c++文件流详细笔记

c++流 IO :向设备输入数据和输出数据 C++的IO流 设备: 文件控制台特定的数据类型(stringstream)c++中,必须通过特定的已经定义好的类, 来处理IO(输入输出) 文件流 文件流: 对文件进行读写操作 头文件: 类库: ifstream 对文件输入(读文件) ofstream 对文件输出(写…

idea中如何处理飘红提示

idea中如何处理飘红提示 在写sql时,总是会提示各种错误 查找资料,大部分都是说关提示,这里把错误提示选择为None即可 关掉以后,也确实不显示任何提示了,但总有一种掩耳盗铃的感觉 这个sms表明明存在,但是还…

深度学习常用的python库学习笔记

文章目录 数据分析四剑客Numpyndarray数组和标量之间的运算基本的索引和切片数学和统计方法线性代数 PandasMatplotlibPIL 数据分析四剑客 Numpy Numpy中文网 ndarray 数组和标量之间的运算 基本的索引和切片 数学和统计方法 线性代数 Pandas Pandas中文网 Matplotlib Mat…

MuMu模拟器运行一段时间后Device.Present耗时突然上升

1)MuMu模拟器运行一段时间后Device.Present耗时突然上升 2)​如何在运行过程中获得温度信息 3)Input System鼠标更换主按键的Bug 4)如何禁止Unity向https://config.uca.cloud.unity3d.com发送设备信息 这是第347篇UWA技术知识分享…

Leetcode-每日一题【剑指 Offer 26. 树的子结构】

题目 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B: 4 / 1 返回 true&#xff0…

C++笔记之静态成员函数的使用场景

C笔记之静态成员函数的使用场景 C静态成员函数的核心特点是不与特定类实例相关,可通过类名直接调用,用于执行与类相关的操作而无需创建类对象。其主要用途是在类级别上共享功能,管理全局状态或提供工具函数。 code review! 文章目录 C笔记之…

悬崖传感器调试问题总结

悬崖传感器原理 使用ADC采样电路,周期的进行开/关灯,获取ADC采样值。根据预先设置好ADC门限,判断是否为悬崖。ADC的精度是12位,对应电路的电压是3.3伏,悬崖传感器通过开灯和关灯,接收的不同灯光强度&#x…

[数据集][目标检测]道路坑洼目标检测数据集VOC格式1510张2类别

数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1510 标注数量(xml文件个数):1510 标注类别数:2 标注类别名称:["keng","…