分布式 - 服务器Nginx:一小时入门系列之负载均衡

news2024/12/24 3:35:39

文章目录

    • 1. 负载均衡
    • 2. 负载均衡策略
      • 1. 轮询策略
      • 2. 最小连接策略
      • 3. IP 哈希策略
      • 4. 哈希策略
      • 5. 加权轮询策略

1. 负载均衡

跨多个应用程序实例的负载平衡是一种常用技术,用于优化资源利用率、最大化吞吐量、减少延迟和确保容错配置。‎使用 nginx 作为非常有效的HTTP负载平衡器,将流量分配到多个应用程序服务器,可以提升Web应用程序的性能,提高扩展性和可靠性。

在这里插入图片描述

使用 upstream定义一组服务 。

# 启动ruoyi-admin服务
[root@nginx-dev conf.d]# cd /home/apps
[root@nginx-dev apps]# java -jar ruoyi-admin.jar

# 启动tomcat服务
[root@nginx-dev ~]# /home/apache-tomcat-8.5.81/bin/startup.sh

# 在 /etc/nginx/conf.d文件夹下添加nginx配置文件:8003.conf
[root@nginx-dev ~]# cd /etc/nginx/conf.d
[root@nginx-dev conf.d]# vi 8003.conf   
[root@nginx-dev conf.d]# nginx -s reload

8003.conf 配置文件内容:

upstream ruoyi-apps {
    #不写,采用轮循机制
    server localhost:8080;
    server localhost:8088;
}

server {
    listen 8003;
    server_name ruoyi.loadbalance;

    location / {
        proxy_pass http://ruoyi-apps;
    }
    
    # 请求ie页面
    location = /html/ie.html {
        root  /some/path/static;
    }

    # 请求字体文件
    location ^~ /fonts/ {
        root  /some/path/static;
    }

    # css|js|png|jpg|gif|ico 页面
    location ~ \.(css|js|png|jpg|gif|ico) {
        root /some/path/static;
    }  
}

2. 负载均衡策略

1. 轮询策略

upstream ruoyi-apps {
    #不写,采用轮循机制
    server localhost:8080;
    server localhost:8088;
}

轮询策略(Round Robin):默认的负载均衡策略,将请求依次分配给每个后端服务器,循环往复。

例如,当请求 nginx 的 8003 端口时,会将请求轮询转发给 tomcat 和 ruoyi-admin 两个后端服务器,即第1次请求会访问8080端口,第2次请求会访问8088端口,循环往复。

当访问 nginx 的 8003 端口时 ,请求会进入 8088 端口的 ruoyi-admin 服务,当填写完密码以后点击登录,这次请求会进入 8080 端口的 tomcat 服务,因此总是登录不成功。

在这里插入图片描述

2. 最小连接策略

最少连接策略(Least Connections):将请求分配给当前连接数最少的后端服务器,以达到负载均衡的目的。

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}

请注意,使用轮循机制或最少连接的负载平衡,每个客户端的请求都可能分发到不同的服务器。不能保证同一客户端将始终定向到同一服务器。‎

3. IP 哈希策略

IP 哈希策略(IP Hash):根据客户端 IP 地址的哈希值来选择后端服务器,同一个客户端的请求总是被分配到同一个后端服务器上。

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

此方法可确保来自同一客户端的请求将始终定向到同一服务器,除非此服务器不可用。

4. 哈希策略

通用hash,允许用户自定义hash的key,key可以是字符串、变量或组合。例如,key可以是配对的源 IP 地址和端口,也可以是 URI,如以下示例所示:‎

upstream backend {
    hash $request_uri consistent;
    server backend1.example.com;
    server backend2.example.com;
}

请注意:基于 IP 的哈希算法存在一个问题,那就是当有一个上游服务器宕机或者扩容的时候,会引发大量的路由变更,进而引发连锁反应,导致大量缓存失效等问题。

假设我们基于 key 来做 hash,现在有 4 台上游服务器,如果 hash 算法对 key 取模,请求根据用户定义的哈希键值均匀分布在所有上游服务器之间。当有一台服务器宕机的时候,就需要重新对 key 进行 hash,最后会发现所有的对应关系全都失效了,从而会引发缓存大范围失效。

