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.mzph.cn/news/1159065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot与微信小程序的家政服务与互助平台实现

一、系统开发背景与需求分析 当前家政服务行业存在供需匹配效率低、服务质量难保障等问题:用户寻找可靠家政人员需依赖熟人推荐,选择范围有限;家政从业者缺乏规范展示渠道,难以获得信任;邻里间临时家政需求&#xff08…

基于微信小程序的咖啡店点餐系统设计与实现

一、系统开发背景与需求分析 当下咖啡店运营中,高峰期排队等待时间长、人工点餐易出错、会员管理分散等问题突出,影响顾客体验与门店效率。传统到店点餐模式难以满足消费者对便捷性的需求,而外卖平台抽成高且无法传递咖啡店的场景体验。微信小…

基于SpringBoot与微信小程序的粤语文化传播平台设计与实现

一、系统开发背景与需求分析 粤语作为中国重要的方言之一,承载着岭南地区深厚的历史文化,但当前面临传承断层风险。年轻一代使用频率下降,传统传播方式(如电视节目、线下活动)覆盖范围有限,且缺乏互动性。微…

【Python-MediaPipe 0.10.31】新版使用技巧-人脸坐标

MediaPipe-python库封装使用函数 MediaPipe更新后,旧版本的语句无法使用,于是笔者网罗资源(实际上是榨干AI),拼凑了人脸坐标的使用方法。 旧版本代码代码如下: 引用其他博主代码(已在代码块中注…

基于SpringBoot与小程序的智能雨伞借取系统设计与实现

一、系统开发背景与需求分析 日常生活中,突发降雨常用户出行带来极大不便,传统雨伞租借存在借还流程繁琐、归还点少、押金退还不及时等问题。公共场合(如地铁站、商圈、校园)的临时用伞需求旺盛,但现有服务难以满足高效…

.NET MVC中如何支持工程建筑行业的大文件夹上传与目录结构?

介绍 在Web 程序中上传文件是很常见的需求。利用HTTP 协议上传文件的方式非常有限,最常见的莫过于使用 元素进行上传。这种上传方式会将内容使用multipart/form-data 方案进行编码,并将内容POST 到服务器端。使用multipart/form-data 编码方式与默认的a…

导师推荐!专科生必备!8款AI论文平台测评TOP8

导师推荐!专科生必备!8款AI论文平台测评TOP8 2026年专科生论文写作工具测评:选对平台,事半功倍 随着AI技术在学术领域的广泛应用,越来越多的专科生开始借助AI论文平台提升写作效率与质量。然而,面对市场上琳…

强烈安利9个一键生成论文工具,本科生搞定毕业论文不求人!

强烈安利9个一键生成论文工具,本科生搞定毕业论文不求人! AI 工具如何让论文写作变得轻松高效 在当今信息爆炸的时代,本科生撰写毕业论文早已不再是单纯的文字创作,而是一场对效率、逻辑和学术规范的全面挑战。面对繁重的文献查阅…

C#代码示例:如何在网页上实现机械制造行业的大文件秒传?

文件管理系统毕业设计:从IE8兼容到百万梦想的奇幻漂流 大家好,我就是那个被IE8折磨到怀疑人生的通讯专业大三狗。本来以为做个文件管理系统毕业设计撑死两周搞定,没想到这项目直接让我体验了一把"全栈工程师"的酸爽人生。 需求分…

中小企业福音,快速部署的PHP进销存系统,一步迈入高效管理

温馨提示:文末有资源获取方式对于众多中小企业而言,引入一套管理系统的最大顾虑往往是:部署是否复杂?员工是否能用得起来?成本是否高昂?现在,所有顾虑都可以放下。我们推出一款真正为中小企业量…

C++构造函数中慎用虚函数

1.C构造函数中慎用虚函数你遇到的这个警告来自 Clang Static Analyzer(clang-analyzer),具体是:Call to virtual method ModParam::setJsonData during construction bypasses virtual dispatch [clang-analyzer-optin.cplusplus.…

AI编辑器trae的solo模式是什么?

Trae 的 SOLO 模式是字节跳动 AI 编程 IDE Trae 中以 AI 为主导的全流程自动化开发模式,核心是让 AI 自主完成从需求理解、任务拆解、编码、测试到部署的完整开发链路,开发者仅需以自然语言输入需求并可随时介入调整,无需手动操作全流程Trae。…

如何在.NET WebForm中实现能源化工行业的大文件分片断点续传?

大文件传输系统技术方案 作为江苏某软件公司的技术负责人,在处理公司产品部门提出的大文件传输需求时,我经过详细调研和评估,提出以下技术方案: 需求分析与技术挑战 当前需求面临的主要技术挑战包括: 超大文件传输…

融媒体中心三审三校的必要性,为什么?

“三审三校”制度不仅是传统出版业的优良传统,更是融媒体中心生存与发展的“生命线”和“安全阀”。在“一次采集、多种生成、多元传播”的融媒体环境下,实行严格的“三审三校”具有以下四大核心必要性:一、 守住政治安全的“底线”&#xff…

JDK17 前后写法对比:差点没认出是 Java

Java,一直被开发者戏称为“啰嗦”,但从 JDK 12 到 JDK 17,这门语言发生了显著变化。多个语法层面的增强让 Java 更加简洁、表达力更强,也更接近现代语言的风格。本文将带你梳理这六个版本中 Java 的关键语法演进。👀语…

ROS2开发

ROS 2(Robot Operating System 2)是用于机器人开发的灵活框架,相较于 ROS 1,它在实时性、安全性、跨平台支持和分布式通信等方面有显著提升。以下是一个 ROS 2 开发的快速入门指南,适用于初学者或希望系统化学习的人。…

信创环境下XHEDITOR怎样处理Word公式粘贴兼容性问题?

作为一名山西PHP程序员的外包奇遇记 大家好!我是来自山西的一名PHP程序员,最近刚接了个CMS企业官网的外包项目,客户突然甩来个"豪华套餐"需求——要在后台编辑器里加一堆高大上的文档导入功能。 客户需求大揭秘 客户要求&#x…

解读GB/T4857.23-2021 医疗器械运输包装振动测试意义

在医疗器械、生物制药、疫苗等行业,产品运输过程中的安全性与稳定性直接关系到临床使用效果和患者生命安全。GB/T4857.23-2021《包装 运输包装件基本试验 第23部分:垂直随机振动试验方法》作为运输包装振动测试的重要标准,为相关企业提供了科…

教室照明如何影响学生视力健康与学习效率?

伴着教育环境持续改进,教室照明身为学生日常学习里重要的物理条件,其质量径直对学生的视力健康及学习效率产生影响。根据近些年多项调查数据所示,我国青少年近视率始终处于高位,部分年龄段近视占比已逾35%。此种现象除和用眼习惯、…

金融风控平台怎样将Excel公式转存为XHEDITOR可编辑格式?

山西PHP程序员的逆袭之路:用代码搞钱,用QQ群发家! 各位老铁们好!我是老张,一个在山西太原窝着写PHP的"码农"。最近接了个CMS企业官网的外包项目,客户提出了个"变态"需求:要…