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

文章目录


前言

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

nginx相关博客,感兴趣的可以看看

链接: web群集--rocky9.2源码部署nginx1.24的详细过程

链接: nginx的基本使用示例(负载均衡,虚拟主机,动静分离)的详细配置过程

环境

系统 ip 应用 web页面内容
rocky9.2 192.168.10.11 nginx1.24
rocky9.2 192.168.10.12 httpd web1
rocky 9.2 192.168.10.13 tomcat web2

前置配置

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):

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

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

相关推荐
Adorable老犀牛1 分钟前
Telegraf:InfluxData 出品的指标采集代理
运维·telegraf
小蒋学算法2 分钟前
算法-阶乘函数后K个零
算法
weixin_307779138 分钟前
智能模拟数据生成平台:生成式AI合成数据技术重塑开发测试效能
人工智能·测试工具·算法·测试用例
北塔软件12 分钟前
北塔软件智能体平台 | 不只监控,更是AI时代的数据资产
运维·人工智能·知识库·北塔软件
AOwhisky1 小时前
学习自测与解析:MySQL第五、六、七期核心知识点详解
运维·数据库·笔记·学习·mysql·云计算
无限进步_1 小时前
从零实现一个迷你Shell——深入理解Linux命令行解释器
linux·运维·服务器·开发语言·c++·chrome
羊羊小栈1 小时前
Uplift营销供应链协同决策系统(基于Uplift因果推断与运筹优化算法)
前端·人工智能·算法·毕业设计·大作业
Adorable老犀牛1 小时前
nginx_exporter:Prometheus 监控 Nginx 基础指标
运维·nginx·prometheus
星辰徐哥1 小时前
云原生核心特性:容器化、微服务与DevOps的通俗解读
微服务·云原生·devops
山里幽默的程序员1 小时前
DevOps 必备:盘点2026 年最强RESTful API 接口测试方案
运维·restful·devops·api开发·api开发工具