将 Azure Cache for Redis 实例移动到不同区

本文将介绍如何将 Azure Cache for Redis 实例移动到不同 Azure 区域。 你可能出于多种原因需要将资源移到另一区域:

  • 利用新的 Azure 区域。
  • 部署仅在特定区域可用的功能和服务。
  • 满足内部策略和治理要求。
  • 响应容量计划要求。

如果要从本地、基于云的 VM 或其他托管服务迁移到 Azure Cache for Redis,建议参阅迁移到 Azure Cache for Redis

你使用的 Azure Cache for Redis 层确定了最适合你的选项。

缓存层 选项
高级 异地复制、创建新缓存、对两个缓存执行双重写入操作、通过 RDB 文件导出和导入数据或以编程方式迁移
基本或标准 创建新缓存、对两个缓存执行双重写入操作或以编程方式迁移

被动异地复制(高级)

先决条件

若要在两个缓存之间配置异地复制,必须满足以下先决条件:

  • 这两个缓存是高级层缓存。
  • 这两个缓存在同一 Azure 订阅中。
  • 辅助链接缓存的大小等于或大于主链接缓存的大小。
  • 两个缓存都已经存在并且正在运行。

准备

若要将缓存实例移到另一个区域,需要在所需的区域中创建第二个高级缓存实例。 两个缓存都运行后,可以在两个缓存实例之间设置异地复制。

注意

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

异地复制不支持某些功能:

  • 异地复制不支持区域冗余。
  • 异地复制不支持持久性。

异地复制支持的条件:

完成异地复制配置后,链接缓存对会有以下限制:

  • 辅助链接缓存为只读。 可以从其中读取数据,但不能向其中写入任何数据。
    • 如果选择在异地主实例和异地辅助实例之间进行完全数据同步时从异地辅助实例读取数据,例如当异地主实例或异地辅助实例更新时,以及在某些重新启动的情况下,异地辅助实例会在针对它的任何 Redis 操作中引发错误,直到异地主实例和异地辅助实例之间的完全数据同步完成。
    • 应生成从异地辅助数据库读取的应用程序,以便在异地辅助数据库引发此类错误时回退到异地主数据库。
  • 添加链接前辅助链接缓存中的任何数据都会被删除。 但如果以后删除了异地复制,复制的数据则会保留在辅助链接缓存中。
  • 链接缓存时无法缩放任一缓存。
  • 如果缓存已启用群集功能,则无法更改分片数目。
  • 无法在任一缓存上启用暂存。
  • 可以从任一缓存导出
  • 无法导入到辅助链接缓存。
  • 只有在取消链接缓存之后,才可以删除任一链接缓存或包含它们的资源组。 有关详细信息,请参阅尝试删除链接缓存时为何操作会失败?
  • 如果缓存位于不同的区域,网络传出费用将适用于在区域之间移动的数据。 有关详细信息,请参阅跨 Azure 区域复制数据的费用是多少?
  • 故障转移不是自动发生的。 必须启动从主链接缓存到辅助链接缓存的故障转移。 有关如何故障转移客户端应用程序的详细信息,请参阅启动从异地主实例到异地辅助实例的故障转移

移动

  1. 若要将两个缓存链接到一起进行异地复制,请先在要用作主要链接缓存的缓存的“资源”菜单中选择“异地复制”。 接下来,在左侧的“异地复制”中选择“添加缓存复制链接”。

    Screenshot showing the cache's Geo-replication menu.

  2. 在“兼容的缓存”列表中,选择所需辅助缓存的名称。 如果列表中未显示辅助缓存,请确认是否符合辅助缓存的异地复制先决条件。 若要按区域筛选缓存,请在地图中选择相应的区域,以便仅显示“兼容的缓存”列表中的缓存。

    Screenshot showing compatible caches for linking with geo-replication.

    还可以使用上下文菜单启动链接过程或查看辅助缓存的详细信息。

    Screenshot showing the Geo-replication context menu.

  3. 选择“链接”将两个缓存链接在一起并开始复制过程。

    Screenshot showing how to link caches for geo-replication.

