你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为 Azure 托管 Redis(预览)实例配置活动异地复制

本文介绍了如何使用 Azure 门户配置活动异地复制的缓存。

活动异地复制可将多达五个 Azure 托管 Redis(预览)实例组合到一个跨 Azure 区域的单个缓存中。 所有实例都充当本地主缓存。 应用程序决定将哪个或哪些实例用于读取和写入请求。

注意

Azure 区域之间的数据传输按标准带宽费率收费。

活动异地复制的工作原理

活动异地复制使用无冲突复制数据类型 (CRDT) 在可跨大陆分布的 Redis 实例之间无缝分发数据。 这些实例以“主动-主动”配置连接,对其中一个实例的写入操作会自动反映在同一异地复制组中的其他实例上。 这种双向数据复制不同于单向“主动-被动”复制方法,在单向“主动-被动”复制方法中,数据是从主副本复制到异地副本,而不是反向复制。 这是一种功能强大的工具,通常以多种方式使用:

  • 通过将缓存分布到更靠近用户的位置来提供本地延迟。 通过使用活动异地复制的 Redis 实例网络,可以将缓存放置在每个区域中离用户更近的位置,从而降低延迟并提高应用性能。
  • 同步全球应用程序。 由于异地复制的缓存看起来像单一的 Redis 实例,因此你可以在全球范围内分发数据,而无需按区域对数据进行分段。 例如,可以使用单个 Redis 有序集来为全球所有用户提供游戏排行榜,而不是为每个地理区域提供单独的排行榜。
  • 减少区域中断导致的停机时间和风险。 由于异地复制组中的每个 Redis 实例会不断根据组内其他实例的最新数据进行更新,所以在某个区域发生中断时,数据能得到很好的保存。 应用程序可以暂时切换到使用该组中的其他实例之一,当该区域恢复在线状态时,那里的 Redis 实例将自动从其他异地复制缓存中重新加载数据。

有关活动异地复制工作原理的更详细剖析,请参阅(基于 CRDTS 的)“主动-主动”异地分发

可用范围

内存优化,均衡,计算优化 闪存优化
可用 是(B0 和 B1 除外)

重要

均衡 B0 和 B1 SKU 不支持活动异地复制。

活动异地复制先决条件

使用活动异地复制时存在一些限制:

  • 活动异地复制仅在 Azure 托管 Redis 处于高可用性配置(即正在使用复制)时受支持。
  • 仅支持 RediSearchRedisJSON 模块
  • 在“闪存优化”层上,只能使用“无逐出”逐出策略。 其他层支持所有逐出策略。
  • 不支持数据持久性,因为活动异地复制提供了卓越的体验。
  • 异地复制组中的所有缓存必须具有相同的配置。 例如,所有缓存必须具有相同的 SKU、容量、逐出策略、群集策略、模块和 TLS 设置。
  • 如果一个异地复制组中的一个实例进行了缩放,那么该组中的其他实例必须缩放到相同大小,才能进行任何其他缩放。 有关详细信息,请参阅在异地复制组中缩放实例
  • 使用活动异地复制时,不能使用 FLUSHALLFLUSHDB Redis 命令。 禁止命令可防止意外删除数据。 请改用刷新操作

创建或加入活动异地复制组

  1. 创建新的 Azure 托管 Redis 资源时,选择“高级”选项卡。完成表单的第一部分,包括群集策略。 有关选择“群集策略”的详细信息,请参阅 Azure 托管 Redis 中的群集

  2. 选择“配置”以设置“活动异地复制” 。

    创建新 Redis 缓存页的“高级”选项卡的屏幕截图。

  3. 为第一个缓存实例新建复制组。 或从列表中选择一个现有复制组。

    显示复制组的屏幕截图。

  4. 选择“配置”以完成。

  5. 等待第一个缓存创建成功。 完成后,在“活动异地复制”部分,你将看到已设置为“已配置”。 对异地复制组中的每个缓存实例重复执行上述步骤。

    显示已配置活动异地复制的屏幕截图。

将现有实例添加到活动异地复制组

要将现有的缓存实例添加到活动异地复制组,可以使用 REST API 执行强制链接操作

