当前位置: 首页 > news >正文

Docker 环境下的 Nginx 负载均衡(vllm)

背景

在linux上实现负载均衡,我在其他服务器上四个vllm的端口,端口分别时8001/v1,8002/v1,8003/v1,8004/v1,需要配置一个监听,使用9000端口,对四个端口进行转发,同时某些端口有时可能不能访问。

在 Ubuntu 上使用 Docker 实现负载均衡,最稳妥且高效的方案是使用 Nginx。Nginx 的 upstream 模块专门用于分发流量,并且内置了基础的健康检查机制(当某个后端端口不可用时,它会自动重试其他端口并暂时剔除不可用节点)。

准备目录结构

mkdirnginx-lb&&cdnginx-lbtouchdocker-compose.ymltouchnginx.conf

配置 Nginx 负载均衡策略

events{worker_connections2048;}http{client_max_body_size 100m;# 基础日志格式定义log_format main'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$upstream_addr" $request_time';access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log warn;upstream vllm_servers{# 进阶点 1:最少连接算法。LLM 推理时间差异很大,# 将新请求发给当前正在处理请求最少的后端,比轮询更科学。least_conn;server127.0.0.1:8001max_fails=2fail_timeout=30s;server127.0.0.1:8002max_fails=2fail_timeout=30s;server127.0.0.1:8003max_fails=2fail_timeout=30s;server127.0.0.1:8004max_fails=2fail_timeout=30s;# 进阶点 2:保持与后端的长连接,减少 TCP 握手开销keepalive32;}server{listen9000;location /{proxy_pass http://vllm_servers;# 进阶点 3:禁用缓冲 (关键!)。# vLLM 通常使用流式输出 (Stream),开启缓冲会导致内容攒够了一大块才显示。proxy_buffering off;proxy_cache off;# 设置长连接头proxy_http_version1.1;proxy_set_header Connection"";proxy_set_header Host$host;proxy_set_header X-Real-IP$remote_addr;proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;# 超时控制:LLM 生成可能很慢,给够 10 分钟proxy_read_timeout 600s;proxy_connect_timeout 10s;# 容错:当其中一个端口返回错误或超时,自动切换到下一个proxy_next_upstream errortimeouthttp_500 http_502 http_503 http_504;}# 状态监控页面 (可选)# 访问 http://IP:9000/nginx_status 可以看到当前连接数location /nginx_status{stub_status on;allow127.0.0.1;# 安全起见,只允许特定 IP 访问或干脆注释掉# allow 你的管理IP;# deny all;}}}

配置docker-compose.yml

services: vllm-proxy: image: nginx:alpine# 使用更轻量级的 alpine 版本container_name: vllm-load-balancer restart: unless-stopped ports: -"9000:9000"volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./logs:/var/log/nginx networks: - vllm-net# 限制容器资源,防止 Nginx 在极端流量下影响主机deploy: resources: limits: cpus:'0.5'memory: 512M networks: vllm-net: driver: bridge

启动

在 vllm-lb 目录下执行

docker-composeup -d

热重载

dockerexecvllm-load-balancer nginx -s reload

查看状态

dockerlogs -f vllm-load-balancer

查看配置是否正确

dockerexecvllm-load-balancercat/etc/nginx/nginx.conf

关闭

docker-composedown
http://www.jsqmd.com/news/243884/

相关文章:

  • 基于SpringBoot与微信小程序的家政服务与互助平台实现
  • 基于微信小程序的咖啡店点餐系统设计与实现
  • 基于SpringBoot与微信小程序的粤语文化传播平台设计与实现
  • 基于SpringBoot与小程序的智能雨伞借取系统设计与实现
  • 【Python-MediaPipe 0.10.31】新版使用技巧-人脸坐标
  • .NET MVC中如何支持工程建筑行业的大文件夹上传与目录结构?
  • 导师推荐!专科生必备!8款AI论文平台测评TOP8
  • 强烈安利9个一键生成论文工具,本科生搞定毕业论文不求人!
  • 中小企业福音,快速部署的PHP进销存系统,一步迈入高效管理
  • C#代码示例:如何在网页上实现机械制造行业的大文件秒传?
  • AI编辑器trae的solo模式是什么?
  • C++构造函数中慎用虚函数
  • 如何在.NET WebForm中实现能源化工行业的大文件分片断点续传?
  • 融媒体中心三审三校的必要性,为什么?
  • JDK17 前后写法对比:差点没认出是 Java
  • ROS2开发
  • 信创环境下XHEDITOR怎样处理Word公式粘贴兼容性问题?
  • 解读GB/T4857.23-2021 医疗器械运输包装振动测试意义
  • 教室照明如何影响学生视力健康与学习效率?
  • 金融风控平台怎样将Excel公式转存为XHEDITOR可编辑格式?
  • XHEDITOR前端如何兼容Word公式跨浏览器粘贴?
  • 军工系统如何通过XHEDITOR实现Word公式安全导入?
  • 【VTK手册041】切片抽取工具:vtkCutter原理解析
  • 【VTK 手册040】vtkPlane 详解:原理、用法与源码剖析
  • 手把手拆解旅行搭子Pro:基于Astron的Agent工作流实战
  • 亲测好用!10款AI论文平台测评:研究生开题报告神器
  • 导师严选9个AI论文软件,助你轻松搞定本科生毕业论文!
  • 国联股份董事、高级副总裁王挺一行赴宣城国控集团参观考察并签署战略合作协议
  • c++泛型编程之Typelists
  • 深圳金鑫磁材|深圳纳米晶磁芯:氢能退火、再生金属,碳中和实践