快速创建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:3306 和 10.1.9.117:3306 两个 MySQL 节点为例,逐步操作。
第一步:创建转发引擎
入口:【平台系统 → 基础设施 → 转发引擎】,点击"新增"。

| 配置项 | 示例值 | 说明 |
|---|---|---|
| 名称 | engine117 | |
| 通讯地址 | 10.1.9.117 | 转发引擎 IP |
| 用户凭证 | 选择预先创建的凭证 | 参见 用户凭证 |
更多操作细节参见 快速创建HTTP虚拟服务 - 创建转发引擎。如果使用 HA 部署,参见 双机热备集群配置。
第二步:创建健康检查策略
TCP 服务通常不暴露 HTTP 接口,推荐使用以下健康检查方式:
| 协议 | 适用场景 | 原理 |
|---|---|---|
| TCP | MySQL、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) |
| 连接超时 | 客户端/服务器空闲连接超时 | 默认值适合多数场景 |

关于 SNAT 的必要性: 当矩尺以旁路模式部署时,请求路径为"客户端 → 矩尺 → 后端",但后端直接回复给客户端(不经过矩尺),导致客户端收到一个来自"非自己请求的目标 IP"的响应包,连接被 RST。配置 SNAT 后,后端看到的源 IP 是矩尺的 SNAT IP,回复包经过矩尺再转回客户端。
第五步:创建虚拟服务
入口:【SLB 本地负载 → 虚拟服务】,点击"新增"。

| 配置项 | 示例值 | 说明 |
|---|---|---|
| 名称 | mysql-proxy | |
| 对象类型 | 转发引擎(单机)或流量组(HA) | |
| 转发引擎/流量组 | engine117 | |
| 协议 | TCP | 非 HTTP 的 TCP 服务选此;需要 TLS 加密选 TCP/SSL |
| 监听地址 | 10.1.9.117 | 客户端访问的 IP |
| 端口 | 3306 | MySQL 默认端口 |
默认分发规则
TCP 虚拟服务不需要七层分发规则(没有 URL/Host 匹配),只需配置默认分发规则:
| 配置项 | 示例值 |
|---|---|
| 处理方式 | TCP 代理 |
| 服务器池 | mysql-backend-pool(第三步创建) |
| TCP 策略 | TCP 策略模板(第四步创建或选择内置模板) |
配置完成后点击"确认"保存。
TCP/SSL 类型
如果需要在 TCP 基础上增加 TLS 加密(如数据库需要加密传输),选择协议为 TCP/SSL,额外配置:
- SSL 证书:【平台系统 → SSL 证书管理】中上传
- SSL 客户端策略:【SLB 本地负载 → 策略配置 → SSL 策略】中创建,选择证书和加密套件
国密支持参见 国密配置与验证。
第六步:变更执行并验证
变更执行
点击"变更执行"使配置生效:

验证
使用 TCP 客户端工具验证连通性:
# 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 虚拟服务完整配置项参见 虚拟服务用户手册。四层分发规则参见 四层分发规则用户手册。