链接的缓存实例中的所有数据都将被丢弃。 在加入异地复制组的过程中,该实例也将暂时不可用,持续几分钟时间。 门户和 CLI 支持尚不适用于此功能。

从活动异地复制组中删除

若要从活动异地复制组中删除缓存实例,只需删除相应实例即可。 其余实例随后会自动重新配置自身。

活动异地复制是在使用 Azure 托管 Redis 时显著提高可用性的强大功能。 但是,如果出现区域性中断,应该采取措施准备缓存。

例如,考虑以下提示:

  • 如果某个区域出现故障,请提前确定要切换到的异地复制组中的其他缓存。
  • 确保设置了防火墙,以便任何应用程序和客户端都可以访问标识的备份缓存。
  • 异地复制组中的每个缓存都有自己的访问密钥。 确定应用程序在定位备份缓存时如何切换到不同的访问密钥。
  • 如果异地复制组中的一个缓存出现故障,异地复制组中的所有缓存中就会开始累积元数据。 在写入可以再次同步到所有缓存之前,不能放弃元数据。 可通过强制取消链接关闭的缓存来防止元数据累积。 考虑监视缓存中的可用内存,如果存在内存压力,则取消链接,尤其是对于写入密集型工作负载。

也可以使用断路器模式。 使用该模式自动将流量从遇到区域故障的缓存重定向到同一异地复制组中的备份缓存。 使用 Azure 服务,如 Azure 流量管理器Azure 负载均衡器来启用重定向。

如果复制组中的其中一个缓存因区域中断而不可用,你可以将不可用的缓存强制从复制组中删除。

应删除不可用的缓存,因为复制组中剩余的缓存将开始存储尚未共享到不可用缓存的元数据。 发生这种情况时,复制组中的可用缓存可能会耗尽内存。

  1. 转到 Azure 门户,在复制组中选择一个仍然可用的缓存。

  2. 选择左侧“资源”菜单中的“活动异地复制”,查看工作窗格中的设置。

    活动异地复制组的屏幕截图。

  3. 通过选中此框,选择需要强制取消链接的缓存。

  4. 选择“强制取消链接”,然后选择“确定”进行确认。

    活动异地复制中取消链接的屏幕截图。

  5. 受影响区域的可用性还原后,需要删除受影响的缓存并重新创建该缓存,以将其添加回复制组。

使用 Azure CLI 或 PowerShell 设置活动异地复制

Azure CLI

使用 Azure CLI 创建新的缓存和异地复制组,或将新缓存添加到现有异地复制组。 有关详细信息,请参阅 az redisenterprise create

使用 Azure CLI 在新的异地复制组中创建新的 Azure 托管 Redis 实例

此示例将在美国东部区域创建一个名为 Cache1 的新的 Azure 托管 Redis 均衡 B10 实例。 然后,将缓存添加到名为 replicationGroup 的新活动异地复制组:

az redisenterprise create --location "East US" --cluster-name "Cache1" --sku "Balanced_B10" --resource-group "myResourceGroup" --group-nickname "replicationGroup" --linked-databases id="/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default"

要正确配置活动异地复制,必须使用 --linked-databases 参数添加正在创建的缓存实例的 ID。 该 ID 的格式为:

/subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group-name>/providers/Microsoft.Cache/redisEnterprise/<your-cache-name>/databases/default

使用 Azure CLI 在现有的异地复制组中创建新的 Azure 托管 Redis 实例

此示例在美国西部区域创建名为 Cache2 的新的均衡 B10 缓存实例。 然后,该脚本会将缓存添加到在上一过程中创建的 replicationGroup 活动异地复制组。 这样,它就可以通过主动-主动配置与 Cache1 链接。

az redisenterprise create --location "West US" --cluster-name "Cache2" --sku "Balanced_B10" --resource-group "myResourceGroup" --group-nickname "replicationGroup" --linked-databases id="/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default" --linked-databases id="/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache2/databases/default"

与以前一样,需要使用 --linked-databases 参数列出 Cache1 和 Cache2。

Azure PowerShell

使用 Azure PowerShell 创建新的缓存和异地复制组,或将新的缓存添加到现有异地复制组。 有关详细信息,请参阅 New-AzRedisEnterpriseCache

