Skip to content

快速创建TCP虚拟服务

简介

TCP 虚拟服务是四层负载均衡,工作在传输层。与 HTTP(七层)不同,TCP 负载均衡不解析应用层内容——它只根据 IP 和端口转发流量,客户端与后端服务器直接建立 TCP 连接。矩尺平台在此扮演的角色类似于路由器或防火墙。

如果您熟悉 NGINX,TCP 虚拟服务对应 stream {} 块中的 server 指令。

典型使用场景:

  • 数据库代理(MySQL、PostgreSQL、Redis 等)
  • 非 HTTP 的自定义 TCP 协议
  • 需要透传 TLS 加密通道的场景(使用 TCP/SSL 类型)

与 HTTP 虚拟服务的区别

维度TCP(四层)HTTP(七层)
工作层次传输层应用层
是否解析 HTTP 内容
基于 URL/Host 路由不支持支持
分发规则四层分发规则七层分发规则
策略四层 TCP 策略七层 HTTP 策略
会话保持源地址六种方式(Cookie 等)
日志记录连接级日志请求级日志 + 全景分析

操作步骤概览

第一步:创建转发引擎        →  确定流量由哪台机器处理
第二步:创建健康检查策略    →  定义"何谓后端健康"
第三步:创建服务器池        →  定义后端节点和负载均衡方式
第四步:创建四层 TCP 策略   →  定义 SNAT、会话保持、溯源等
第五步:创建虚拟服务        →  组合以上组件,定义监听地址
第六步:变更执行并验证      →  使配置生效,确认流量正常转发

下面以将 10.1.9.117:3306 的 TCP 流量分发到后端 10.1.9.114:330610.1.9.117:3306 两个 MySQL 节点为例,逐步操作。

第一步:创建转发引擎

入口:【平台系统 → 基础设施 → 转发引擎】,点击"新增"。

添加转发引擎

配置项示例值说明
名称engine117
通讯地址10.1.9.117转发引擎 IP
用户凭证选择预先创建的凭证参见 用户凭证

更多操作细节参见 快速创建HTTP虚拟服务 - 创建转发引擎。如果使用 HA 部署,参见 双机热备集群配置

第二步:创建健康检查策略

TCP 服务通常不暴露 HTTP 接口,推荐使用以下健康检查方式:

协议适用场景原理
TCPMySQL、Redis 等三次握手成功即判健康
TCP 半连接追求低开销收到 SYN-ACK 后发 RST 断开,不完成握手
ICMP仅需确认主机存活Ping

入口:【SLB 本地负载 → 健康检查】,点击"新增":

健康检查新增

以 MySQL 为例的 TCP 健康检查配置:

配置项示例值说明
策略名称mysql-tcp-check
协议TCP
端口复用监听端口使用节点在服务器池中配置的端口
高级配置开启下线检测:间隔 3s,失败 2 次;上线确认:间隔 10s,成功 3 次

如果需要对 MySQL 做更深度的检查(执行 SQL 查询验证),可使用 MYSQL 协议健康检查。多种健康检查协议参见 健康检查配置指南

第三步:创建服务器池

入口:【SLB 本地负载 → 服务器池】,点击"新增":

新增服务器池

配置项示例值说明
服务器池名称mysql-backend-pool
负载均衡算法轮询算法 或 最小连接数数据库长连接场景推荐最小连接数,避免单节点连接堆积
健康检查mysql-tcp-check绑定第二步创建的策略
转发引擎engine117选择第一步添加的引擎
目标节点10.1.9.114:3306(权重 5)
10.1.9.117:3306(权重 5)
后端数据库 IP:端口

新增服务器池节点

负载均衡算法建议:

后端类型推荐算法原因
数据库(MySQL/PostgreSQL)最小连接数长连接场景,避免连接数倾斜
Redis / 缓存一致性哈希节点增减时最小化缓存失效
通用 TCP 服务轮询简单均衡

服务器池完整配置参见 服务器池用户手册

第四步:创建四层 TCP 策略

四层策略定义了 TCP 连接级别的处理方式。入口:【SLB 本地负载 → 策略配置 → 四层策略 → 虚拟服务TCP策略】。

系统内置了"TCP 策略模板",一般可以直接使用。如需自定义:

配置项作用建议
SNAT(源地址转换)将客户端 IP 转换为指定 IP 再访问后端旁路部署时必须开启,否则回包路由不对称
SNAT 方式可选设备接口 IP、虚拟服务 IP、自定义地址池自定义地址池最灵活,需预先在【SNAT地址池】中创建
会话保持策略TCP 场景仅支持源地址方式内网数据库代理建议开启,同一客户端固定路由到同一节点
溯源Proxy Protocol在 TCP 层传递客户端真实 IP(非 HTTP 场景无法用 XFF)
连接超时客户端/服务器空闲连接超时默认值适合多数场景

新增TCP虚拟服务

关于 SNAT 的必要性: 当矩尺以旁路模式部署时,请求路径为"客户端 → 矩尺 → 后端",但后端直接回复给客户端(不经过矩尺),导致客户端收到一个来自"非自己请求的目标 IP"的响应包,连接被 RST。配置 SNAT 后,后端看到的源 IP 是矩尺的 SNAT IP,回复包经过矩尺再转回客户端。

四层策略详细配置参见 四层策略用户手册。SNAT 地址池创建参见 SNAT 地址池

第五步:创建虚拟服务

入口:【SLB 本地负载 → 虚拟服务】,点击"新增"。

新增TCP虚拟服务配置

配置项示例值说明
名称mysql-proxy
对象类型转发引擎(单机)或流量组(HA)
转发引擎/流量组engine117
协议TCP非 HTTP 的 TCP 服务选此;需要 TLS 加密选 TCP/SSL
监听地址10.1.9.117客户端访问的 IP
端口3306MySQL 默认端口

默认分发规则

TCP 虚拟服务不需要七层分发规则(没有 URL/Host 匹配),只需配置默认分发规则:

配置项示例值
处理方式TCP 代理
服务器池mysql-backend-pool(第三步创建)
TCP 策略TCP 策略模板(第四步创建或选择内置模板)

配置完成后点击"确认"保存。

TCP/SSL 类型

如果需要在 TCP 基础上增加 TLS 加密(如数据库需要加密传输),选择协议为 TCP/SSL,额外配置:

  • SSL 证书:【平台系统 → SSL 证书管理】中上传
  • SSL 客户端策略:【SLB 本地负载 → 策略配置 → SSL 策略】中创建,选择证书和加密套件

国密支持参见 国密配置与验证

第六步:变更执行并验证

变更执行

点击"变更执行"使配置生效:

变更执行

验证

使用 TCP 客户端工具验证连通性:

bash
# MySQL 客户端测试
mysql -h 10.1.9.117 -P 3306 -u username -p

# 通用 TCP 连通性测试
nc -zv 10.1.9.117 3306

# telnet 测试
telnet 10.1.9.117 3306

如果连接成功,进入虚拟服务详情 → 分析标签,可查看吞吐量、新建连接数等实时指标。

排障提示

现象可能原因
连接超时后端节点不可达、健康检查失败、防火墙拦截
连接被拒绝后端服务未监听目标端口
连接成功但无响应后端服务异常、SNAT 未配置导致回包路由不对称
频繁断连健康检查间隔过短、后端服务不稳定、连接超时配置过短

TCP 虚拟服务完整配置项参见 虚拟服务用户手册。四层分发规则参见 四层分发规则用户手册