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

文章目录

    • 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。‎

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

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

相关文章

AP2915DC-DC降压恒流驱动IC LED电源驱动芯片 汽车摩托电动车灯

AP2915 是一款可以一路灯串切换两路灯串的降压 恒流驱动器,高效率、外围简单、内置功率管,适用于 5-80V 输入的高精度降压 LED 恒流驱动芯片。内置功 率管输出功率可达 12W,电流 1.2A。 AP2915 一路灯亮切换两路灯亮,其中一路灯亮可 以全亮&a…

Dedecms V110最新版RCE---Tricks

前言 刚发现Dedecms更新了发布版本,顺便测试一下之前的day有没有修复,突然想到了新的tricks去实现RCE。 文章发布的时候估计比较晚了,一直没时间写了。 利用 /uploads/dede/article_string_mix.php /uploads/dede/article_template_rand.…

《人工智能大模型体验报告2.0》发布

ChatGPT 崛起引发新一轮生成式AI热潮,国内科技企业纷纷布局。据不完全统计,截至目前,国内大模型数量已达上百个。在这些大模型中,谁的表现最好,智能性最高,用户体验最强?8月12日,新华…

科研经费的来源有哪些?

目前,高校在我国科技创新中发挥着越来越重要的作用,自然高校获得经费也越来越多。一所高校的科研经费充足,越有利于科研学术水平的提高。那么科研经费的来源有哪些呢? 1. 国家拨款 对于高校的科研发展享有国家的重点支持。近年来…

C语言笔试训练【第12天】

文章目录 1、请阅读以下程序,其运行结果是( )2、假设编译器规定 int 和 short 类型长度分别为32位和16位,若有下列C语言语句,则 y 的机器数为( )3、下列程序的输出结果是什么( &…

【C++面向对象】--- 继承 的奥秘(下篇)

个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

印度货代专线【我国到印度专线有哪些方式】

随着全球贸易的不断发展,我国与印度之间的贸易往来也日益频繁。作为两个人口最多的国家之一,中国和印度之间的货物运输需求不断增长。为了满足这一需求,印度货代专线应运而生,为进出口商提供高效、可靠的货物运输服务。本文将探索…

docsify gitee 搭建个人博客

docsify & gitee 搭建个人博客 文章目录 docsify & gitee 搭建个人博客1.npm 安装1.1 在Windows上安装npm:1.2 在macOS上安装npm:1.3 linux 安装npm 2. docsify2.1 安装docsify2.2 自定义配置2.2.1 通过修改index.html,定制化开发页面…

【Linux】—— 进程程序替换

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

uni-app之app上传pdf类型文件

通过阅读官方文档发现,uni.chooseFile在app端不支持非媒体文件上传; 可以使用这个插件,验证过可以上传pdf;具体使用可以去看文档 插件地址 就是还是会出现相机,这个可能需要自己解决下 实现功能:上传只能上…

Redis——Redis.conf详解+Redis持久化(RDB和AOF)+Redis订阅发布

配置文件 redis启动时通过配置文件启动 原生配置文件全文在网上随便搜索一下就能找到了。 单位 配置文件 unit单位 对大小写不敏感 包含 类比import,将其他的配置文件引入 网络 bind 127.0.0.1 // 绑定ip protected-mode yes //是否受保护 po…

【调整奇数偶数顺序】

调整奇数偶数顺序 1.题目 输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。 2.题目分析 这道题首先用到的方法是冒泡排序的思想,首先通过冒泡排序…

Prometheus的搭建与使用

一、安装Prometheus 官网下载地址:Download | Prometheus 解压:tar -zxvf prometheus-2.19.2.linux-amd64.tar.gz重命名: mv prometheus-2.19.2.linux-amd64 /home/prometheus进入对应目录: cd /home/prometheus查看配置文件&am…

微服务与Nacos概述-5

引入OpenFeign 添加依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>com.alibaba.cloud</groupId>…

【Windows 常用工具系列 8 -- 修改鼠标光标(指针)大小和颜色的快速方法方法】

文章目录 修改方法 上篇文章&#xff1a;Windows 常用工具系列 7 – 禁用win10自带的微软输入法 修改方法 Win键 i 快捷键进入设置页面&#xff0c;然后输入光标... 就会跳出修改鼠标大小与光标颜色的选项。 Win键是在计算机键盘左下角Ctrl和Alt键之间的按键 根据自己的需求…

浏览器 - 事件循环机制详解

目录 1&#xff0c;浏览器进程模型进程线程浏览器的进程和线程1&#xff0c;浏览器进程2&#xff0c;网络进程3&#xff0c;渲染进程 2&#xff0c;渲染主线程事件循环异步同步 JS 为什么会阻塞渲染任务优先级 3&#xff0c;常见面试题1&#xff0c;如何理解 js 的异步2&#x…

210、仿真-基于51单片机灭火小车超声波避障温度烟雾控制报警Proteus仿真设计(程序+Proteus仿真+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&a…

java面试题(16):Mysql一致性视图是啥时候建立的

1 演示错误案例 先给大家来一个错误演示。 我们打开两个会话窗口&#xff0c;默认情况下隔离级别是可重复读&#xff0c;我们来看下&#xff1a; 首先在 A 会话中查看当前 user 表&#xff0c;查看完成后开启事务&#xff1a; 可以看到id3的数据sex是男。 接下来在 B 会话中…

全面梳理Python下的NLP 库

一、说明 Python 对自然语言处理库有丰富的支持。从文本处理、标记化文本并确定其引理开始&#xff0c;到句法分析、解析文本并分配句法角色&#xff0c;再到语义处理&#xff0c;例如识别命名实体、情感分析和文档分类&#xff0c;一切都由至少一个库提供。那么&#xff0c;你…

LeetCode ACM模式——二叉树篇(二)

刷题顺序及思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 二叉树的定义及创建见&#xff1a; LeetCode ACM模式——二叉树篇&#xff08;一&#xff09;_要向着光的博客-CSDN博客 目录 102. 二叉树的层序遍历 利用队列 利用递归 10…