NPP 热带森林:1967-1999 年全球一致站点估算,R1
2026/1/14 17:07:27
在linux上实现负载均衡,我在其他服务器上四个vllm的端口,端口分别时8001/v1,8002/v1,8003/v1,8004/v1,需要配置一个监听,使用9000端口,对四个端口进行转发,同时某些端口有时可能不能访问。
在 Ubuntu 上使用 Docker 实现负载均衡,最稳妥且高效的方案是使用 Nginx。Nginx 的 upstream 模块专门用于分发流量,并且内置了基础的健康检查机制(当某个后端端口不可用时,它会自动重试其他端口并暂时剔除不可用节点)。
mkdirnginx-lb&&cdnginx-lbtouchdocker-compose.ymltouchnginx.confevents{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;}}}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.confdocker-composedown