跳转到主要内容

将新连接轮询到多个后端

为 HTTP(S) 或 TCP 隧道设置多个目标,并了解轮询、健康检查与重试边界

HTTP(S) 隧道和 TCP 隧道可配置多个“目标地址(IP:端口)”。NPS 按轮询顺序为新连接选择目标,适合把无状态服务分散到多台内网主机。

Web 配置

新增或编辑隧道,在目标地址中每行填写一个目标:

192.168.1.21:8080
192.168.1.22:8080
192.168.1.23:8080

HTTP(S) 和 TCP 均使用相同格式。配置文件模式用逗号分隔:

[app]
host=app.example.com
target_addr=192.168.1.21:8080,192.168.1.22:8080,192.168.1.23:8080

[tcp_app]
mode=tcp
server_port=9000
target_addr=192.168.1.21:9000,192.168.1.22:9000

调度边界

  • 算法是顺序轮询,不按响应时间、连接数或权重调度。
  • TCP 每个新连接选择一次目标;HTTP keep-alive 上的多个请求可能继续使用同一后端,并非严格逐请求平均。
  • 选中的目标连接失败时,当前请求不会自动重试下一个目标。
  • Web 配置本身不提供主动健康检查。NPC 配置文件支持另行定义健康检查,并在目标失效时暂停向它转发新连接。
  • 会话保存在单机内存的应用需要共享会话、无状态令牌或应用层粘性策略,否则登录状态可能在后端间丢失。

NPC 健康检查

配置文件模式可以为 target_addr 中的同一批地址增加 TCP 或 HTTP 检查。例如:

[app]
mode=tcp
server_port=9000
target_addr=192.168.1.21:8080,192.168.1.22:8080

[health_app]
health_check_type=http
health_check_target=192.168.1.21:8080,192.168.1.22:8080
health_http_url=/healthz
health_check_timeout=2
health_check_interval=10
health_check_max_failed=3

HTTP 检查要求返回状态码 200。使用 health_check_type=tcp 时不需要 health_http_url,只验证能否建立 TCP 连接。health_check_target 必须与隧道目标地址保持一致,恢复后目标会重新加入轮询。

验证

让各后端返回不同实例标识,连续建立多个新连接观察是否轮询。测试故障时主动停止一个后端,确认客户端能接受单次连接失败,或在 NPS 前后增加具备健康检查和重试能力的专业负载均衡器。