LNMP详解(十)——Nginx负载分担实战

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
网络型负载均衡 NLB,每月750个小时 15LCU
简介: LNMP详解(十)——Nginx负载分担实战

今天继续给大家介绍Linux运维的相关知识,本文主要内容是Nginx的负载分担实战。

一、Nginx负载分担简介
在LNMP详解(七)——Nginx反向代理配置实战一文中,我们配置了Nginx负载分担,当Nginx后台有多台真实服务器时,这些真实服务器之间就存在一个负载分担的问题,Nginx内置了多种策略,实现对客户端请求向后端真实服务器的分发。
Nginx负载分担是通过upstream实现的,如下所示:

在这种配置中,Nginx采用的是最简单的轮询策略,在该策略的基础上,我们还可以进行很多额外的配置,以实现与我们生产环境最匹配的策略。

二、Nginx轮询
在以上配置的基础上,upstream中每个server后面还可以加上很多参数,主要参数如下:
1、down
用于标记该后端服务器永久停机
2、backup
用于标记该后端服务器处于备用状态,当主服务器停机后,会将请求发送至该服务器
3、max_fails与fail_timeout
max_fails与fail_timeout连用,表示在fail_timeout时间内,当请求失败的次数超过max_fails时,认为该服务器停机。
Nginx轮询的配置如下所示:

upstream web1{
server 192.168.136.14:80 backup;
server 192.168.136.15:80 max_fails=10 fail_timeout=20s;
}
1
2
3
4
Nginx轮询是默认的负载分担方式,优点是配置简单、理解容易,但是问题在于如果后端服务器硬件设备不同,导致性能有差异时,不能很好的分发。

三、Nginx加权轮询
为了解决Nginx轮询时的问题,Nginx还支持加权轮询的策略。加权轮询也是轮询的一种,只不过在轮询的基础上引入了权重的概念,支持给后端真实服务器配置权重,Nginx依据权重值进行请求的转发。
Nginx加权轮询的配置需要在轮询的基础上给每个服务器配置weight值,weight值处于1-65535之间,weight值越高,Nginx就会把越多的请求发送给该服务器。这样,我们就可以把后端性能好的服务器配置上更高的权重值,使其承担更多的负载任务。
Nginx加权轮询的配置如下所示:

upstream web1{
server 192.168.136.14:80 weight=3;
server 192.168.136.15:80 weight=5;
}
1
2
3
4
尽管Nginx的加权轮询解决了后端真实服务器性能差异的问题,但是不管是Nginx轮序还是加权轮询,都不可避免的存在一个问题,那就是链接的无状态问题。客户端对于服务器的访问都会被随机的定位到任意一台真实服务器上,这就导致了无法实现访问的长链接。

四、Nginx ip_hash
为了解决Nginx轮询和加权轮询架构下长链接的问题,我们很自然的想到可以使Nginx把相同的客户端访问请求发送到相同的后端真实服务器上去。因此,我们就引入了ip_hash的负载分担方式。
如果Nginx采用ip_hash的负载分担方式,那么Nginx前端会根据客户端的IP地址来分配后端真实服务器,相同的客户端总是会分配给相同的设备,这样,我们就可以据此实现keepalive长链接功能。Nginx的ip_hash功能实现如下所示:

upstream web1{
ip_hash;
server 192.168.136.14:80 weight=3;
server 192.168.136.15:80 weight=5;
}
1
2
3
4
5
五、Nginx url_hash
除了ip_hash的配置之外,Nginx还支持url_hash的负载分担方式,所谓url_hash,就是根据客户端访问的url分配给不同的后端真实服务器,url_hash的方式可以保证客户端对相同资源的访问总是会定位到同一台设备上,这样做的好处是如果在后端真实服务器上启用了缓存,可以大大提升缓存命中率。Nginx的url_hash配置如下所示:

upstream web1{
hash $request_uri;
server 192.168.136.14:80 weight=3;
server 192.168.136.15:80 weight=5;
}
1
2
3
4
5
六、Nginx least_conn
除了上述几种方式之外,Nginx还支持least_conn的负载分担方式,least_conn是从另一个角度考虑了负载,比其他的方式多考虑了长链接的因素。采用least_conn的负载分担方式后,Nginx会选择一个后台真实服务器连接数量少的,将新的链接请求发送给他。考虑到有时客户端对于网站的访问需要使用长链接的场景,least_conn的方式会更合理的进行负载的分担。

upstream web1{
least_conn;
server 192.168.136.14:80 weight=3;
server 192.168.136.15:80 weight=5;
}
1
2
3
4
5
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_40228200/article/details/122995391

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
6月前
|
运维 应用服务中间件 Shell
LNMP详解(十六)——Nginx日志切割
LNMP详解(十六)——Nginx日志切割
63 5
|
6月前
|
运维 应用服务中间件 Linux
LNMP详解(十三)——Nginx子页面详解
LNMP详解(十三)——Nginx子页面详解
58 3
|
6月前
|
Web App开发 编解码 运维
LNMP详解(十二)——Nginx URL重写实战
LNMP详解(十二)——Nginx URL重写实战
71 2
|
6月前
|
运维 负载均衡 应用服务中间件
LNMP详解(九)——Nginx虚拟IP实战
LNMP详解(九)——Nginx虚拟IP实战
136 2
|
6月前
|
运维 监控 应用服务中间件
LNMP详解(十五)——Nginx日志分析实战
LNMP详解(十五)——Nginx日志分析实战
73 0
|
6月前
|
运维 应用服务中间件 Linux
keepalived详解(三)——keepalived与Nginx配合实战
keepalived详解(三)——keepalived与Nginx配合实战
205 1
|
30天前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
247 0
|
5月前
|
安全 Ubuntu 应用服务中间件
NGINX环境下实现Web网站访问控制的实战指南
在NGINX中设置基于IP的访问控制可提升网站安全性。步骤包括安装NGINX、备份配置文件、编辑`/etc/nginx/sites-available/default`,添加`allow`和`deny`指令限制特定IP访问,如`allow 192.168.1.100; deny all;`,然后测试配置并重启服务。成功后,仅允许的IP能访问网站,否则会收到403错误。这为Web安全提供基础保障,还可扩展实现更多高级控制策略。【6月更文挑战第20天】
600 3
|
5月前
|
弹性计算 应用服务中间件 Linux
双剑合璧:在同一ECS服务器上共存Apache与Nginx的实战攻略
在ECS服务器上同时部署Apache和Nginx的实战:安装更新系统,Ubuntu用`sudo apt install apache2 nginx`,CentOS用`sudo yum install httpd nginx`。配置Nginx作为反向代理,处理静态内容及转发动态请求到Apache(监听8080端口)。调整Apache的`ports.conf`监听8080。重启服务测试,实现两者高效协同,提升Web服务性能。记得根据流量和需求优化配置。【6月更文挑战第21天】
514 1
|
5月前
|
监控 前端开发 应用服务中间件
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽(2)
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽
82 1