web群集--nginx常见的几种负载均衡调度算法的配置过程和效果展示

news2024/12/26 0:15:05

文章目录

  • 前言
    • 环境
    • 前置配置
      • httpd主机
      • tomcat主机
    • 负载均衡调度算法
      • 1.轮询
        • 配置过程
        • 效果展示
      • 2.加权轮询
        • 配置过程
        • 效果展示
      • 3. IP哈希(IP Hash)
        • 配置过程
        • 效果展示
      • 4. 最少连接(Least Connections)
        • 配置过程
        • 效果展示
      • 5.加权最小连接
        • 这个在这里详细说明一下
        • 配置过程
        • 效果展示
  • 总结


前言

Nginx 作为一款广泛使用的开源 HTTP 和反向代理服务器,不仅以其高性能和灵活性著称,还因其强大的负载均衡能力受到青睐。负载均衡是 Nginx 的核心功能之一,通过将客户端请求分发到多个后端服务器上,优化资源使用、提升应用性能。本文将深入探讨 Nginx 支持的几种主要调度算法,帮助您更好地理解如何利用这些算法实现高效的负载均衡。

nginx相关博客,感兴趣的可以看看
链接: web群集–rocky9.2源码部署nginx1.24的详细过程
链接: nginx的基本使用示例(负载均衡,虚拟主机,动静分离)的详细配置过程

环境

系统ip应用web页面内容
rocky9.2192.168.10.11nginx1.24
rocky9.2192.168.10.12httpdweb1
rocky 9.2192.168.10.13tomcatweb2

前置配置

nginx源码安装请看
链接: web群集–rocky9.2源码部署nginx1.24的详细过程

httpd主机

安装httpd

yum -y install httpd
systemctl enable httpd
systemctl start httpd

配置访问页面
使用yum安装的httpd默认页面目录为/var/www/html/

echo "httpd is running" > /var/www/html/index.html

随后能访问到即可
在这里插入图片描述

tomcat主机

使用yum安装并启动tomcat

yum -y install tomcat 
systemctl enable tomcat
systemctl start tomcat

使用yum安装的tomcat默认没有web页面,如果想要获取默认的web页面,可以执行以下操作

yum -y install tomcat-webapps tomcat-admin-webapps

这里我们自己创建页面文件即可

mkdir /usr/share/tomcat/webapps/ROOT
echo "tomcat is running" > /usr/share/tomcat/webapps/ROOT/index.html

最后能访问到即可
在这里插入图片描述

负载均衡调度算法

1.轮询

轮询是最简单也是最常用的负载均衡算法。其基本原理是将请求依次分发给每一台后端服务器,直到所有服务器都处理完请求后,重新从第一台服务器开始分配。这种方法不考虑服务器的当前负载或健康状态,仅按顺序处理。

优点: 实现简单,易于配置,适用于负载均衡要求较低的环境。

缺点: 不考虑服务器的实际负载,可能导致资源使用不均。

