4. 混合部署网络设计

PostgreSQL 混合部署的网络设计,本质上是把数据库实例、应用节点、运维跳板机、备份存储等对象,分散在多个 VPC、多个云厂商、多个自建机房中,并让它们之间以可控的延迟、带宽、安全策略和可解析的地址互相访问。网络设计一旦出错,后续的流复制、逻辑订阅、备份恢复、监控采集都会出现难以定位的间歇性故障。因此本节先厘清各类连接方式的定位,再给出可落地的配置与验证方法。

一、连接方式的定位与选型

跨环境通信常见手段有 VPC 对等连接、VPN、专线和云厂商提供的对等连接/云联网。它们并不是互相替代的关系,而是按“是否同云、是否同地域、是否要求稳定带宽”分层使用。

  • VPC 对等连接:适合同一云厂商内两个 VPC 互通,延迟低、配置简单,但多数云厂商不支持传递路由,A 与 B 对等、B 与 C 对等,A 不一定能访问 C。
  • VPN:基于公网建立 IPsec 隧道,适合临时、成本敏感或跨云场景,带宽受公网质量影响,抖动较大。
  • 专线:物理或运营商专线接入,延迟稳定、带宽可保障,适合主备库跨机房、跨云的核心链路,但成本高、开通周期长。
  • 云联网/中转网关:用于多 VPC、多地域、多账号的星型汇聚,解决对等连接不可传递的问题。

选型时先回答三个问题:两端是否同云同地域?是否要求延迟稳定在毫秒级?是否允许流量经过公网?答案决定了组合方式。例如同云同地域用对等连接,跨云核心链路用专线加 VPN 备份,多分支汇聚用云联网。

二、地址规划与路由

混合部署最容易踩的坑是网段重叠。规划阶段必须保证各 VPC、各机房、各容器网段的 CIDR 不重叠,否则对等连接和专线都无法建立有效路由。建议按环境划分大段,例如生产 VPC 使用 10.10.0.0/16,测试 VPC 使用 10.20.0.0/16,自建机房使用 10.30.0.0/16,容器网段单独使用 172.20.0.0/16。

路由方面,对等连接需要在两端 VPC 的路由表中分别添加指向对端 CIDR 的路由条目,下一跳为对等连接 ID;专线则通过边界网关和路由表发布本地网段。若使用云联网,只需把各 VPC 和专线网关关联到云联网实例,由云联网统一分发路由。需要注意,PostgreSQL 主备之间的流复制流量应走低延迟链路,而备份归档流量可以走成本更低的链路,可通过路由优先级或策略路由区分。

三、DNS 解析设计

跨环境访问数据库时,直接写 IP 会导致主备切换、迁移后应用配置频繁变更。推荐使用私有 DNS 或自建 DNS 为数据库实例提供稳定域名,例如 pg-primary.db.internal 和 pg-standby.db.internal。云上可使用 PrivateZone 或 Route 53 私有托管区,自建机房可用 BIND 或 CoreDNS。

跨云解析的关键是 DNS 转发:在云上私有 DNS 中为自建机房域名配置转发规则,指向机房 DNS 服务器;在机房 DNS 中为云上域名配置条件转发,指向云上 DNS 的入站地址。这样应用无论部署在哪个环境,都能用同一域名解析到就近或正确的数据库地址。解析记录 TTL 建议设置为 30~60 秒,便于主备切换后快速生效。

四、跨环境通信配置与验证

下面以“云上 VPC 与自建机房通过 IPsec VPN 互通,PostgreSQL 主库在机房、备库在云上”为例,给出关键配置与验证过程。示例参数为教学假设,实际以环境为准。

# 机房侧 strongSwan 配置片段(示例)
conn pg-hybrid
    left=203.0.113.10          # 机房公网出口
    leftsubnet=10.30.0.0/16    # 机房内网
    right=198.51.100.20        # 云上 VPN 网关公网 IP
    rightsubnet=10.10.0.0/16   # 云上 VPC
    ike=aes256-sha256-modp2048
    esp=aes256-sha256
    keyexchange=ikev2
    auto=start

# 云上 VPC 路由表添加
目的网段 10.30.0.0/16 -> 下一跳 VPN 网关

# 机房侧添加回程路由
ip route add 10.10.0.0/16 via 203.0.113.1

配置完成后按顺序验证:先确认隧道状态为 established,再测试网络连通性,最后验证 PostgreSQL 复制链路。

# 1. 查看隧道状态
ipsec statusall | grep pg-hybrid

# 2. 测试连通性(从云上备库节点)
ping -c 3 10.30.1.10
traceroute -n 10.30.1.10

# 3. 测试 PostgreSQL 端口
pg_isready -h 10.30.1.10 -p 5432

# 4. 查看复制状态(在备库执行)
psql -h 10.10.2.20 -c "SELECT client_addr, state, sync_state, replay_lag FROM pg_stat_replication;"

判断依据:pg_isready 返回 accepting connections 说明端口可达;pg_stat_replication 中 state 为 streaming、replay_lag 在秒级以内,说明复制链路正常。若 ping 通但 5432 不通,通常是安全组或防火墙未放行;若复制延迟持续增大,需检查 VPN 带宽和 MTU,IPsec 场景下建议将 PostgreSQL 所在主机 MTU 调整为 1400 左右以避免分片。

五、安全与高可用注意事项

跨环境链路必须限制访问来源,安全组和防火墙只放行数据库端口、复制端口和监控端口,禁止全网段开放。专线和 VPN 建议做主备双链路,通过 BGP 或路由优先级实现切换。DNS 解析要配合健康检查,主库故障时自动把域名指向备库。对于跨云场景,还需注意各云厂商对 IPsec 参数、加密算法和 MTU 的差异,提前对齐配置。

混合部署网络拓扑与跨环境通信路径 自建机房 10.30.0.0/16 PostgreSQL 主库 10.30.1.10 机房 DNS 10.30.0.53 VPN 网关 / 专线网关 203.0.113.10 云上 VPC 10.10.0.0/16 PostgreSQL 备库 10.10.2.20 私有 DNS 10.10.0.53 VPN 网关 / 专线网关 198.51.100.20 IPsec VPN 隧道 AES256 / SHA256 MTU 1400 主链路 流复制 WAL 传输 DNS 条件转发:pg-primary.db.internal / pg-standby.db.internal 关键验证点 隧道状态:ipsec statusall 显示 established 网络连通:ping 10.30.1.10 与 traceroute 路径符合预期 端口可达:pg_isready -h 10.30.1.10 -p 5432 返回 accepting 复制正常:pg_stat_replication 中 state=streaming,replay_lag 秒级 异常排查:ping 通但端口不通查安全组;延迟增大查带宽与 MTU

整体来看,混合部署网络设计要先把地址和路由规划清楚,再选择对等连接、VPN、专线或云联网的组合,最后用 DNS 屏蔽底层地址变化。配置完成后必须按“隧道—连通性—端口—复制状态”的顺序逐层验证,任何一层不通过都不要继续往下排查,这样才能快速定位问题边界。