已配置Azure VNet对等互连时,如何为托管SQL实例启用异地复制?
解决Azure托管SQL异地复制与VNet Peering共存的问题
这是个很典型的Azure网络架构冲突场景,我来给你梳理几个可行的解决思路,既能保持应用和数据库分属不同VNet的架构,又能顺利启用SQL异地复制:
先搞清楚报错的根源
你遇到的ParentVnetAlreadyUsesRemoteGateways错误,本质是Azure的VNet网络规则限制:当一个VNet通过对等互连(Peering)开启了Use Remote Gateways选项时,这个VNet就无法再创建本地的Virtual Network Gateway了——因为它已经允许使用对等VNet的网关资源,二者不能同时存在。
方案一:调整现有VNet Peering的网关配置(最便捷的方案)
- 登录Azure门户,找到应用服务器VNet和SQL实例VNet之间的对等互连连接(
peer-to-app-servers) - 检查SQL实例VNet这边的peering设置,看是否开启了
Use Remote Gateways选项 - 如果开启了,直接关闭这个选项(注意:提前确认应用服务器VNet并没有通过自身网关给SQL VNet提供路由,否则关闭后会影响现有连通性;如果应用VNet本身没有网关,这个操作完全安全)
- 关闭后,就可以正常给SQL实例VNet创建Virtual Network Gateway,进而搭建异地复制所需的跨区域Connection了
方案二:改用VNet-to-VNet VPN替代现有Peering
如果因为业务原因不能修改现有Peering的网关设置,可以考虑替换网络连接方式:
- 先删除应用和SQL VNet之间的现有Peering
- 分别给应用服务器VNet和SQL实例VNet创建Virtual Network Gateway
- 建立两个网关之间的VNet-to-VNet VPN连接
- 完成后,SQL实例VNet的网关既可以和异地区域的SQL网关建立异地复制连接,又能通过VPN保持和应用VNet的连通
- 注意:这个方案需要调整现有网络架构,可能需要短时间的停机维护,务必提前规划
方案三:用Azure Private Link替代VNet Peering(更安全的长期方案)
如果不想改动现有SQL VNet的网络配置,可以考虑用Private Link来实现应用到SQL的访问:
- 在托管SQL实例上创建Private Endpoint,并将其关联到应用服务器VNet的子网中
- 这样应用服务器可以通过Private Endpoint直接访问SQL实例,不需要依赖VNet Peering
- 此时SQL实例VNet不受Peering的网关限制,可以自由创建本地网关,搭建异地复制所需的跨区域连接
- 优势:Private Link是点对点的安全访问,不会暴露整个VNet的网络,符合云原生的安全架构
验证步骤
不管选择哪种方案,完成配置后记得做以下验证:
- 确认应用服务器依然能正常访问现有SQL实例
- 确认SQL实例VNet的网关和异地区域的SQL网关成功建立Connection
- 启用异地复制后,检查同步状态是否正常
内容的提问来源于stack exchange,提问作者Faizuddin Mohammed
相关产品推荐
相关产品推荐