配置过程

        upstream web {
        server 192.168.10.12:80;
        server 192.168.10.13:8080;
}

    server {
        listen       80;
        server_name  localhost;
        location / {
                proxy_pass http://web;
        

注: 配置在http块里
我这里是更改了默认server块的配置,如果新加server块,注意不要重叠

重启nginx

systemctl restart nginx
效果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.加权轮询

加权轮询算法在轮询的基础上引入了权重的概念。每台服务器根据其权重值接收请求,权重较高的服务器会处理更多的请求。这种方法适用于服务器性能不均的情况,通过设置不同的权重来实现负载的合理分配。

优点: 允许根据服务器的性能调整请求分配,灵活性较高。

缺点: 需要为每台服务器配置合适的权重,权重设置不准确可能导致负载不均。

配置过程

        upstream web {
        server 192.168.10.12:80 weight=2;
        server 192.168.10.13:8080 weight=1;
}

    server {
        listen       80;
        server_name  localhost;
        location / {
                proxy_pass http://web;
        
效果展示

在这里插入图片描述

3. IP哈希(IP Hash)

IP哈希算法通过计算客户端 IP 地址的哈希值,将请求分配给特定的服务器。这样,相同 IP 地址的请求将始终被分配到同一台服务器上,确保会话的粘性(session persistence)。

优点: 适用于需要保持用户会话的一致性场景,如需要会话粘性的应用。

缺点: 当服务器发生变化时,可能会导致请求的分布不均。

配置过程

        upstream web {
        ip_hash;
        server 192.168.10.12:80;
        server 192.168.10.13:8080;
}

    server {
        listen       80;
        server_name  localhost;
        location / {
                proxy_pass http://web;
        
效果展示

在这里插入图片描述
效果不太明显,简单来说就是有会话保持的特点

4. 最少连接(Least Connections)

最少连接算法将请求分配给当前连接数最少的服务器。这种方法动态地调整请求分配,适合负载波动较大的场景。它有助于平衡负载,并最大化服务器资源的利用。

优点: 更动态地处理负载,有助于避免服务器过载。

缺点: 如果服务器性能差异很大,可能会导致负载分配不均。

配置过程

        upstream web {
        least_conn;
        server 192.168.10.12:80;
        server 192.168.10.13:8080;
}

    server {
        listen       80;
        server_name  localhost;
        location / {
                proxy_pass http://web;
效果展示

这个效果也不太明显,这里我是两台同时访问的,可以看看这个效果
在这里插入图片描述
在这里插入图片描述

5.加权最小连接

这个在这里详细说明一下

加权最少连接(Weighted Least Connections)算法是一种结合了服务器权重和当前连接数的负载均衡策略。它通过考虑服务器的性能权重来决定请求的分配,旨在优化资源使用和提高系统性能。具体而言,这种算法优先将请求分配给连接数较少且权重较高的服务器,从而实现更智能和均衡的负载分配。

需要注意的是,Nginx 本身不直接支持加权最少连接算法,但可以通过结合权重和最小连接数的配置来实现类似的效果。

加权最少连接的工作原理
加权最少连接算法的工作原理可以概括为以下步骤:

计算加权连接数:对于每台服务器,计算其当前连接数和权重的比值。公式为:
加权连接数 = 当前连接数 / 权重

选择最小值:将请求分配给加权连接数最小的服务器。即,选择具有最少加权连接数的服务器来处理请求。

让我们来举个例子
假设有三个服务器,它们的当前连接数和权重分别如下:
服务器 A: 当前连接数 = 10, 权重 = 5
服务器 B: 当前连接数 = 20, 权重 = 10
服务器 C: 当前连接数 = 15, 权重 = 2

我们可以计算它们的加权连接数:
服务器 A: 加权连接数 = 10 / 5 = 2
服务器 B: 加权连接数 = 20 / 10 = 2
服务器 C: 加权连接数 = 15 / 2 = 7.5

根据这些加权连接数,负载均衡系统会选择加权连接数最小的服务器来处理新的请求。在这个例子中,服务器 A 和服务器 B 的加权连接数相同,但服务器 A 的连接数较少,因此它可能会被优先选择。

配置过程

        upstream web {
        least_conn;
        server 192.168.10.12:80 weight=2;
        server 192.168.10.13:8080 weight=1;
}

    server {
        listen       80;
        server_name  localhost;
        location / {
                proxy_pass http://web;
效果展示

这个效果也不太明显,这里我是三台同时访问的,可以看看这个效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

总结
在本文中,讲述了Nginx 常见的几种负载均衡调度算法,包括:

轮询(Round Robin):
轮询是一种简单且常见的负载均衡算法,它会依次将请求分配给每台服务器。适用于负载相对均衡的场景,但对于连接数或处理能力不均衡的服务器,可能会导致负载不均衡。

加权轮询(Weighted Round Robin):
加权轮询算法通过为每台服务器分配权重来进行负载均衡。服务器的权重决定了其接收请求的比例,适用于服务器性能差异较大的场景,但不考虑服务器当前的负载。

IP Hash:
根据客户端的 IP 地址将请求固定分配到特定的服务器。适用于需要会话保持的场景,例如用户需要始终与同一台服务器交互的应用场景。它可以提供更一致的用户体验,但可能导致负载不均衡。

最少连接(Least Connections):
最少连接算法将请求分配给当前连接数最少的服务器。这种算法适用于连接数变化较大的场景,可以有效地防止单台服务器过载,但可能不考虑服务器性能差异。

加权最少连接(Weighted Least Connections):
加权最少连接算法结合了服务器的权重和当前连接数,以更智能的方式分配请求。这种算法在考虑服务器性能差异的同时,也平衡了当前的负载。

每种算法都有其优点和适用场景,选择合适的负载均衡算法可以显著提高系统的性能和稳定性。在实际应用中,除了选择合适的负载均衡算法,还需要综合考虑服务器性能、网络延迟以及请求的特性等因素。

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

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

相关文章

实时备份工具

实时同步工具 1. 常用实时同步工具1.1 sersync1.2 inotify-tools1.3 ‌lsync‌ 2. 工具对比2.1 常用实时同步工具对比2.2 ‌sersync和lsyncd对比 3. 实践3.1 sersync1. 简易架构2. 服务器3. 搭建简易web服务器4. 配置NFS服务器5. 配置备份服务器6. 实时同步部分7. 验证 1. 常用…

穿越机的应用行业!!!

1. 军事领域 侦察与目标搜索:穿越机能够快速穿越危险区域,执行侦察任务,实时获取战场信息,对敌方目标进行精确搜索和定位。其灵活性和机动性使其成为战场上的重要侦察工具。 目标摧毁:经过改装的穿越机可挂载火箭弹或…

重磅活动!南开大学赵宏教授倾情分享AI挑战下的教育教学新理念与新方法

人工智能是科技发展的前沿领域,也是推动新质生产力形成的关键动力。当前,各个高校正积极探索人工智能对高等教育的改革,以培养适应未来社会发展需求的新型人才。 本次活动旨在传播 AI 挑战下的教育教学新理念与新方法,推动人才培养…

常见echart图表 返回数据与Java实体类

返回数据示例详见 Examples - Apache ECharts 一、折线图 实体类 public class LineChart {String name;List<BaseSeries> series;List<String> xAxis; }public class BaseSeries {String name;Double[] data; } 二、柱状图 实体类 public class Chart {String…

深度解析Linux系统的基本概念及优缺点和原理

目录 基本概念 操作系统简介 架构组成 多任务处理 安全性与开放性 发行版本 使用场景 学习资源 优点 缺点 1. 软件兼容性问题 2. 图形界面应用程序较少 3. 安装和配置复杂 4. 学习曲线陡峭 5. 缺乏技术支持 6. 硬件兼容性问题 7. 安全风险 8. 性能问题 9. 游…

数据结构代码集训day16(适合考研、自学、期末和专升本)

本题来自B站up&#xff1a;白话拆解数据结构 今日题目就一个&#xff1a;约瑟夫环问题。 一个圈共有N个人&#xff08;N为不确定的数字&#xff09;&#xff0c;第一个人的编号为0或者1&#xff08;两个都可以&#xff0c;看你的程序如何编写&#xff09;&#xff0c;假设这边我…

提升App推广效果,从精准获取下载数据开始

在App推广的过程中&#xff0c;获取准确的下载数据一直是一个令人头疼的问题。你知道吗&#xff1f;无法精确追踪用户来源和下载量&#xff0c;就像是在黑暗中摸索&#xff0c;让推广效果大打折扣。今天&#xff0c;我们就来揭秘如何轻松获取App下载数据&#xff0c;优化你的推…

解题--有关动态内存开辟 几道经典的笔试题

文章目录 前言 一、题目一 二、题目二 三、题目三 四、题目四 总结 前言 路漫漫其修远兮&#xff0c;吾将上下而求索。 一、题目一 运行Test 函数会出现什么样的结果&#xff1f; 在Test函数之中&#xff0c;首先创建了一个指针变量 str , 并将其赋值为NULL&#xff1b; …

查看HBA卡是否支持FC协议

cat /sys/class/fc_host/host*/port_name lspci | grep -i fibre # 看有无fibre channel控制器 官网查询 Emulex Lpe32000 https://docs.broadcom.com/doc/12357773 https://cn.genuinemodules.com/image/catalog/pdf/18/LPe32000.pdf

Python【2】问题

目录 模块与包是什么&#xff1f; 赋值、浅拷贝和深拷贝的区别&#xff1f; Python中如何生成随机数&#xff1f; Python中的os模块常用方法&#xff1f;□ os.path和sys.path分别表示什么意思&#xff1f;□ 赋值 read、readline和readlines的区别&#xff1f; 介绍一…

vTESTstudio系列13--vTESTstudio中的动态函数库介绍3

在上一篇文章中&#xff08;vTESTstudio系列12--vTESTstudio中的动态函数库介绍2&#xff09;&#xff0c;给大家介绍了如何通过osek_tp.dll的接口去发送诊断指令&#xff0c;本篇文章给大家介绍如何去处理诊断回复内容&#xff0c;确保实际的诊断回复是符合需求。Lets Go!!! …

Java项目: 基于SpringBoot+mysql在线文档管理系统(含源码+数据库+开题报告+答辩PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql在线文档管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功…

VScode:前端开发中的常用快捷键和技巧

1.菜单栏 2.内容相关&#xff1a; 格式化文档 搜索文件名

海外盲盒APP系统开发,盲盒全球化发展机遇

盲盒全球化 近几年&#xff0c;盲盒在海外市场中迎来了爆发式增长&#xff0c;成为了一种新的潮流&#xff0c;拥有极高的人气&#xff0c;盲盒出海也已经成为了一个大风口&#xff0c;为我国盲盒市场带来了商业机遇&#xff01;在盲盒出海的热潮下&#xff0c;海外盲盒APP系统…

相亲交友系统开发中的关键要素

相亲交友系统开发旨在构建一个在线平台&#xff0c;专为单身人士设计&#xff0c;以促进他们寻找合适的伴侣或朋友。以下是该系统开发的关键要素&#xff1a; 用户账户管理&#xff1a;允许用户创建账户&#xff0c;进行注册和登录&#xff0c;以便他们能够建立个人资料并参与…

01:【铁头山羊stm32-HAL库】对GPIO的操作

对GPIO的操作 1、LED闪烁2、按键控制LED3、芯片调试接口被锁死导致无法下载程序 1、LED闪烁 使用的是STM32CubeMXKeilv5进行HAL库的开发。 开发的步骤&#xff1a; 第一步&#xff1a;新建工程 第二步&#xff1a;选择芯片 第三步&#xff1a;如下图哈哈 第四步&#xff1a;…

图像去噪实验:基于全变分(TV)模型的MATLAB实现

一、背景 全变分模型在图像处理领域中被广泛用于去除噪声&#xff0c;同时保持图像边缘的清晰度。 二、实验步骤 图像的读取、噪声添加、去噪处理以及结果的显示。 三、实验仿真结果图 四、结论 全变分模型是一种有效的图像去噪方法&#xff0c;它能够在去除噪声的同时&#…

shell脚本的变量与应用

Shell脚本是一种解释性语言&#xff0c;用于编写自动化任务和系统管理脚本。在Shell脚本中&#xff0c;变量用于存储和操作数据。变量在脚本中可以被赋值、读取和修改。 在shell脚本中&#xff0c;变量用于存储数据&#xff0c;可以是数字、字符串或其他类型的值。可以使用…

基于yolov8的道路病害道路裂缝道路坑洞检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的道路病害检测系统&#xff0c;特别是针对道路裂缝和坑洞的检测&#xff0c;是一种高效、准确的智能解决方案。该系统利用YOLOv8这一先进的深度学习算法&#xff0c;通过深度神经网络对图像进行特征提取和分类&#xff0c;实现对道路病害的实时检测和…

期权会不会爆仓?如果期权亏了,会亏到倒欠吗?!

今天带你了解期权会不会爆仓&#xff1f;如果期权亏了&#xff0c;会亏到倒欠吗&#xff1f;&#xff01;期权作为一种金融衍生工具&#xff0c;已经被广大的投资者所接受&#xff0c;并广泛地应用于风险管理等诸多领域。 期权会爆仓吗&#xff1f; 对于期权而言&#xff0c;…