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

从基本层、标准层、高级层和企业层迁移到 Azure 托管 Redis

本文介绍如何以及如何从 Azure Redis 缓存(包括基本层、标准层、高级层和企业层)迁移到 Azure 托管 Redis。

了解以下内容:

  • 选择 Azure 托管 Redis 而非以前层级的好处。
  • 服务之间的主要功能差异。
  • 迁移缓存数据的策略。
  • 确保顺利迁移过程的方法。
  • 有关根据需要选择正确的 Azure 托管 Redis SKU 和性能层的指南。
  • 更新客户端应用程序的注意事项和建议。

无论是使用基本层、标准层、高级层、企业层还是 OSS 层,本指南都有助于您规划和执行向 Azure 托管 Redis 的迁移。

文档分为两个部分。 一个是关于企业实例。 另一个是 Azure Redis 缓存的基本层、标准层和高级层。

从企业迁移到 Azure 托管 Redis 的好处

Azure 托管 Redis 是基于高级 Redis Enterprise 软件构建的。 Azure 托管 Redis 是 Azure 第一方产品/服务,这意味着没有涉及 Azure 市场组件,用户无需单独与市场交易。 可以像使用任何其他原生 Azure 服务或产品一样预配、管理和支付 Azure 托管 Redis。

Azure 托管的 Redis 不需要仲裁节点,从而避免了资源未充分利用的问题,并且不再受限于企业版 Azure Cache for Redis 可提供的区域或云环境。 Azure 托管 Redis 现已在大多数 Azure 区域中提供,计划在其他主权云中受支持。 有关仲裁节点的详细信息,请参阅 Enterprise 和 Enterprise Flash 级别。 通过删除未使用的 仲裁节点,可以提高成本效益,因为所有节点都可以用作数据节点。

默认情况下,Azure 托管 Redis 是区域冗余的。

可以将 Azure 托管 Redis 用于开发和测试环境,而无需高可用性(HA)。 在没有 HA 的情况下使用非生产环境会减半实例的成本。

Azure 托管 Redis 的 SKU 结构基于内存和性能需求。 与 Azure Cache for Redis Enterprise 不同的是,在 Azure 托管的 Redis 中,你无需管理扩展因子或容量,只需选择三个性能级别中的一个即可。 有关详细信息,请参阅 选择正确的层

最后,Azure 托管 Redis 在创建缓存以提高工作负荷的安全态势时提供 Microsoft Entra ID 身份验证。

功能对比

功能 / 特点 Azure缓存服务(Redis Enterprise) Azure 托管的 Redis
Redis 版本 7.2 7.4
群集策略 OSS、企业版 OSS、企业版、非集群
Geo-replication 活动 活动
SLA 高达 99.999% 高达 99.999%
区域冗余 Yes 是(默认值)
非 HA 模式 No 是(适用于开发/测试)
数据持久性 是(预览版) Yes
规模化 Yes Yes
TLS 版本支持 1.2,1.3 1.2,1.3
Microsoft Entra ID 身份验证 No Yes
Azure 区域支持 受限制 广泛
Azure 主权云支持 No 是的(即将推出)
主机名 DNS 后缀 <name>.<region>.redisenterprise.cache.azure.net <name>.<region>.redis.azure.net

从企业迁移到 Azure 托管 Redis 时的注意事项

Azure 托管 Redis 使用与 Azure Redis Enterprise 缓存相同的软件堆栈,因此使用企业层的现有应用程序不需要太多更改。 重大例外是需要更改连接凭据。

不同的主机名和后缀

虽然 Azure Cache for Redis Enterprise 和 Azure 托管 Redis 的核心软件类似,但 Redis 群集主机名的 DNS 后缀不同。 迁移到 Azure 托管 Redis 时,应用程序需要更改 Redis 群集主机名。 如果使用访问密钥连接到缓存,则还必须更新用于连接到缓存的访问密钥。

重要

请考虑更新连接到缓存的代码。 使用 Microsoft Entra ID,而不是使用访问密钥。 建议使用 Microsoft Entra ID 而不是访问密钥。

选择正确的 Azure 托管 Redis 大小和 SKU

Azure 托管 Redis 提供许多内存大小和三个性能层。 可以在此处阅读有关内存大小和性能层的详细信息, 选择正确的层