在这里插入图片描述

consistent参数启用 ‎‎ketama‎‎ 一致哈希算法,如果在上游组中添加或删除服务器,只会重新映射部分键,从而最大限度地减少缓存失效。‎

在这里插入图片描述

5. 加权轮询策略

加权轮询策略(Weighted Round Robin):根据后端服务器的权重来分配请求,权重越高的服务器被分配到的请求越多。

upstream my-server {
    server performance.server weight=3;
    server app1.server;
    server app2.server;
}

如上所示,每 5 个新请求将按如下方式分布在应用程序实例中:3 个请求将定向到 performance.server,一个请求将转到 app1.server,另一个请求将转到 app2.server。‎

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

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

相关文章

关于Power Query中一些忽略的细节

Power Query中一些忽略的细节 重新认识Power Query查询的引用----提高数据加载效率透视逆透视----一对“好朋友”神奇的拼接----实现很多意想不到的操作 重新认识Power Query 关于它的定义,这里不再赘述,主要说一些新的理解。 Power Query 可以理解就是一…

一个简单的协议定制

目录 补充概念:三次握手,四次挥手 再谈协议 网络版计算器 准备工作 makefile log.hpp calServer.hpp calServer.cc calClient.hpp calClient.cc 服务端 新建文件与接口 Protocol.hpp 1.0服务端的一个流程 1.1创建一个回调方法 1.2保证你…

【vue3+xlxs+xlsx-style-vite】vue3项目中使用xlsx插件实现Excel表格的导出和解析,已实现

在vue3项目中使用xlsx插件实现Excel表格的导出和解析 1、xlsx插件包官方 xlsx插件包官方 2、FileReader官方文档:FileReader官方文档 安装xlsx和xlsx-style-vite、file-saver npm install xlsx npm install xlsx-style-vite npm install file-saverpackage.json中查…

【C语言】小游戏-扫雷(清屏+递归展开+标记)

大家好&#xff0c;我是深鱼~ 目录 一、游戏介绍 二、文件分装 三、代码实现步骤 1.制作简易游戏菜单 2. 初始化棋盘(11*11) 3.打印棋盘(9*9) 4.布置雷 5.计算(x,y)周围8个坐标的和 6.排查雷 <1>清屏后打印棋盘 <2>递归展开 <3>标记雷 四、完整代…

Open_MV学习笔记1:开发环境获取

稍微学点计算机视觉相关吧&#xff0c;从今天开始浅浅地学习一下Open_MV&#xff0c;以及回忆一下Python编程相关&#xff0c;Open_mv编程需要用到Python&#xff0c;因此设俩个专栏&#xff1a;Open_mv专栏与Python的专栏&#xff0c;大家可以与我一起&#xff0c;在俩者之间跳…

电脑-C盘结构

一 缓存文件 winR 输入%temp% 就会进入到电脑缓存目录 这里面的东西都可以删除 主要目录在User/xxx/AppData\Local\Temp 二 临时文件 C盘右键&#xff0c;详细信息 三 桌面文件 文件类型 program data表示是游戏存档/系统/软件的配置文件 drivers文件表示驱动程序文件 s…

js this变量

js this变量 有个比较特殊的箭头函数没有自己的this&#xff0c;而是继承了外部作用域的this

VBA技术资料MF43:VBA_Excel中自动填充

【分享成果&#xff0c;随喜正能量】以时寝息&#xff0c;当愿众生&#xff0c;身得安隐&#xff0c;心无动乱。愿我们都能&#xff0c;梦见幸福&#xff01;在踉跄中前进&#xff0c;在跌倒后跃进&#xff0c;逐渐强大.。 我给VBA的定义&#xff1a;VBA是个人小型自动化处理的…

吃鸡绝地求生游戏找不到msvcp140.dll缺失打不开怎么办?

