大数跨境
0
0

Nginx | 负载均衡策略:round-robin 加权轮询实践

Nginx | 负载均衡策略:round-robin 加权轮询实践 全栈工程师修炼指南
2025-12-05
2
导读:本文将主要介绍Nginx中间件,在使用反向代理时,针对多个上游服务器,Nginx 是如何选择的,通过讲解缺省的加权的轮询 Round-Robin 负载均衡算法,验证权重、以及失败超时等参数对上游服务器

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]


📢 大家好,我是 WeiyiGeek一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 🚀,若此文对你有帮助,一定记得点个关注⭐与小红星❤️或加入到作者知识星球『 全栈工程师修炼指南,转发收藏学习不迷路 😋 。

负载均衡策略:round-robin 加权轮询

上一篇《Nginx | 核心知识150讲,百万并发下性能优化之反向代理流程与负载均衡模块介绍笔记》作者简单介绍了反向代理及其流程,以及负载均衡相关基础知识,本小节将实践讲解缺省的加权的轮询 Round-Robin 负载均衡算法,验证权重、以及失败超时等参数对上游服务器选择的影响,以及上游服务器恢复后的状态。

目的:利用 Nginx 反向代理验证加权的轮询 (Round-Robin) 负载均衡算法。

温馨提示:若文章代码块中存在乱码或不能复制,请联系作者,也可通过文末的阅读原文链接,加入知识星球中阅读,原文链接:https://articles.zsxq.com/id_a2l6pacq0flr.html

操作步骤

步骤 01.创建两个测试服务器(213、214),213主机监听 8010 端口,214主机分别监听8011和8012端口。

