为什么你需要关注跨VPC的只读副本挂载
我的处理经验
假设你在阿里云、AWS或腾讯云上搭建了一个电商系统,主库在VPC-A内,负责写入订单数据。随着用户量增长,报表查询、运营看板、搜索等读请求越来越多,直接压在主库上,性能开始下降。常见的解决方案是创建只读副本(Read Replica),把读请求分流过去。但如果你的分析和BI系统跑在另一个VPC-B里,这两个VPC默认是不通的——这就是公有云的“租户隔离网络”机制。此时,如何在保证安全的前提下,让VPC-B里的服务“安全挂载”VPC-A里的只读副本,就成了必须解决的问题。
很多新手第一次遇到这个场景时,容易被“VPC对等连接”“安全组”“路由表”“数据库白名单”等术语绕晕。本文就把这些概念掰开揉碎,用一个故事帮你建立整体认知。
想继续深入:此处可内链到“VPC优化清单”文章。
第一课:什么是VPC和租户隔离?
故障定位思路
VPC(Virtual Private Cloud,虚拟私有云)就像你在公有云上租的一个独立别墅。别墅有独立的围墙(网络边界)、独立的门牌号(IP地址段)和独立的进出规则(路由和安全策略)。不同的VPC默认是完全隔离的——即使同属一个账号,A别墅的快递员也进不了B别墅的大门。这种隔离是公有云安全的基石,能防止一个客户误操作影响另一个客户。
但现实业务中,别墅之间需要串门。比如你有一个“生产别墅”(VPC-Prod)存放数据库主库,还有一个“分析别墅”(VPC-Analytics)运行离线查询任务。让分析别墅里的应用访问生产别墅里的只读副本,就需要打通两个别墅间的通道,同时保证通道是安全可控的。
第二课:只读副本是什么?为何值得挂载?
配置前的检查
只读副本是数据库主库的“影子”,它通过异步或半同步复制技术,实时或准实时地从主库同步数据。你可以把它理解为一个只允许执行SELECT查询的从库。它的核心价值有两点:
- 读扩展:把大量读请求分散到多个只读副本,减轻主库压力,提升整体吞吐。
- 隔离分析负载:复杂的报表、大数据分析查询可能会锁表或消耗大量CPU,直接放在只读副本上运行,不影响线上交易。
当你决定把只读副本部署在另一个VPC时,本质上是在做“跨VPC的读分流”。但要注意,只读副本本身仍然是一个完整的数据库实例,它期望客户端通过标准的数据库协议(如MySQL 3306、PostgreSQL 5432)连接它。而跨VPC意味着网络路径变了,你需要确保这个连接请求能够穿越两个VPC之间的隔离墙,且只被授权方访问。
相关阅读:此处可内链到“VPC常见问题”专题。
第三课:跨VPC连接的几种主流方式(概念对比)
要让两个VPC互通,公有云提供了多种手段,就像给两个别墅修一条路,但每种路有不同属性和费用。
1. VPC对等连接(VPC Peering)
最简单直接的方式,在两个VPC之间建立一对一的网络连接。流量通过云内网传输,延迟低,不经过公网。配置时需要双方的路由表都加上对端网段的路由。但VPC对等连接不支持传递性——如果你有三个VPC,A连B、B连C,A并不能自动连C,每个对等关系都是独立的。
2. VPN连接
通过IPSec VPN在VPC和另一个VPC(或本地数据中心)之间建立加密隧道。这种方式适合临时、小规模或跨地域场景,但VPN的带宽和稳定性受限于公网质量。
3. 云企业网 / 云联网(Cloud Transit Gateway)
云商提供的高级组网产品,可以看成是“中枢路由器”,把所有VPC挂载到一个中心网络上,实现多VPC之间的全互联,并且支持路由自动下发、带宽共享等特性。如果你有多个VPC需要互通(比如开发、测试、生产多个VPC都访问同一个只读副本),云联网是更优雅的选择。
4. 公网暴露(不推荐)
为只读副本绑定公网IP,然后通过公网访问。虽然配置简单,但安全隐患极大——数据库端口直接暴露在公网上,容易遭受暴力破解、SQL注入等攻击,且公网延迟高、带宽不可控。在安全挂载的场景下,应坚决避免。
对于只读副本安全挂载,“VPC对等连接”是最常见、成本最低的方案,“云联网”适合规模较大的架构。本文后续步骤以VPC对等连接为例进行说明。
第四课:安全挂载的四个核心控制点
仅仅让网络连通还远远不够,安全挂载意味着你需要同时管理以下四个维度:
① 网络安全组(Security Group / 防火墙)
只读副本所在的VPC中,数据库实例通常会绑定一个安全组。你需要在这个安全组的入站规则中,允许对端VPC的CIDR(网段)或对端应用服务器的IP访问数据库端口。注意,写得太宽松(如0.0.0.0/0)是危险的,应精确到对端的子网。
② 路由表(Route Table)
在只读副本所在VPC的路由表中,需要添加一条指向对等连接的目的路由,使得回包能正确送达。同时,在客户端所在VPC的路由表中,也要添加去往只读副本VPC的路由。缺少任意一条,都会导致单向通。
③ 数据库的访问控制(白名单 / 认证)
大多数云数据库(如RDS)提供独立的IP白名单管理,即使网络层已打通,数据库默认仍然拒绝来自未知IP的连接。你需要将对端VPC的应用服务器IP或CIDR添加到数据库的白名单中。另外,数据库账号本身也要设置为允许从该IP段连接,例如MySQL的授权语法:GRANT ALL ON db.* TO 'user'@'192.168.1.%'。
④ 传输加密(SSL/TLS)
尽管VPC对等连接的网络流量在云内网中传输,不经过公网,但为了防止内部误操作或同一物理宿主机的其他租户嗅探,强烈建议开启数据库的SSL/TLS连接。云数据库通常提供免费的内网SSL证书,客户端配置CA证书即可。
补充参考:此处可内链到“VPC故障排查实例”。
第五课:流程演示(从创建到挂载)
实际操作要点
以下流程以MySQL只读副本为例,只讲概念步骤,不涉及具体命令行截图:
- 创建只读副本:在VPC-Prod中,基于主库创建一个只读副本(RDS实例),确保其与主库在同一个Region。复制延迟取决于主库写入量,一般在秒级。
- 建立VPC对等连接:在云控制台发起对等连接请求,源VPC为VPC-Prod,目标VPC为VPC-Analytics。确认后,两端VPC会各产生一个对等连接ID。
- 配置路由:在VPC-Prod的路由表中,添加一条目标网段为VPC-Analytics CIDR(如10.0.0.0/16)的路由,下一跳选择刚刚创建的对等连接。在VPC-Analytics的路由表中,添加一条目标网段为VPC-Prod CIDR(如172.16.0.0/16)的路由,下一跳相同。
- 配置安全组:找到只读副本的安全组,添加入站规则:协议TCP,端口3306,源为VPC-Analytics的CIDR或具体应用服务器的IP。注意,如果VPC-Analytics存在多个弹性云主机,最好使用CIDR,避免维护多个IP。
- 配置数据库白名单:在RDS控制台的“白名单”或“安全组”部分,添加允许访问的IP段。不同的云商入口不同,但核心都是将VPC-Analytics的CIDR加入。
- 创建数据库账号并授权:如果只读副本已有高权限账号,可以直接使用。但最佳实践是为跨VPC访问创建一个专用账号,并限制其源IP为对端CIDR。例如:
CREATE USER 'cross_vpc_reader'@'10.0.0.0/255.255.0.0' IDENTIFIED BY 'StrongPassword'; GRANT SELECT ON *.* TO 'cross_vpc_reader'@'10.0.0.0/255.255.0.0';。 - 在客户端侧测试:从VPC-Analytics的一台云主机上,使用mysql命令尝试连接只读副本的内网地址。如果配置正确,应能成功登录并执行SELECT。同时检查复制延迟是否在可接受范围内。
第六课:风险、验证与回滚
常见风险
- 路由冲突:两个VPC的CIDR不能重叠,否则建立对等连接时会提示冲突。如果已存在重叠,只能通过NAT或路由策略迂回,但架构复杂。
- 延迟增加:跨VPC的网络延迟比同一VPC内高一些(通常是1-3ms),对于极度延迟敏感的读查询(如实时风控)可能不适用。
- 安全组遗漏:只配置了路由但忘记开安全组,或者开了安全组但数据库白名单未更新,都会导致连接超时。
- 复制延迟导致数据不一致:只读副本默认是异步复制,当主库写入压力大时,副本数据可能落后几秒甚至几分钟。如果你的应用必须读到实时的最新数据,只读副本不适合。
验证方法
- 使用telnet或nc测试端口连通性:
telnet 只读副本内网IP 3306。如果成功,表示网络层已通。 - 使用数据库客户端登录后,执行
SHOW SLAVE STATUSG查看Seconds_Behind_Master,确认复制延迟。 - 执行一条INSERT写入主库,然后在只读副本上执行SELECT,验证数据是否生效(注意可能延迟)。
回滚方案
如果发现不安全或性能不符合要求,可以按以下顺序解除挂载:
- 先删除数据库白名单中对端CIDR的条目,阻断数据库层访问。
- 然后删除VPC对等连接中的路由条目,恢复网络隔离。
- 最后删除对等连接本身。整个过程可以分步操作,不会影响主库和已有业务(只读副本本身不提供服务则无关紧要)。
延伸阅读:此处可内链到“VPC配置案例”相关文章。
进阶阅读:此处可内链到“VPC性能优化”指南。
总结:把复杂问题拆解为网络+数据库两层
验证与回滚
跨VPC挂载数据库只读副本,本质上解决的是两个问题:如何让两个隔离的VPC网络能通信(网络层),以及如何只允许授权的客户端访问数据库实例(数据库层)。把这两个层面分开思考,配置就会清晰很多。对于新手,建议先从简单的VPC对等连接入手,等熟悉后再尝试云联网等高级方案。记住一个原则:最小授权——只允许需要的端口、需要的IP段、需要的SQL操作。安全是挂载的前提,性能是业务的保障。
希望这篇指南能帮你迈出跨VPC数据库架构的第一步。如果还有困惑,建议在云的测试账号里创建两个免费VPC亲手练一遍。
延伸阅读
