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


前言

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃龙利鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值