标识现有 Azure Redis Enterprise 缓存实例的内存大小

Azure Redis Enterprise 缓存实例可以横向扩展以提供更多内存和更多计算资源,因此请务必注意缓存的横向扩展因素。 横向扩展也与容量相关,这实质上是针对群集运行的虚拟机数。

若要选择正确的 Azure 托管 Redis 内存大小,请执行以下作:

  1. 转到 Azure 门户,然后从资源菜单中选择 “概述 ”。
  2. 检查企业实例概述中的“状态”字段。 “ 状态 ”字段显示 Redis Enterprise 实例的内存大小。

让我们看看一个可能的方案。

企业缓存概述的屏幕截图。

“概述”窗格上查看“状态”,可以看到“正在运行 - 企业 8GB”(2 x 4GB)。 此表示法意味着缓存当前使用规模为 2 的 E5 企业版 SKU,从而生成 8 GB 缓存。 因此,应该从 Azure 托管 Redis 上的至少 10GB 缓存开始。

在这种情况下,请使用提供 12 GB 内存的任何层。

SKU
M10 内存优化
B10 Balanced
X10 计算优化

标识性能层

还应考虑工作负荷是否占用大量内存或计算密集型。 如果当前企业实例在 CPU 之前更有可能耗尽内存,则工作负荷会占用大量内存。 请考虑从 内存优化 性能层中进行选择。

如果工作负荷吞吐量密集型或延迟过大,则工作负荷会占用大量计算。 请考虑从 “计算优化 ”性能层中进行选择。

如果不确定,可以从 均衡 性能层开始,因为它提供正常的内存和性能组合。

如果您当前使用的是 Redis 企业级闪存层,则应选择优化的闪存层。

创建新的 Azure 托管 Redis 实例

为新的 Azure 托管 Redis 实例选择内存和性能层后,可以创建新的 Azure 托管 Redis 实例。 有关创建缓存的详细信息,请参阅 快速入门:创建 Azure 托管 Redis 实例

接下来,需要选择用于移动数据的策略。 最后,需要更新应用程序以使用新缓存。

更新应用以连接到 Azure 托管 Redis 实例

创建新的 Azure 托管 Redis 实例后,必须更改应用程序中的 Redis 终结点/主机名和访问密钥,以指向新的 Azure 托管 Redis 实例。 建议在非工作时间发布此终结点更改,因为这会导致连接短暂中断。

Note

如果通过专用终结点连接到现有的 Redis Enterprise 实例,请确保新的 Azure 托管的 Redis 缓存也与应用程序的虚拟网络对等互连。 新缓存必须具有与现有 Redis Enterprise 实例类似的设置。

验证应用程序是否按预期运行,然后删除以前的 Redis Enterprise 实例。

将数据从企业缓存移到新的 Azure 托管 Redis 缓存

迁移到 Azure 托管 Redis 实例时,需要考虑将数据从现有 Redis Enterprise 实例移到新的 Azure 托管 Redis 实例的最佳方法。 如果应用程序可以容忍数据丢失,或者具有其他机制来解除缓存冻结而不产生负面影响,则跳过此步骤并继续执行后续步骤。

如果应用程序需要确保数据也迁移到新的 Azure 托管 Redis 实例,请选择以下选项之一:

使用 RDB 文件导出和导入数据

  • 优点:保留数据快照。
  • 缺点:如果快照创建后又进行了数据写入操作,则可能导致数据丢失。

下面是基本的导出/导入过程:

  1. 将 RDB 从现有的 Redis Enterprise 缓存导出到 Azure 存储帐户。
  2. 将数据从 Azure 存储帐户导入到新的 Azure 托管 Redis 缓存中。
  3. 在此处了解更多关于数据导出/导入的信息 导入和导出 Azure 托管 Redis 中的数据

双写策略

  • 优点:零停机时间,安全转换。
  • 缺点:需要临时双缓存设置。

下面是基本的双写过程:

  1. 修改应用程序以写入现有 Azure Redis Enterprise 缓存和新的 Azure 托管 Redis 缓存。
  2. 继续从 Redis Enterprise 缓存读取和写入。
  3. 完成足够的数据同步后,将读取操作切换到 Azure 托管 Redis,并删除 Redis Enterprise 实例。

