【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 的核心组件。它负责接收监控数据并触发告警,还负责将监控数…

Leetcode

持续更新中。。。。。。。。。。。。。。 day 20230811 /*** 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。* <p>* 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和* <p>* 不包括 相交的元素只计算一次* <p>* 输入&…

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

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

Java项目初始化ES、MYSQL表结构及表数据

一、初始化MYSQL数据 public boolean initMysql() throws Exception {log.info("initMysql.start");//获取所连接的数据库名称String database systemMapper.getDatabase();if (StringUtils.isBlank(database)) {throw new BusinessException("连接数据库失败,…

微信小程序时钟

微信小程序自定义时钟&#xff0c;模拟翻牌时钟。1、页面布局 <view class"date-time-box"><view class"date-box">{{nowDate}}</view><view class"time-box"><view><image class"pic01 {{move[0]?move…

代码随想录算法训练营第45天|动态规划part07

8.11 周五 70. 爬楼梯 &#xff08;进阶&#xff09; 322. 零钱兑换 279.完全平方数 详细布置 70. 爬楼梯 &#xff08;进阶&#xff09; 题目&#xff1a;一次可爬1或2个台阶&#xff0c;问n个台阶有多少种方式 题解&#xff1a; 1、转换为完全背包问题&#xff0c;nums[1…

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

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

Vc - Qt - QToolButton

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

webpack 热更新的实现原理

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

uniapp点击输入框时键盘不上推页面

adjust-position设置为false&#xff0c;然后监听键盘的高度赋值给输入框bottom 这里还一个非常重要的地方&#xff0c;在根元素设置touchmove.stop.prevent&#xff0c;这样在ios上页面就不会滚动&#xff0c;不影响其他组件内部滚动 onReady() {// 监听键盘高度变化&#x…

Redis集群 (三十九)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、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…

confluent-kafka 和kafka-python操作kafka,并封装成一个类

为了向Kafka集群生产和消费消息&#xff0c;我们可以使用confluent-kafka库&#xff0c;它是Confluent为Python提供的官方Kafka客户端。以下是一个简化的示例&#xff0c;展示如何将Kafka的生产者和消费者操作封装到一个类中&#xff1a; 首先&#xff0c;确保你已经安装了所需…

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

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

form表单构造http请求的写法

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

批量将excel文件合并

要批量合并多个Excel文件&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 导入所需的Python库&#xff1a;首先&#xff0c;您需要导入pandas库来处理Excel文件。 import pandas as pd 2. 定义文件路径和输出文件名称&#xff1a; input_folder "your_input_fo…

如何在Vue中实现模板渲染优化?什么是Vue的双向数据绑定原理?

1、如何在Vue中实现模板渲染优化&#xff1f; 在Vue中实现模板渲染优化&#xff0c;有以下几个方法&#xff1a; 使用计算属性&#xff08;computed properties&#xff09;代替方法&#xff08;methods&#xff09;&#xff1a;计算属性会在首次渲染时进行计算&#xff0c;并…

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

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

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

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

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

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