跨子网移动 Azure SQL 托管实例

适用于:Azure SQL 托管实例

Azure SQL 托管实例必须部署在 Azure 虚拟网络中的专用子网内。 可以在子网中部署的托管实例数取决于该子网的大小(子网范围)。

本文介绍如何将托管实例从一个子网移到另一个子网(在同一个 VNet 或不同的 VNet 中),类似于缩放 vCore 或更改实例服务层级。 在移动过程中,即使长时间运行的事务被中断,SQL 托管实例也仍保持可用,只是在更新结束时,故障转移会导致短暂的停机时间 - 通常不超过 10 秒。

将实例移到另一个子网会触发以下虚拟群集操作:

  • 虚拟群集将生成目标子网中的底层基础结构或调整其大小。
  • 虚拟群集将在源子网中删除或进行碎片整理。

在将实例移到另一个子网之前,请熟悉以下概念:

要求和限制

若要部署托管实例或将其移到另一个子网,目标子网必须满足特定的网络要求

子网就绪状态

在移动托管实例之前,请确认子网已标记为“对于托管实例已准备就绪”。

在 Azure 门户的“虚拟网络”UI 中,满足托管实例先决条件的虚拟网络将分类为“对于托管实例已准备就绪” 。 包含托管实例已部署到的子网的虚拟网络名称前面会显示一个 SQL 托管实例图标。 已准备好用于托管实例的空子网会显示虚拟网络子网图标。

标记为“未就绪”的子网不满足 SQL 托管实例部署的所有要求。 使用子网名称右侧的信息图标,了解子网未就绪的原因以及子网是否满足网络要求。 这些要求包括:

  • 对 Microsoft.Sql/managedInstances 资源提供程序的委托
  • 附加路由表
  • 附加网络安全组

如果子网是某个其他的虚拟网络的一部分,则额外要求为

  • 当前虚拟网络和目标虚拟网络之间的双向对等互连
  • 当前子网和目标子网使用单独的路由表和网络安全组。

满足所有要求后,子网将从“未就绪”转到“对于托管实例已准备就绪”类别,并可用于托管实例。

已在使用的子网(用于实例部署的子网不能包含其他资源),或者具有不同的 DNS 区域的子网(跨子网实例移动限制)始终属于“未就绪”类别。

Azure SQL 托管实例子网选项的屏幕截图。

根据子网的状态和指定值,可对目标子网进行以下调整:

  • 对于托管实例已准备就绪(包含现有 SQL 托管实例):不进行任何调整。 这些子网已包含托管实例,对子网进行任何更改可能会影响现有实例。
  • 对于托管实例已准备就绪(空):工作流将验证网络安全组和路由表中的所有所需规则,并添加任何必要但缺失的规则。 1

注意

1 添加到源子网配置的自定义规则不会复制到目标子网。 必须将源子网配置的任何自定义项手动复制到目标子网。 实现此目的的一种方法是对源子网和目标子网使用相同的路由表和网络安全组。

目标子网限制

为现有实例选择目标子网时,请注意以下限制:

  • SQL 托管实例可以移到以下任一子网:

    • 在当前使用的同一虚拟网络中,
    • 对等虚拟网络中,如果移动到另一个虚拟网络中的子网。
  • 目标子网中实例的 DNS 区域必须与要移动的实例的 DNS 区域匹配。 如果计划移动到非空子网,则此限制适用。

    • 可以专门准备目标子网,以保留要移动的 SQL 托管实例的 DNS 区域。 可以通过在空子网中创建新的 SQL 托管实例并在创建请求中提供 dnsZonePartner 参数来完成准备工作。 此参数接受 SQL 托管实例的 ID 作为值,在这种情况下,你可以使用稍后将移到新子网1的实例。

注意

1 除此方法外,你没有其他方法来指定 SQL 托管实例的 DNS 区域,因为它是随机生成的。 此外,到目前为止,还不存在更新现有 SQL 托管实例的 DNS 区域的方法。

  • 若要迁移包含故障转移组的 SQL 托管实例,需要满足以下先决条件:
    • 目标子网需要与源子网具有相同的、用于故障转移组复制的安全规则:在网络安全组 (NSG) 中打开入站和出站端口 5022 以及范围 11000~11999,以便能够从另一个托管实例子网(保存故障转移组副本的子网)进行连接,从而允许在两个实例之间传送复制流量。
    • 目标子网的地址范围不能与保存故障转移组辅助实例副本的子网重叠。 例如,如果 MI1 在子网 S1 中,故障转移组中的辅助实例是子网 S2 中的 MI2。 我们想要将 MI1 移到子网 S3。 那么,子网 S3 的地址范围不能与子网 S2 重叠。

若要详细了解如何为故障转移组配置网络,请查看在托管实例之间启用异地复制

操作步骤

下表详细说明了在执行实例移动操作期间发生的操作步骤:

步骤名称 步骤说明
请求验证 验证提交的参数。 如果检测到配置错误,操作将会失败并显示错误。
虚拟群集大小调整/创建 根据目标子网的状态,将创建虚拟群集或调整其大小。
新实例启动 SQL 进程在目标子网中部署的虚拟群集上启动。
执行数据库文件种子设定/附加数据库文件 根据服务层级,将为数据库设定种子或附加数据库文件。
故障转移准备和故障转移 在为数据设定种子或重新附加数据库文件后,系统将为故障转移做好准备。 一切准备就绪后,系统将执行故障转移,在此过程中会出现不超过 10 秒的短暂停机。
清理旧的 SQL 实例 从源虚拟群集中删除旧的 SQL 进程。
虚拟群集的删除 如果旧实例是源子网中的最后一个实例,则最后一个步骤将以同步方式删除虚拟群集。 否则,将以异步方式对虚拟群集进行碎片整理。

Azure SQL 托管实例管理操作概述中可以找到操作步骤的详细说明

移动实例

跨子网实例移动是实例更新操作的一部分。 现有实例更新 API、Azure PowerShell 和 Azure CLI 命令已通过子网 ID 属性得到增强。

在 Azure 门户中,使用“网络”窗格上的子网字段将实例移到目标子网。 使用 Azure PowerShell 或 Azure CLI 时,请在 update 命令中提供不同的子网 ID,以将实例从现有子网移到目标子网。

有关实例管理命令的完整参考,请参阅 Azure SQL 托管实例的管理 API 参考

用于选择实例子网的选项位于 Azure 门户的“网络”窗格上。 选择子网并保存更改后,实例移动操作随即开始。

移动操作的第一步是为部署准备目标子网,这可能需要几分钟时间。 子网准备就绪后,实例移动管理操作将启动并在 Azure 门户中可见。

如何在 SQL 托管实例“网络”窗格上选择子网

从 Azure 门户的“概述”窗格监视实例移动操作。 选择通知以打开另一个窗格,其中包含了有关当前步骤和步骤总数的信息,以及一个用于取消操作的按钮。

显示“概述页面”的屏幕截图,可在其中监视移动操作并取消它。

后续步骤