docker内置ipvs是提升吞吐最轻量高效的方式,它在内核完成转发、不走用户态代理,延迟低于毫秒级,适用于高并发tcp/udp场景;需通过ipvsadm -ln验证vip注册,确认swarm服务使用ingress模式,并可选rr、lc、dh等调度算法,配合dsr/ipip绕过nat提升吞吐,再结合tcp/http健康检查实现自动故障剔除。

直接用 Docker 内置的 IPVS 是提升吞吐最轻量、最高效的方式——它不走用户态代理,转发在内核完成,延迟压到毫秒级以下,特别适合高并发 TCP/UDP 流量场景(比如数据库连接、实时网关、API 网关)。
确认 IPVS 已启用并接管 Swarm 流量
Docker 20.10+ 默认启用 IPVS,但需验证是否生效:
- 运行
ipvsadm -ln,能看到类似tcp 10.0.0.1:80 rr的条目,说明 VIP 已注册、调度器在工作 - 检查 Swarm 服务是否使用 ingress 模式:
docker service inspect <svc> | grep -A5 "Publish" </svc>,确认"mode": "ingress" - 若输出为空或显示 iptables,说明节点未启用 IPVS:编辑
/etc/docker/daemon.json,添加"ipvs": true,重启 dockerd
选择合适调度算法匹配业务特征
IPVS 提供多种内核级调度策略,不依赖 Nginx 或 HAProxy 配置:
- rr(轮询):适合后端实例性能一致、请求耗时稳定(如静态文件服务)
- lc(最少连接):适合长连接或处理时间差异大的服务(如 WebSocket、数据库连接池)
- dh(目标地址哈希):适合需会话保持但又不想用 sticky cookie 的场景(如某些 HTTP API 需绑定客户端 IP)
- 修改方式:通过
docker service update --lb-mode=lc <svc></svc>(Docker 27+ 支持),或手动用ipvsadm -E -t VIP:PORT -s lc
绕过 NAT,用 DSR 或 IPIP 模式压榨极限吞吐
默认 NAT 模式会改写目的 IP,增加一跳;DSR(Direct Server Return)或 IPIP 可让响应绕过负载均衡器,大幅提升吞吐:
- DSR 要求后端容器与 LB 同一 L2 网络(如 macvlan 网络),响应直接回客户端
- IPIP 封装原始包,支持跨子网部署,适合多机房或混合云场景
- 启用前提:宿主机开启路由转发
sysctl -w net.ipv4.ip_forward=1,并配置后端容器 ARP 抑制(避免 VIP 冲突) - 命令示例(IPIP):
ipvsadm -a -t 192.168.100.10:3306 -r 172.18.0.5:3306 -i
配合健康检查自动剔除异常节点
IPVS 自带 TCP 和 HTTP 健康探测,比仅靠容器存活更可靠:
- Swarm 默认只检查容器进程状态;要启用主动探活,需在 service 创建时指定健康检查:
--health-cmd "curl -f http://localhost/health" --health-interval 5s - IPVS 会根据探测结果自动从调度列表中增删 real server,无需人工干预
- 注意:HTTP 探针需容器内提供 /health 端点,且返回 2xx;TCP 探针只需端口可达











