将现有 Azure 服务总线标准命名空间迁移到高级层

以前,Azure 服务总线仅在标准层上提供命名空间。 命名空间是针对低吞吐量和开发人员环境进行了优化的多租户设置。 高级层以固定的价格为每个命名空间提供专用资源,使延迟可预测,并提高了吞吐量。 高级层针对高吞吐量以及需要其他企业功能的生产环境进行了优化。

本文介绍了如何将现有的标准层命名空间迁移到高级层。

警告

迁移适用于要升级到高级层的服务总线标准命名空间。 迁移工具不支持降级。 从标准级别迁移到高级级别期间,将创建可用于访问标准服务总线的 DNS 指针。 请注意,在迁移过程中,将创建一个 alternateName,表示指向旧服务总线的 DNS 命名空间的指针,并且该操作无法撤消。 任何类型的测试都应在测试环境中执行。

需要注意的一些要点:

  • 此迁移将就地进行,这意味着,现有的发送方和接收方应用程序不需要对代码或配置进行任何更改。 现有的连接字符串将自动指向新的高级命名空间。

  • 如果使用现有高级名称,则高级命名空间中应 没有实体,迁移才能成功。

  • 在迁移过程中,标准命名空间中的所有实体都将复制到高级命名空间。

  • 在高级层上,迁移支持每个消息传送单元包含 1,000 个实体。 若要确定你需要多少个消息传送单元,请从当前标准命名空间上的实体数开始。

  • 不能直接从基本层迁移到高级层,但可以间接地实现这种迁移:先从基本层迁移到标准层,然后从标准层迁移到高级层。

  • 不会迁移基于角色的访问控制 (RBAC) 设置,因此你需要在迁移后手动添加它们。

迁移步骤

迁移过程有一些相关条件。 请熟悉以下步骤以降低出错的可能性。 这些步骤概述了迁移过程,后面的部分将详细列出每个步骤。

  1. 创建新的高级命名空间。 使用以下 CLI 或本文中的Azure 门户说明完成接下来的三个步骤。
  2. 将标准和高级命名空间相互配对。
  3. 将标准命名空间中的实体同步(复制)到高级命名空间。
  4. 提交迁移。
  5. 使用命名空间在迁移后的名称清空标准命名空间中的实体。
  6. 删除标准命名空间。

重要

提交迁移后,访问旧的标准命名空间并清空队列和订阅。 清空消息后,可将其发送到新的高级命名空间,供接收方应用程序进行处理。 清空队列和订阅后,我们建议删除旧的标准命名空间。

使用 Azure CLI 或 PowerShell 进行迁移

若要使用 Azure CLI 或 PowerShell 工具将服务总线标准命名空间迁移到高级命名空间,请执行以下步骤。

  1. 创建新的服务总线高级命名空间。 可以引用 Azure 资源管理器模板使用 Azure 门户。 对于 serviceBusSku 参数,请确保选择 premium

  2. 设置以下环境变量以简化迁移命令。 可以通过导航到 Azure 门户中的命名空间并复制类似于以下示例的 URL 部分来获取高级命名空间的 Azure 资源管理器 ID:/subscriptions/00000000-0000-0000-0000-00000000000000/resourceGroups/contosoresourcegroup/providers/Microsoft.ServiceBus/namespaces/contosopremiumnamespace

    resourceGroup=<resource group for the standard namespace>
    standardNamespace=<standard namespace to migrate>
    premiumNamespaceArmId=<Azure Resource Manager ID of the premium namespace to migrate to>
    postMigrationDnsName=<post migration DNS name entry to access the standard namespace>
    

    重要

    迁移后,将使用迁移后的别名/名称 (post_migration_dns_name) 来访问旧的标准命名空间。 使用此别名/名称清空队列和订阅,然后删除命名空间。

  3. 将标准和高级命名空间配对,并使用以下命令开始同步:

    az servicebus migration start --resource-group $resourceGroup --name $standardNamespace --target-namespace $premiumNamespaceArmId --post-migration-name $postMigrationDnsName
    
  4. 使用以下命令检查迁移状态:

    az servicebus migration show --resource-group $resourceGroup --name $standardNamespace
    

    如果看到以下值,则认为迁移已完成:

    • MigrationState="Active"
    • pendingReplicationsOperationsCount=0
    • provisioningState="Succeeded"

    此命令还会显示迁移配置。 检查并确保正确设置了值。 另外,请在门户中检查高级命名空间,确保已创建所有队列和主题,并且这些队列和主题与标准命名空间中的内容匹配。

  5. 执行以下 complete 命令提交迁移:

    az servicebus migration complete --resource-group $resourceGroup --name $standardNamespace
    

使用 Azure 门户进行迁移

使用 Azure 门户进行迁移时的逻辑流与使用命令进行迁移时相同。 执行以下步骤以使用 Azure 门户进行迁移。

  1. 在左侧窗格中的“导航”菜单中,选择“迁移到高级层”。 选择“开始”按钮以转到下一页。 该图显示“迁移到高级层”页。

  2. 你会看到以下“设置命名空间”页。

    该图显示“设置命名空间”页。

  3. 在“设置命名空间”页上,执行以下步骤之一:

    1. 如果选择“创建新的高级命名空间”,则请执行以下步骤:
      1. 在“创建命名空间”页上,输入命名空间名称,然后选择“查看 + 创建”。

      2. 在“查看 + 创建”页面上,选择“创建”。

        该图显示“创建命名空间”页。

    2. 如果选择“选择现有的空高级命名空间”,请执行以下操作:
      1. 选择具有命名空间的 Azure 订阅和资源组。

      2. 然后,选择高级命名空间。

      3. 然后单击“选择”。

        该图显示选择了现有高级命名空间。

  4. 输入一个“迁移后名称”,然后选择“下一步”。 迁移完成后,你将使用此名称来访问标准命名空间。

    该图显示标准命名空间的迁移后名称。

  5. 选择“开始同步”,以在标准命名空间和高级命名空间之间同步实体。

    该图显示“开始同步”按钮。

  6. 在对话框中选择“是”以确认并开始同步,然后等待同步完成。 然后,选择“下一步” 。

    重要

    如果出于任何原因需要中止迁移,请查看本文档的“常见问题解答”部分中的中止流。

  7. 在“切换”页上选择“完成迁移”。

    该图显示迁移向导的“切换”页。

  8. 选择“是”以确认将标准命名空间切换到高级命名空间。 切换完成后,标准命名空间的 DNS 名称将指向高级命名空间。 无法撤消此操作。 迁移完成后,会看到“成功”页。

    该图显示“成功”页。