验证

  1. 可以使用左侧的“异地复制”查看复制过程的进度。

    Screenshot showing the current Linking status.

    还可以使用“概述”查看左侧的主缓存和辅助缓存的链接状态。

    Screenshot that highlights how to view the linking status for the primary and secondary caches.

    复制过程完成后,“链接状态”改为“成功”。

    Screenshot showing cache linking status as Succeeded.

    在链接过程中,主链接缓存仍然可用。 在链接过程完成之前,辅助链接缓存将不可用。

清理源资源

在目标区域中的新缓存填充了所有必要的数据后,请删除两个缓存之间的链接,并删除原始实例。

  1. 若要删除两个缓存之间的链接并停止异地复制,请从左侧的“异地复制”中选择“取消链接缓存”。

    Screenshot showing how to unlink caches.

    取消链接过程完成后,辅助缓存可用于读取和写入。

注意

在删除异地复制链接后,从主链接缓存复制的数据保留在辅助缓存中。

  1. 删除原始实例。

创建新的缓存(所有层)

先决条件

准备

如果在移动期间不需要维护数据,则移动区域的最简单方法是在目标区域中创建新的缓存实例,并将应用程序连接到该实例。 例如,如果将 Redis 用作数据库记录的后备缓存,则可以轻松地从头开始重新生成缓存。

移动

  1. 若要创建缓存,请登录到 Azure 门户并选择“创建资源” 。

    Create a resource is highlighted in the left navigation pane.

  2. 在“新建”页上选择“数据库”,然后选择“Azure Cache for Redis”。

    On New, Databases is highlighted, and Azure Cache for Redis is highlighted.

  3. 在“新建 Redis 缓存”页上配置新缓存的设置。

    设置 选择值 说明
    订阅 单击下拉箭头并选择你的订阅。 要在其下创建此新的 Azure Cache for Redis 实例的订阅。
    资源组 单击下拉箭头并选择一个资源组,或者选择“新建”并输入新的资源组名称。 要在其中创建缓存和其他资源的资源组的名称。 将所有应用资源放入一个资源组可以轻松地统一管理或删除这些资源。
    DNS 名称 输入唯一名称。 缓存名称必须是包含 1 到 63 个字符的字符串,只能包含数字、字母或连字符。 该名称必须以数字或字母开头和结尾,且不能包含连续的连字符。 缓存实例的主机名是 <DNS name>.redis.cache.chinacloudapi.cn
    位置 单击下拉箭头并选择一个位置。 选择使用缓存的其他服务附近的区域
    缓存类型 下拉并选择一个 此层决定可用于缓存的大小、性能和功能。 有关详细信息,请参阅用于 Redis 的 Azure 缓存概述
  4. 选择“网络”选项卡,或选择“网络”按钮(位于页面底部) 。

  5. 在“网络”选项卡中,选择你的连接方法。

  6. 选择“下一步: 高级”选项卡,或选择页面底部的“下一步: 高级”按钮,以查看“高级”选项卡。

    Screenshot showing the Advanced tab in the working pane and the available option to select.

    • 对于“基本”或“标准”缓存,请切换非 TLS 端口的选项。 还可以选择是否要启用“Microsoft Entra 身份验证”。
    • 对于“高级”缓存,请配置非 TLS 端口、群集、托管标识和数据持久性的设置。 还可以选择是否要启用“Microsoft Entra 身份验证”。
  7. 选择“下一步: 标记”选项卡,或选择页面底部的“下一步: 标记”按钮 。

  8. 或者,在“标记”选项卡中,如果希望对资源分类,请输入名称或值。

  9. 选择“查看 + 创建” 。 随后你会转到“查看 + 创建”选项卡,Azure 将在此处验证配置。

  10. 显示绿色的“已通过验证”消息后,选择“创建”。

创建缓存需要一段时间。 可以在 Azure Cache for Redis 的“概述”页上监视进度。 如果“状态”显示为“正在运行”,则表示该缓存可供使用。

最后,将应用程序更新为使用新实例。