# 编辑主配置文件,添加 include 指令,引入自定义配置文件目录。
vim /usr/local/nginx/conf/nginx.conf
....
include /usr/local/nginx/conf.d/*.conf;
....

# 创建测试服务器配置文件目录,并写入两个监听服务器的配置。
mkdir /usr/local/nginx/conf.d/
# 10.20.172.214 主机
tee /usr/local/nginx/conf.d/server.conf <<'EOF'
server {
  listen 8011;
  server_name localhost _;
  default_type text/plain;
return 200 'From 8011 server response!\n';
}

server {
  listen 8012;
  server_name localhost _;
  default_type text/plain;
return 200 'From 8012 server response!\n';
}
EOF

# 10.20.172.213 主机
tee /usr/local/nginx/conf.d/server.conf <<'EOF'
server {
  listen 8010;
  server_name localhost _;
  default_type text/plain;
return 200 'From 10.20.172.213:8011 server response!\n';
}
EOF

步骤 02.创建轮询加权的反向代理上游及监听文件。

tee /usr/local/nginx/conf.d/proxy_server_rr.conf <<'EOF'
# 创建上游服务器
upstream backend {
  server 127.0.0.1:8011 weight=2;  # 权重为2,轮流请求两次。
  server 127.0.0.1:8012 weight=1;  # 权重为1,轮流请求一次。
  server 10.20.172.213:8010 max_fails=2 fail_timeout=10s max_conns=5; # 最大失败次数为2,暂停10秒不向其转发请求。
  keepalive 10;  # 设置与上游服务器的长连接,最多保持10个空闲的保活连接。
  keepalive_timeout 60s; # 设置与上游服务器的长连接,空闲连接的超时时间。
}

# 创建监听用于反向代理
server {
  listen 80;
  server_name test.weiyigeek.top;
  access_log /var/log/nginx/test.log main;
  error_log test.error.log info;

  location / {
    # 反向代理配置,将请求转发到上游服务器。
    proxy_pass http://backend;
    # 将客户端的请求头传递给上游服务器。
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # 保持 http 长连接,避免每次请求都重新建立 TCP 连接。
    proxy_set_header Connection "";
    proxy_http_version 1.1;
    # 设置超时时间,避免上游服务器无响应导致客户端等待过久。
    proxy_read_timeout 10s;
    proxy_connect_timeout 10s;
  }
}
EOF

步骤 03.配置修改完成后需要重启 Nginx 服务器,并测试反向代理效果。

# 重启
nginx -s reload

# 模拟客户端请求
for i in $(seq 1 11);doecho -n "第 $i 次请求: ";curl http://test.weiyigeek.top;done
# 首先,会轮流请求上游服务器,不受权重影响
第 1 次请求: From 8011 server response!   
第 2 次请求: From 8012 server response!
第 3 次请求: From 10.20.172.213:8010 server response!
# 其次,轮询完上游服务器后,便按照权重进行轮询。
第 4 次请求: From 8011 server response!  # 权重为 2 服务器会轮流请求两次。
第 5 次请求: From 8011 server response!
第 6 次请求: From 8012 server response!  # 权重为 1 的服务器轮流请求一次。
第 7 次请求: From 10.20.172.213:8010 server response! # 权重为 1 的服务器轮流请求一次。
# 周而复始
第 8 次请求: From 8011 server response!
第 9 次请求: From 8011 server response!
第 10 次请求: From 8012 server response!
第 11 次请求: From 10.20.172.213:8010 server response!

步骤 04.测试上游服务器连接不上时,反向代理 10.20.172.213:8011 上游服务器时,受到 max_fails=2 fail_timeout=10s 参数影响,当连续失败2次后,暂停10秒不向其转发请求,10秒后又尝试重新连接,如果成功,恢复正常状态。

# 大致流程:
# 解释:2次失败后,暂停10秒不向其转发请求
# 10秒后,Nginx会再次尝试发送一个请求
# - 成功:恢复正常
# - 失败:再等10秒

# 模拟客户端请求
for i in $(seq 1 100);do echo -n "第 $i 次请求: ";curl http://test.weiyigeek.top;sleep 1;done

# 在 213 主机上关闭开启 nginx 服务。
nginx -s stop
ad6a2ac168f234f4bd1003fa6993bd89.png
weiyigeek.top-fail_timeout与max_fails配置使用效果图

步骤 05.通过下述命令,以及上游服务器端抓包验证 Nginx 与上游服务器长连接情况。

# 214 主机
tcpdump -i lo port 8012

# 模拟请求直至请求成功到 214 主机的 8012 端口
curl http://test.weiyigeek.top;
ed217ca5716a76f58dc261d86d2a89c0.png
weiyigeek.top-验证与上游服务器keepalive长连接图


END

加入:作者【全栈工程师修炼指南】知识星球

『 全栈工程师修炼指南』星球,主要涉及全栈工程师(Full Stack Development)实践文章,持续更新包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生(Cloud Native)、物联网工业控制(IOT)、人工智能Ai,从业书籍笔记,人生职场认识等方面资料或文章。


Q: 加入作者【全栈工程师修炼指南】星球后有啥好处?

✅ 将获得作者最新工作学习实践文章以及网盘资源。

✅ 将获得作者珍藏多年的全栈学习笔记(需连续两年及以上老星球友,也可单次购买)

✅ 将获得作者专门答疑学习交流群,解决在工作学习中的问题。

✅ 将获得作者远程支持(在作者能力范围内且合规)。


获取:作者工作学习全栈笔记

作者整理了10年的工作学习笔记(涉及网络、安全、运维、开发),需要学习实践笔记的看友,可添加作者微信或者回复【工作学习实践笔记】,当前价格¥299(会随着笔记持续更新后续会涨价,所以早买早优惠哟),除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!


 知识推荐 往期文章


若文章对你有帮助,请将它转发给更多的看友,若有疑问的小伙伴,可在评论区留言你想法哟 💬

【声明】内容源于网络
0
0
全栈工程师修炼指南
记录全栈工程师学习之路修炼心得,分享工作实践、网络安全、运维、编程、大数据、云原生、物联网、人工智能以及书籍笔记、人生职场感悟等相关高质量文章。 花开堪折直须折,莫待无花空折枝。 Blog:【https://weiyigeek.top】
内容 589
粉丝 0
全栈工程师修炼指南 记录全栈工程师学习之路修炼心得,分享工作实践、网络安全、运维、编程、大数据、云原生、物联网、人工智能以及书籍笔记、人生职场感悟等相关高质量文章。 花开堪折直须折,莫待无花空折枝。 Blog:【https://weiyigeek.top】
总阅读41
粉丝0
内容589