使用 PowerShell 在新的异地复制组中创建新的 Azure 托管 Redis 实例

此示例将在美国东部区域创建一个名为 Cache1 的新的 Azure 托管 Redis 均衡 B10 缓存实例。 然后,将缓存添加到名为 replicationGroup 的新活动异地复制组:

New-AzRedisEnterpriseCache -Name "Cache1" -ResourceGroupName "myResourceGroup" -Location "East US" -Sku "Balanced_B10" -GroupNickname "replicationGroup" -LinkedDatabase '{id:"/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default"}'

要正确配置活动异地复制,必须使用 -LinkedDatabase 参数添加正在创建的缓存实例的 ID。 该 ID 的格式为:

/subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group-name>/providers/Microsoft.Cache/redisEnterprise/<your-cache-name>/databases/default

使用 PowerShell 在现有的异地复制组中创建新的 Azure 托管 Redis 实例

此示例在美国西部区域创建名为 Cache2 的新的均衡 B10 缓存实例。 然后,该脚本会将缓存添加到在上一过程中创建的“replicationGroup”活动异地复制组。 结果是两个缓存(Cache1 和 Cache2)在主动-主动配置中链接。

New-AzRedisEnterpriseCache -Name "Cache2" -ResourceGroupName "myResourceGroup" -Location "West US" -Sku "Balanced_B10" -GroupNickname "replicationGroup" -LinkedDatabase '{id:"/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default"}', '{id:"/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache2/databases/default"}'

与以前一样,需要使用 -LinkedDatabase 参数列出 Cache1 和 Cache2。

缩放异地复制组中的实例

可以扩展配置为使用活动异地复制的实例。 但是,具有不同缓存大小的异地复制组可能会引发问题。 若要防止出现这些问题,异地复制组中所有缓存的大小和性能层必须相同。

由于缩放需要更改大小或层级,并且很难同时缩放异地复制组中的所有实例,因此 Azure 托管 Redis 具有锁定机制。 如果扩展异地复制组中的一个实例,则底层虚拟机也会扩展,但可用内存将限制在原始大小,直到对其他实例完成扩展为止。 其余实例的任何其他扩展操作都将被锁定,直到这些实例具有与扩展的第一个缓存相同的配置。

缩放示例

例如,异地复制组中可能有三个实例,均为内存优化 M10 实例:

实例名 Redis00 Redis01 Redis02
类型 内存优化 M10 内存优化 M10 内存优化 M10

假设要将此异地复制组中的每个实例纵向扩展为计算优化 X20 实例。 首先,将其中一个缓存纵向扩展到 X20:

实例名 Redis00 Redis01 Redis02
类型 计算优化 X20 内存优化 M10 内存优化 M10

此时,Redis01Redis02 实例只能纵向扩展计算优化 X20 实例。 所有其他缩放操作都会被阻止。

注意

此时 Redis00 实例的进一步扩展尚未受到阻止。 但是在 Redis01Redis02 扩展为计算优化 X20 后,针对该实例的扩展操作就会被阻止。

将每个实例扩展到同一层级和大小后,将移除所有扩展锁定:

实例名 Redis00 Redis01 Redis02
类型 计算优化 X20 计算优化 X20 计算优化 X20

刷新操作

由于可能会意外丢失数据,因此不能将 FLUSHALLFLUSHDB Redis 命令用于驻留在异地复制组中的任何缓存实例。 请改用位于“活动异地复制”工作窗格顶部的“刷新缓存”按钮。

屏幕截图显示在“资源”菜单中选择的“活动异地复制”,并且“刷新缓存”功能周围有一个红色框。

使用 Azure CLI 或 PowerShell 刷新缓存

Azure CLI 和 PowerShell 还可用于触发刷新操作。 有关使用 Azure CLI 的详细信息,请参阅 az redisenterprise database flush。 有关使用 PowerShell 的详细信息,请参阅 Invoke-AzRedisEnterpriseCacheDatabaseFlush

重要

使用“刷新缓存”功能时要小心。 选择该按钮会删除当前缓存和异地复制组中链接的所有缓存中的所有数据。

使用 Azure 基于角色的访问控制管理对功能的访问。 应仅向授权用户授予刷新所有缓存的访问权限。

后续步骤