msvcp140.dll是Microsoft Visual C Redistributable的一部分&#xff0c;它是一个重要的动态链接库文件&#xff0c;包含了许多用于运行依赖于Visual C的应用程序所需的函数和类。当运行依赖于Visual C的应用程序时&#xff0c;系统会自动加载和使用msvcp140.dll文件。当电脑系…

电脑出现msvcr100.dll丢失错误怎么办?

msvcr100.dll它是一个动态链接库文件&#xff0c;包含了许多用于运行依赖于Visual C的应用程序所需的函数和类。当运行依赖于Visual C的应用程序时&#xff0c;系统会自动加载和使用msvcr100.dll文件。当系统提示msvcr100.dll文件丢失时&#xff0c;可能会导致一些应用程序无法…

时序预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元时间序列预测

时序预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现WOA-CNN-BiGRU鲸…

怎样让音频速度变慢?请跟随以下方法进行操作

怎样让音频速度变慢&#xff1f;在会议录音过程中&#xff0c;经常会遇到主讲人语速过快&#xff0c;导致我们无法清晰听到对方说的内容。如果我们能够减慢音频速度&#xff0c;就能更好地记录对方的讲话内容。此外&#xff0c;在听到快速播放的外语或方言时&#xff0c;我们也…

部署工业物联网可以选择哪些通信方案?

部署工业物联网有诸多意义&#xff0c;诸如提升生产效率&#xff0c;降低管理成本&#xff0c;保障生产品质稳定&#xff0c;应对长期从业劳动力变化趋势等。针对不同行业、场景&#xff0c;工业物联网需要选择不同的通信方案&#xff0c;以达到成本和效益的最佳平衡。本篇就简…

12 正则表达式 | HTTP协议相关介绍

文章目录 正则表达式re模块最基础操作&#xff08;匹配开头&#xff09;匹配单个字符匹配多个字符匹配开头结尾匹配分组对于group的理解r的作用re 模块高级用法compilesearchfindall易错点 sub直接替换函数替换 split 根据匹配进行切割字符串&#xff0c;并返回一个列表 python…

【Android Framework (十二) 】- 智能硬件设备开发

文章目录 前言智能硬件的定义与应用智能硬件产品开发流程智能硬件开发所涉及的技术体系概述关于主板选型主板CPU芯片的选择关于串口通信 总结 前言 针对我过往工作经历&#xff0c;曾在一家智能科技任职Android开发工程师&#xff0c;简单介绍下关于任职期间接触和开发过的一些…

文心一言 VS 讯飞星火 VS chatgpt (76)-- 算法导论7.3 1题

一、如果用go语言&#xff0c;为什么我们分析随机化算法的期望运行时间&#xff0c;而不是其最坏运行时间呢? 文心一言&#xff1a; 在分析算法的性能时&#xff0c;期望运行时间是一个重要的指标&#xff0c;它描述了算法在平均情况下的表现。期望运行时间考虑了所有可能的…

【Linux】—— 进程程序替换

目录 序言 &#xff08;一&#xff09;替换原理 1、进程角度——见见猪跑 1️⃣ 认识 execl 函数 2、程序角度——看图理解 &#xff08;二&#xff09;替换函数 1、命名理解 2、函数理解 1️⃣execlp 2️⃣execv 3️⃣execvp 4️⃣execle 5️⃣execve 6️⃣execve…

【C++】C++入门基础详解(1)

本篇内容要分享的是C的基础内容&#xff0c;C的诞生简单的说就是为了填补C语言中的语法坑&#xff0c;同时对比C语言来说增添很多便捷的语法规则&#xff0c;使用起来比C语言便捷不少&#xff0c;但是学习难度也大大增强&#xff0c;不过难度是成线性增长&#xff0c;可以一步一…

编译工具:CMake(三)| 最简单的实例升级

编译工具&#xff1a;CMake&#xff08;三&#xff09;| 最简单的实例升级 前言过程语法解释ADD_SUBDIRECTORY 指令 如何安装目标文件的安装普通文件的安装&#xff1a;非目标文件的可执行程序安装(比如脚本之类)目录的安装 修改 Helloworld 支持安装测试 前言 本篇博客的任务…