将资源移动到新区域 - Azure SQL 托管实例

适用于:Azure SQL 托管实例

本文介绍讲解将 Azure SQL 托管实例迁移到新区域的一般工作流。

概述

在多种情况下,可能需要将现有托管实例从一个区域移到另一个区域。 例如,你要将业务拓展到新的区域,并希望根据新的客户群对业务进行优化。 或者出于合规性原因,需要将运营部门转移到另一个区域。 或者,Azure 开通了距离更近、可改善客户体验的新区域。

将资源移到不同区域的常规工作流包括以下步骤:

  1. 检查是否符合移动的先决条件。
  2. 准备在范围内移动资源。
  3. 监视准备过程。
  4. 测试移动过程。
  5. 启动实际移动。
  6. 删除源区域中的资源。

验证必备组件

  1. 对于每个源托管实例,请在目标区域中创建一个具有相同大小的实例。
  2. 为托管实例配置网络。 有关详细信息,请参阅网络配置
  3. 使用正确的登录名配置目标 master 数据库。 如果你不是订阅管理员或 Azure SQL 托管实例管理员,请要求管理员分配你所需的权限。
  4. 如果你的数据库已通过透明数据加密 (TDE) 进行加密并使用 Azure Key Vault 中你自己的加密密钥(BYOK 或客户管理的密钥),请确保在目标区域中预配正确的加密材料。
    • 为此,最简单的方法是将现有密钥保管库中的加密密钥(在源实例上用作 TDE 保护器)添加到目标实例,然后将该密钥设置为目标实例上的 TDE 保护器,因为一个区域中的实例现在可以连接到任何其他区域中的密钥保管库。
    • 为了确保目标实例能够访问旧加密密钥(还原数据库备份时需要用到),最佳做法在源实例上运行 Get-AzSqlServerKeyVaultKey cmdlet 或在源托管实例上运行 Get-AzSqlInstanceKeyVaultKey cmdlet 以返回可用密钥列表,然后将这些密钥添加到目标实例。
    • 有关在目标实例上配置客户管理的 TDE 的详细信息和最佳做法,请参阅使用 Azure Key Vault 中客户管理的密钥进行 Azure SQL 透明数据加密
  5. 如果为托管实例启用了审核,请确保:
    • 已将包含现有日志的存储容器或事件中心移到目标区域。
    • 已在目标实例上配置审核。 有关详细信息,请参阅 SQL 托管实例的审核
  6. 如果实例具有长期保留策略 (LTR),则现有的 LTR 备份将与当前实例保持关联。 由于目标实例不同,因此可以使用源实例访问源区域中的旧 LTR 备份,即使删除了该实例,也可以做到。

注意

不支持在区域之间迁移具有现有 LTR 备份的实例,因为这需要将 LTR 备份移动到目标实例,而这在目前无法实现。

准备资源

在每个源托管实例与相应的 Azure SQL 托管实例的目标实例之间创建故障转移组。

系统自动启动每个实例上所有数据库的复制。 有关详细信息,请参阅故障转移组

监视准备过程

可以定期调用 Get-AzSqlDatabaseInstanceFailoverGroup 来监视数据库从源到目标服务器的复制。 Get-AzSqlDatabaseInstanceFailoverGroup 的输出对象包含 ReplicationState 的属性:

  • ReplicationState = CATCH_UP 表示数据库已同步,可以安全地执行故障转移。
  • ReplicationState = SEEDING 表示数据库尚未设定种子,尝试故障转移会失败。

测试同步

“ReplicationState”变为 CATCH_UP 后,使用辅助终结点 <fog-name>.secondary.<zone_id>.database.chinacloudapi.cn 连接到异地辅助数据库,并对数据库执行任何查询,以确保连接性、安全性配置和数据复制正常。

启动移动

  1. 使用辅助终结点 <fog-name>.secondary.<zone_id>.database.chinacloudapi.cn 连接到目标托管实例。
  2. 在完全同步的情况下,使用 Switch-AzSqlDatabaseInstanceFailoverGroup 将辅助托管实例切换为主托管实例。 此操作成功,或者回滚。
  3. 使用 nslook up <fog-name>.secondary.<zone_id>.database.chinacloudapi.cn 验证该命令是否已成功完成,确定 DNS CNAME 条目指向目标区域的 IP 地址。 如果 switch 命令失败,不会更新 CNAME。

删除源托管实例

移动操作完成后,删除源区域中的资源以避免产生不必要的费用。

  1. 使用 Remove-AzSqlDatabaseInstanceFailoverGroup 删除故障转移组。 这会删除故障转移组配置,并终止两个实例之间的异地复制链接。
  2. 使用 Remove-AzSqlInstance 删除源托管实例。
  3. 删除资源组中的任何其他资源,例如虚拟网络和安全组。