清理源资源

目标区域中的新缓存正在运行后,请删除原始实例。

使用 RDB 文件导出和导入数据(高级)

开源 Redis 定义了一种标准机制,用于获取缓存的内存中数据集的快照并将其保存到文件中。 此文件名为 RDB,可由另一个 Redis 缓存读取。 Azure Cache for Redis 高级支持通过 RDB 文件将数据导入缓存实例。 可以使用 RDB 文件将数据从现有缓存传输到 Azure Cache for Redis。

重要

RDB 文件格式在 Redis 版本之间可能会更改,并且可能不会保留向后兼容性。 要从中进行导出的缓存的 Redis 版本不应高于新缓存实例的版本。

先决条件

  • 这两个缓存是高级层缓存。
  • 第二个缓存的缓存大小要么和原始缓存一样,要么比原始缓存大。
  • 要从中进行导出的缓存的 Redis 版本不应高于新缓存实例的版本。

准备

若要将缓存实例移动到另一个区域,需要在所需区域创建第二个高级缓存实例

移动

  1. 有关如何在 Azure Cache for Redis 中导入和导出数据的详细信息, 请参阅在 Azure Cache for Redis 中导入和导出数据

  2. 更新应用程序以使用新缓存实例。

验证

可以通过关注 Azure 门户中的通知或通过查看审核日志中的事件,来监视导入操作的进度。

清理源资源

目标区域中的新缓存正在运行后,请删除原始实例。

双重写入两个缓存(基本、标准和高级)

可以使用应用程序将数据写入到现有缓存和所设置的新缓存,而不是直接在缓存之间移动数据。 最初,应用程序首先从现有的缓存中读取数据。 当新缓存拥有必要的数据后,就可以将应用程序切换到该缓存,然后停用旧缓存。 举例来说,假设使用 Redis 作为会话存储,且应用程序会话的有效期为 7 天。 写入两个缓存一周后,即可确定新缓存包含所有未过期会话信息。 此后,可放心地依靠它,而不必担心数据丢失。

先决条件

  • 第二个缓存的缓存大小要么和原始缓存一样,要么比原始缓存大。

准备

若要将缓存实例移到另一个区域,将需要在所需的区域中创建第二个缓存实例

移动

实现此选项的一般步骤如下:

  1. 修改应用程序代码以写入新实例和原始实例。

  2. 继续从原始实例读取数据,直到新实例填充足够的数据为止。

  3. 更新应用程序代码以仅从新实例读取和写入。

清理源资源

目标区域中的新缓存正在运行后,请删除原始实例。

以编程方式迁移(所有层)

可以通过编程方式从现有缓存中读取数据并将其写入 Azure Cache for Redis,从而创建自定义迁移过程。 此开放源代码工具可用于将数据从一个 Azure Cache for Redis 实例复制到不同 Azure 缓存区域中的另一个实例。 还提供编译版本。 你可能还会发现,源代码可为编写自己的迁移工具提供有用指导。

注意

Microsoft 尚未正式支持此工具。

先决条件

  • 第二个缓存的缓存大小要么和原始缓存一样,要么比原始缓存大。

准备

  • 在现有缓存​​所在区域中创建 VM。 如果数据集很大,请选择功能相对强大的 VM 以减少复制时间。
  • 若要将缓存实例移到另一个区域,将需要在所需的区域中创建第二个缓存实例

移动

在现有缓存所在的区域创建 VM 并在所需区域创建新缓存后,实现该选项的一般步骤是:

  1. 刷新新缓存中的数据以确保其为空。 由于复制工具本身不会覆盖目标缓存中的任何现有密钥,因此需要执行此步骤。

    重要

    确保不要从源缓存中刷新。

  2. 使用应用程序(例如上述开源工具)自动将数据从源缓存复制到目标缓存。 请记住,复制过程可能需要一段时间才能完成,具体取决于数据集的大小。

清理源资源

目标区域中的新缓存正在运行后,请删除原始实例。

后续步骤

了解有关 Azure Cache for Redis 功能的详细信息。