注意事项

Azure 服务总线高级层不支持由 Azure 服务总线标准层提供的某些功能。 这是设计使然,因为高级层提供专用资源来使吞吐量和延迟可预测。

以下是高级版不支持的功能及其缓解措施的概述。

快速实体

高级层不支持不向存储提交任何消息数据的快速实体。 专用资源可以显著提高吞吐量,同时确保数据持久保存,这符合任何企业消息传送系统的预期。

在迁移过程中,将在高级命名空间中以非快速实体的形式创建标准命名空间中的任何快速实体。

如果利用 Azure 资源管理器模板,请确保从部署配置中移除“enableExpress”标志,以便自动化工作流能够正常执行而不出错。

RBAC 设置

命名空间中的基于角色的访问控制 (RBAC) 设置不会迁移到高级命名空间。 迁移后需要手动添加它们。

常见问题

提交迁移后会发生什么情况?

提交迁移后,指向标准命名空间的连接字符串将指向高级命名空间。

发送方和接收方应用程序将断开与标准命名空间的连接,并自动重新连接到高级命名空间。

如果使用 Azure 资源管理器 ID 进行配置,而不是使用连接字符串(例如,作为事件网格订阅的目标),则需要将 Azure 资源管理器 ID 更新为高级命名空间的 ID。

完成从标准到高级命名空间的迁移后需要执行哪些操作?

从标准到高级命名空间的迁移可确保将标准命名空间中的实体元数据(例如主题、订阅和筛选器)复制到高级命名空间。 已提交到标准命名空间的消息数据不会从标准命名空间复制到高级命名空间。

在迁移进行期间,可能有一些消息发送并提交到了标准命名空间。 请从标准命名空间中手动清空这些消息,并手动将其发送到高级命名空间。 要手动清空消息,请通过某个控制台应用或脚本,使用在迁移命令中指定的迁移后 DNS 名称来清空标准命名空间实体。 将这些消息发送到高级命名空间,以便接收方能够对其进行处理。

清空消息后,删除标准命名空间。

重要

清空标准命名空间中的消息后,删除标准命名空间。 此操作非常重要,因为最初引用标准命名空间的连接字符串现在引用高级命名空间。 你将不再需要标准命名空间。 删除已迁移的标准命名空间有助于避免今后发生混淆。

停机时间预计有多长?

迁移过程会尽量减少应用程序的预计停机时间。 它将使用发送方和接收方应用程序用来指向新高级命名空间的连接字符串,从而减少停机时间。

应用程序经历的停机时间限制为更新 DNS 条目以指向高级命名空间所需的时间。 停机时间大约为 5 分钟。

执行迁移时是否需要更改任何配置?

执行迁移不需要更改任何代码或配置。 标准命名空间的 DNS 名称将指向高级命名空间。 迁移过程会自动映射发送方和接收方应用程序用来访问标准命名空间的连接字符串,使其充当高级命名空间的别名。

如何中止迁移?

可以使用 Abort 命令或 Azure 门户来中止迁移。

Azure CLI

az servicebus migration abort --resource-group $resourceGroup --name $standardNamespace

Azure 门户

在“同步实体”页上选择“中止”。

该图显示“中止”页。

完成后,会看到以下页面:

该图显示“中止操作完成”页。

如果中止迁移,会发生什么情况?

中止迁移过程时,会中止将标准命名空间中的实体(主题、订阅和筛选器)复制到高级命名空间的过程,并破坏配对。

连接字符串不会更新为指向高级命名空间。 现有应用程序像在开始迁移之前那样继续正常工作。

但是,这不会删除高级命名空间中的实体,也不会删除高级命名空间。 如果你决定不继续迁移,请手动删除这些实体。

重要

如果你决定中止迁移,请删除为迁移预配的高级命名空间,以免产生资源费用。

我不想清空消息。 我该怎么办?

在迁移正在进行且即将提交迁移之前,发送方应用程序可能已发送一些消息并且这些消息已提交到标准命名空间中的存储。

在迁移过程中,实际的消息数据/有效负载不会从标准命名空间复制到高级命名空间。 必须手动清空消息,然后将其发送到高级命名空间。

但是,如果你可以在计划内维护/保养时段进行迁移,并且你不想手动清空并发送消息,请执行以下步骤:

  1. 停止发送方应用程序。 接收方应用程序将处理当前位于标准命名空间中的消息,并清空队列。

  2. 在清空标准命名空间中的队列和订阅后,按照前面所述的过程执行从标准到高级命名空间的迁移。

  3. 迁移完成后,可以重启发送方应用程序。

  4. 现在,发送方和接收方会自动连接到高级命名空间。

    注意

    无需停止接收方应用程序即可迁移。

    迁移完成后,接收方应用程序将断开到标准命名空间的连接,并自动连接到高级命名空间。

后续步骤