使用 RIOT-X 进行编程迁移

RIOT-X 提供了将内容从企业迁移到 Azure 托管 Redis 的方法。 有关详细信息,请参阅 使用 RIOT-X 进行 Azure 托管 Redis 数据迁移

  • 优点:完全控制,可自定义。
  • 缺点:需要开发工作。

从基本缓存、标准缓存或高级缓存迁移到 Azure 托管 Redis 的好处

如果使用任何开放源代码软件 SKU、基本版、标准版或高级版,迁移到 Azure 托管 Redis 可以在每个缓存级别上提供更多功能。

下表将 Azure Redis 缓存中的功能与 Azure 托管 Redis 中的功能进行比较

功能说明 基本
OSS
标准
OSS
高级
OSS
Balanced
AMR
内存优化
AMR
计算优化
AMR
Availability N/A 99.9% 99.9% 高达 99.999% 高达 99.999% 高达 99.999%
传输中数据加密 Yes Yes Yes Yes Yes Yes
网络隔离 Yes Yes Yes Yes Yes Yes
纵向扩展/横向扩展 Yes Yes Yes Yes Yes Yes
纵向/横向缩减 Yes Yes Yes No No No
OSS 群集 No No Yes Yes Yes Yes
数据持久性 No No Yes Yes Yes Yes
区域冗余 No 是(预览版) Yes Yes Yes Yes
Geo-replication No No 是(被动) 是(主动) 是(主动) 是(主动)
连接审核日志 No No Yes Yes(Event-based) Yes(Event-based) Yes(Event-based)
Redis 模块 No No No Yes Yes Yes
导入/导出 No No Yes Yes Yes Yes
Reboot Yes Yes Yes No No No
计划更新 Yes Yes Yes No No No
Microsoft Entra ID 身份验证 Yes Yes Yes Yes Yes Yes
Microsoft Entra ID RBAC Yes Yes Yes No No No
密钥空间通知 Yes Yes Yes No No No
非高可用性 N/A No No Yes Yes Yes

OSS 是指 Azure Cache for Redis
AMR 是指 Azure 托管 Redis

下面是在实现 Azure 托管 Redis 时要考虑的一些其他差异。 考虑以下客户端应用程序更改:

功能说明 Azure Cache for Redis Azure 托管的 Redis
DNS 后缀(仅适用于 PROD 云) .redis.cache.windows.net <region>.redis.azure.net
TLS 端口 6380 10000
非 TLS 端口 6379 不支持
单个节点 TLS 端口 13XXX 85xx
单个节点非 TLS 端口 15XXX 不支持
群集支持 OSS 群集模式 OSS 和企业群集模式
不支持的命令 不支持的命令 多键命令
区域可用性 所有 Azure 区域 * 请参阅本部分后面的区域列表。
Redis 版本 6 7.4
支持的 TLS 版本 1.2 和 1.3 1.2 和 1.3

将基本、标准或高级缓存迁移到 Azure 托管 Redis

根据表,下面是 Azure Cache for Redis SKU 与 Azure 托管的 Redis 中缓存选项之间的一些映射。

Note

使用 Azure 托管 Redis 的非高可用选项来迁移基本 SKU

Azure Cache for Redis Azure 托管的 Redis 其他内存 (%)
基本/标准 - C0 平衡 - B0 50
基本/标准 - C1 平衡 - B1 0
基本/标准 - C2 平衡 - B3 17
基本/标准 - C3 平衡 - B5 0
基本/标准 - C4 内存优化 – M10* -8
基本/标准 – C4 内存优化 – M20** 46
基本/标准 - C5 内存优化 – M20* -8
基本/标准 – C5 内存优化 – M50** 57
基本/标准 - C6 内存优化 - M50 12
高级 - P1 平衡 - B5 0
高级 - P2 平衡 - B10* -8
高级 - P2 平衡 - B20** 46
高级 - P3 平衡 - B20* -8
高级 - P3 平衡 - B50** 57
高级 - P4 平衡 - B50 12
高级 - P5 平衡 - B100 0
  • * 此选项适用于成本效益。 要选择此选项,请确保过去一个月已用内存总量的峰值小于建议的 Azure Managed Redis 内存。
  • ** 此选项适用于内存消耗达到一定量的情况。

Azure Cache for Redis 高级群集型

  • 对于分片群集,选择具有等效总内存的内存优化层。
  • 对于具有多个只读副本的群集,选择总内存与主副本等效的计算优化层。

迁移选项

客户端应用程序应能够使用具有不同群集模式和终结点的 Azure 托管 Redis 实例。 Azure Redis 缓存和 Azure 托管 Redis 兼容,因此大多数方案不需要连接配置以外的应用程序代码更改。

有关详细信息,请参阅:

用于将 Azure Cache for Redis 迁移到 Azure 托管 Redis 的选项

Option Advantages Disadvantages
创建新缓存 最易于实现。 需要将数据重新填充到新的缓存中,这可能不适用于许多应用程序。
通过 RDB 文件导出和导入数据 通常与任何 Redis 缓存兼容。 如果某些数据在生成 RDB 文件后写入现有缓存,这些数据可能会丢失。
将数据双重写入两个缓存 无数据丢失或停机时间。 现有缓存不间断运行。 更轻松地测试新缓存。 需要两个缓存以延长时间。
以编程方式迁移数据 对数据的移动方式具有完全控制。 需要自定义代码。

创建新的 Azure Cache for Redis

从技术上讲,这种方法不是迁移。 如果无需担心丢失数据,则迁移到 Azure 托管 Redis 的最简单方法是创建缓存实例并将应用程序连接到该实例。 例如,如果将 Redis 用作数据库记录的后备缓存,则可以轻松地从头开始重新生成缓存。 实现此选项的一般步骤如下:

  1. 创建新的 Azure 托管 Redis 实例。
  2. 更新应用程序以使用新实例。
  3. 删除旧的 Azure Cache for Redis 实例。

将数据导出到 RDB 文件并将该文件导入 Azure 托管 Redis

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

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

  1. 创建一个新的 Azure 托管 Redis 实例,该实例的大小等于(或大于)现有 Azure Cache for Redis 实例的大小。
  2. 使用这些导出说明PowerShell 导出 cmdlet 从现有 Azure Redis 缓存实例导出 RDB 文件
  3. 使用这些导入说明或 PowerShell Import cmdlet 将 RDB 文件导入新的 Azure 托管 Redis 实例
  4. 更新应用程序以使用新的 Azure 托管 Redis 实例连接字符串。

在迁移期间同时写入两个 Redis 缓存

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

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

  1. 创建一个新的 Azure 管理型 Redis 实例,该实例大小应与现有的 Azure Cache for Redis 实例相同或更大。
  2. 修改应用程序代码以写入新实例和原始实例。
  3. 继续从原始实例读取数据,直到新实例填充足够的数据为止。
  4. 更新应用程序代码以仅从新实例读取和写入。
  5. 删除原始实例。

以编程方式迁移

可以通过编程方式从现有 Azure Cache for Redis 中读取数据并将其写入 Azure 托管 Redis 实例,从而创建自定义迁移过程。 有两种开源工具可以尝试:

  • Redis-copy
    • 此开源工具可用于将数据从一个 Azure Cache for Redis 实例复制到另一个 Azure Cache for Redis 实例。 此工具对于在不同 Azure 缓存区域中的缓存实例之间移动数据很有用。 还提供编译版本。 你还会发现,源代码可为编写自己的迁移工具提供有用指导。
  • RIOT
    • RIOT 是经 Redis 社区测试验证的另一种热门迁移工具。 它是一个命令行实用工具,旨在帮助将数据传入和传出 Redis。

Note

Microsoft 尚未正式支持此工具。

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

  1. 在现有缓存​​所在区域中创建 VM。 如果数据集很大,请选择功能相对强大的 VM 以减少复制时间。
  2. 创建新的 Azure 托管 Redis 实例。
  3. 刷新新缓存中的数据以确保其为空。 由于复制工具本身不会覆盖目标缓存中的任何现有密钥,因此需要执行此步骤。 重要说明:确保不要从源缓存中刷新。
  4. 使用应用程序(例如前述开源工具)自动将数据从源缓存复制到目标缓存。 请记住,复制过程可能需要一段时间才能完成,具体取决于数据集的大小。

Azure Managed Redis 的区域可用性

Azure 托管 Redis 正在不断扩展到新区域。 若要查看它的区域可用性,请参阅各区域的产品可用性