你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 服务总线异地复制(预览版)
服务总线异地复制功能是使 Azure 服务总线应用程序免受服务中断和灾难影响的选项之一,可复制元数据(实体、配置、属性)和数据(消息数据和消息属性/状态更改)。
注意
此功能适用于 Azure 服务总线的高级层级。
异地复制功能可确保命名空间的元数据和数据从主要区域持续复制到一个或多个次要区域。
- 队列、主题、订阅、筛选器。
- 驻留在实体中的数据。
- 针对命名空间中的消息执行的所有状态更改和属性更改。
- 命名空间配置。
注意
目前,仅支持单个次要区域。
此功能允许随时将任何次要区域提升为主要区域。 提升次要区域会将命名空间的名称重新指向所选次要区域,并在主要区域和次要区域之间切换角色。 提升几乎是在启动后立即发生的。
重要
- 此功能目前以公共预览版提供,因此不应在生产方案中使用。
- 该公共预览版目前支持以下区域。
区域 | 区域 | 区域 |
---|---|---|
澳大利亚中部 | 德国北部 | NorwayWest |
AustraliaCentral2 | GermanyWestCentral | 波兰中部 |
AustraliaEast | IsraelCentral | SouthAfricaNorth |
AustraliaSoutheast | ItalyNorth | SouthAfricaWest |
BrazilSoutheast | JapanEast | SoutheastAsia |
CanadaCentral | JapanWest | SouthIndia |
加拿大东部 | JioIndiaCentral | SpainCentral |
CentralIndia | JioIndiaWest | SwedenCentral |
CentralUS | KoreaCentral | 瑞士北部 |
CentralUSEUAP | KoreaSouth | 瑞士西部 |
EastAsia | MexicoCentral | UAECentral |
EastUS2 | NorthCentralUS | 阿拉伯联合酋长国北部 |
FranceCentral | NorthEurope | UKSouth |
FranceSouth | 挪威东部 | UKWest |
- 此功能目前在新的命名空间上可用。 如果命名空间之前启用了此功能,可以将其禁用(通过移除次要区域),然后重新启用。
- 当前不支持以下功能。 我们一直致力于向公共预览版引入更多功能,并将使用最新状态更新此列表。
- 大消息支持。
- VNET/高级网络功能(专用终结点、IP ACL、NSP、服务终结点)。
- 标识(MSI,禁用本地身份验证)和加密设置(客户管理的密钥 (CMK) 加密或自带密钥 (BYOK) 加密)。
- 自动缩放。
- 分区的命名空间。
- 将事件发送到事件网格。
- 此功能不能与 Azure 服务总线异地灾难恢复功能结合使用。
方案
异地复制功能可用于实现不同的方案,如下所述。
灾难恢复
数据和元数据在主要区域和次要区域之间持续同步。 如果某个区域滞后或不可用,则可以将次要区域提升为主要区域。 此提升可使新提升的区域中的工作负载不间断运行。 服务总线或工作负载内的其他服务的降级时,这种提升可能是必要的,特别是打算一起运行各个组件时。 根据严重性和受影响的服务,提升可能是计划的提升,也可能是强制提升。 在计划的提升中,传送中的消息在完成提升之前复制,而在强制提升中则会立即执行复制。
区域迁移
有时,需要迁移服务总线工作负载以在不同的区域中运行。 例如,当 Azure 添加的新区域在地理位置上离你的位置、用户或其他服务更近时。 或者,当运行大部分工作负载的区域发生转移时,可能需要进行迁移。 在这些情况下,异地复制功能也是一个很好的解决方案。 在这种情况下,你可以在现有命名空间上设置异地复制,并将所需的新区域作为次要区域,然后等待同步完成。 此时,你将开始有计划的提升,允许复制任何传送中的消息。 提升完成后,现在可以选择移除旧区域(现在是次要区域),并继续在所需区域运行工作负载。
基本概念
异地复制功能在主要-次要复制模型中实现元数据和数据复制。 在给定的时间,存在一个主要区域,同时为生产者和使用者提供服务。 次要区域充当热备用区域,这意味着无法与这些次要区域进行交互。 但是,它们的运行配置与主要区域相同,可以实现快速提升,这意味着提升完成后,工作负载可以立即继续运行。 异地复制功能适用于高级层级。
异地复制功能的一些关键方面包括:
- 服务总线服务跨区域执行元数据、消息数据以及消息状态和属性更改的完全托管复制,并遵守在命名空间配置的复制一致性。
- 单一命名空间主机名;成功配置启用了异地复制的命名空间后,用户可以在其客户端应用程序中使用命名空间主机名。 主机名的行为与配置的主要区域和次要区域无关,并且始终指向主要区域。
- 当客户发起提升时,主机名指向选择作为新主要区域的区域。 旧主要区域成为次要区域。
- 无法在次要区域上进行读取或写入。
- 同步和异步复制模式,有关进一步说明,请参阅此处。
- 客户管理的从主要区域到次要区域的提升,为解决中断提供完全的所有权和可见性。 有可用的指标,可以帮助从客户端自动完成提升。
- 次要区域的添加或移除可由客户决定。
复制模式
有两种复制模式:同步和异步。 了解这两种模式之间的差异非常重要。
异步复制
使用异步复制,所有请求都在主要区域中提交,然后向客户端发送确认。 复制到次要区域以异步方式进行。 用户可以配置可接受的最长滞后时间。 滞后时间是主要区域和次要区域上最新操作之间的服务端偏移量。 如果活动次要区域的滞后时间超出了用户配置的范围,主要区域会开始限制传入的请求。
同步复制
使用同步复制,所有请求都会复制到次要区域,次要区域必须先提交并确认操作,然后再在主要区域上提交。 因此,应用程序将以发布、复制、确认和提交的速度进行发布。 此外,这也意味着应用程序与这两个区域的可用性相关。 如果次要区域滞后或不可用,则不会确认和提交消息,并且主要区域会限制传入请求。
复制模式比较
使用同步复制:
- 由于分布式提交操作,延迟更长。
- 可用性与两个区域的可用性相关。
另一方面,同步复制为数据安全提供了最大保证。 如果你有同步复制,则在提交时,它会提交到为异地复制配置的所有区域中,从而提供最佳的数据保证。
使用异步复制:
- 延迟受到的影响最小。
- 次要区域的丢失不会立即影响可用性。 但是,一旦达到配置的最大复制滞后时间,可用性就会受到影响。
因此,它无法像同步复制那样绝对保证所有区域在提交数据之前都有数据,并且可能会发生数据丢失或重复。 但是,由于单个区域滞后或不可用时不再立即受到影响,因此应用程序可用性会提高,并且延迟也会降低。
功能 | 同步复制 | 异步复制 |
---|---|---|
延迟 | 由于分布式提交操作,延迟更长 | 影响最小 |
可用性 | 与次要区域的可用性相关 | 次要区域的丢失不会立即影响可用性 |
数据一致性 | 在确认之前,始终在两个区域中提交数据 | 在确认之前,仅在主要区域中提交数据 |
RPO(恢复点目标) | RPO 0,提升时无数据丢失 | RPO > 0,提升时可能会丢失数据 |
配置异地复制后,可以更改复制模式。 可以从同步更改为异步,也可以从异步更改为同步。 如果从异步更改为同步,则当滞后时间达到零时,次要区域会配置为同步。 如果你的运行由于任何原因而持续滞后,那么可能需要暂停发布服务器,以便滞后时间达到零,并且你的模式能够切换到同步。 启用同步复制而不是异步复制的原因与数据的重要性、特定的业务需求或合规性原因有关,而不是应用程序的可用性。
注意
如果次要区域滞后或不可用,则应用程序不再能够复制到该区域,并且一旦达到复制滞后时间时就会开始进行限制。 要继续在主要位置中使用命名空间,可以移除受影响的次要区域。 如果没有配置更多次要区域,则会在不启用异地复制的情况下继续使用命名空间。 可以随时添加额外的次要区域。
次要区域选择
要启用异地复制功能,需要使用已启用该功能的主要区域和次要区域。 异地复制功能取决于是否能够将已发布的消息从主要区域复制到次要区域。 次要区域位于另一大洲时,这会对从主要区域到次要区域的复制滞后产生重大影响。 如果出于可用性原因使用异地复制,则最好尽可能让次要区域位于同一大洲。 为了更好地了解地理距离导致的延迟,可以从 Azure 网络往返延迟统计信息了解详细信息。
异地复制管理
使用异地复制功能,客户可以配置要将元数据和数据复制到的次要区域。 因此,客户可以执行以下管理任务:
- 配置异地复制;在已启用异地复制功能的区域中,可以在任何新的或现有的命名空间上配置次要区域。
注意
目前,公共预览版仅支持新的命名空间。
- 配置复制一致性;同步和异步复制在配置异地复制时设置,但以后也可以进行切换。
- 触发提升;所有提升都是客户发起的。
- 移除次要区域;如果在任意时候想要移除次要区域,则可以这样做,此后次要区域中的数据将被删除。
安装
使用 Azure 门户
以下部分概述了如何通过 Microsoft Azure 门户在新命名空间上设置异地复制功能。
注意
在公共预览期间,此体验可能会发生变化。 我们将相应地更新此文档。
- 创建新的高级层级命名空间。
- 选中“复制(预览版)”部分下的“启用异地复制”复选框。
- 单击“添加次要区域”按钮,然后选择一个区域。
- 选中“同步复制”复选框,或者指定一个“异步复制 - 最大复制滞后时间”值(以秒为单位)。
使用 Bicep 模板
若要创建启用了异地复制功能的命名空间,请添加 geoDataReplication 属性部分。
param serviceBusName string
param primaryLocation string
param secondaryLocation string
param maxReplicationLagInSeconds int
resource sb 'Microsoft.ServiceBus/namespaces@2023-01-01-preview' = {
name: serviceBusName
location: primaryLocation
sku: {
name: 'Premium'
tier: 'Premium'
capacity: 1
}
properties: {
geoDataReplication: {
maxReplicationLagDurationInSeconds: maxReplicationLagInSeconds
locations: [
{
locationName: primaryLocation
roleType: 'Primary'
}
{
locationName: secondaryLocation
roleType: 'Secondary'
}
]
}
}
}
管理
创建启用了异地复制功能的命名空间后,可以从“复制(预览)”边栏选项卡管理该功能。
切换复制模式
要在复制模式之间切换或更新最大复制滞后时间,请单击“复制一致性”下的链接,然后单击复选框以启用/禁用同步复制,或更新文本框中的值以更改异步最大复制滞后时间。
删除次要区域
要移除次要区域,请单击该区域旁边的“...”(省略号),然后单击“删除”。 要删除该区域,请按照弹出边栏选项卡中的说明进行操作。
提升流
提升由客户手动触发(通过命令显式触发,或者通过客户拥有的触发了该命令的业务逻辑),从不会由 Azure 触发。 这为客户提供了对 Azure 主干的中断解决方法的完整所有权和可见性。 选择计划的提升时,服务会等待赶上复制滞后时间后再启动提升。 另一方面,当选择强制提升时,服务会立即启动提升。 从请求提升时开始到提升完成为止,命名空间处于只读模式。 启动计划的提升后,可以随时进行强制提升。 这样,当计划的故障转移时间超出预期时,用户就可以控制加快提升。
重要
使用强制提升时,任何尚未复制的数据都可能会丢失。
启动提升后:
主机名更新为指向次要区域,这可能需要几分钟时间。
注意
可以通过启动 ping 命令来检查当前主要区域:ping your-namespace-fully-qualified-name
客户端自动重新连接到次要区域。
可以使用监视系统或定制监视解决方案自动执行提升。 但是,这种自动执行需要额外的规划和工作,它超出了本文的讨论范围。
使用 Azure 门户
在门户中,单击“提升”图标,然后按照弹出边栏选项卡中的说明删除该区域。
使用 Azure CLI
执行 Azure CLI 命令以启动提升。 Force 属性是可选的,默认为 false。
az rest --method post --url https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.ServiceBus/namespaces/<namespaceName>/failover?api-version=2023-01-01-preview --body "{'properties': {'PrimaryLocation': '<newPrimaryocation>', 'api-version':'2023-01-01-preview', 'Force':'false'}}"
监视数据复制
用户可以通过监视 Log Analytics 中的复制滞后指标来监视复制作业的进度。
- 如监视 Azure 服务总线中所述在服务总线命名空间中启用指标日志。
- 启用指标日志后,需要先从命名空间生成数据并使用几分钟,然后才能开始查看日志。
- 要查看指标日志,请导航到服务总线的“监视”部分,然后单击“日志”边栏选项卡。 可以使用以下查询查找主要区域和次要区域之间的复制滞后时间(以秒为单位)。
AzureMetrics
| where TimeGenerated > ago(1h)
| where MetricName == "ReplicationLagDuration"
发布数据
发布应用程序可以通过启用了异地复制的命名空间的命名空间主机名将数据发布到异地复制的命名空间。 发布方法与非异地复制情况相同,不需要更改数据平面 SDK 或客户端应用程序。 在以下情况下,发布可能不可用:
- 请求提升次要区域后,现有主要区域会拒绝发布到服务总线的任何新消息,直到提升完成。
- 当主要区域和次要区域之间的复制滞后时间达到最大复制滞后持续时间时,发布服务器入口工作负载可能会受到限制。
发布服务器应用程序无法直接访问次要区域中的任何命名空间。
使用数据
使用应用程序可以通过启用了异地复制功能的命名空间的命名空间主机名来使用数据。 从提升启动到提升完成,不支持使用者操作。
注意事项
此版本需要注意以下事项:
- 在提升计划中,还应考虑时间因素。 例如,如果失去连接的时间超过 15 到 20 分钟,你可能会决定启动提升。
- 提升复杂的分布式基础结构应至少演练一次。
定价
服务总线的高级层级按消息传送单元定价。 使用异地复制功能,次要区域在与主要区域相同数量的 MU 上运行,定价根据 MU 总数计算。 此外,还会根据已发布的带宽乘以次要区域的数量来收取费用。 在早期公共预览版中,免收此项费用。
后续步骤
- 请参阅此处的异地复制 REST API 参考。
- 运行 GitHub 上的异地复制示例。
- 请参阅将消息发送到别名的异地复制示例。
若要了解有关服务总线消息传送的详细信息,请参阅以下文章: