为高级 Azure Cache for Redis 实例配置被动异地复制

本文介绍如何使用 Azure 门户在一对 Azure Cache for Redis 实例上配置被动异地复制。

被动异地复制将两个高级层 Azure Cache for Redis 实例链接在一起,并创建主动-被动数据复制关系。 主动-被动关系是指数据保持同步的一对缓存(主要缓存和辅助缓存)。 但是,只能将数据写入该对的一端,即主要缓存。 该对的另一端(辅助缓存)是只读的。

将“主动-被动”与“主动-主动”进行比较,在后者中,可以写入到该对实例的任一端,并且它将与另一端同步。

使用被动异地复制时,缓存实例通常位于不同的 Azure 区域,不过,并非要求如此。 一个实例充当主实例,另一个实例充当辅助实例。 主缓存负责处理读取和写入请求,并将更改传播到辅助缓存。

故障转移不是自动的。 有关如何使用故障转移的详细信息,请参阅启动从异地主缓存到异地辅助缓存的故障转移

注意

被动异地复制设计为灾难恢复解决方案。

可用范围

基本、标准 高级
可用

被动异地复制仅在 Azure Cache for Redis 高级层中可用。

异地复制先决条件

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

  • 这两个缓存是高级层缓存。
  • 这两个缓存在同一 Azure 订阅中。
  • 辅助链接缓存的大小等于或大于主链接缓存的大小。 若要使用异地故障转移,两个缓存的大小必须相同。
  • 这两个缓存都已创建且处于运行状态。
  • 这两个缓存正在运行相同版本的 Redis 服务器。

注意

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

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

  • 异地复制不支持区域冗余。
  • 异地复制不支持持久性。
  • 不能异地复制具有多个副本的缓存。
  • 如果这两个缓存都启用了群集功能并且具有相同数目的分片,则支持群集。
  • 支持同一虚拟网络 (VNet) 中的缓存。
  • 也支持不同 VNet 中的缓存,但需要注意一些问题。 有关详细信息,请参阅当缓存位于 VNet 中时是否可以使用异地复制?

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

  • 辅助链接缓存为只读。 可以从其中读取数据,但不能向其中写入任何数据。 如果选择从异地辅助数据库实例读取,则当在异地主要数据库和异地辅助数据库之间发生完整的数据同步时,异地辅助数据库实例会在任何针对它的 Redis 操作中引发错误,直到完成完整的数据同步。 表示完整的数据同步正在进行中的错误状态。 此外,异地主要数据库或异地辅助数据库在某些重启情况下更新时,也会引发错误。 应生成从异地辅助数据库读取的应用程序,以便在异地辅助数据库引发此类错误时回退到异地主数据库。

  • 添加链接前辅助链接缓存中的任何数据都会被删除。 但如果以后删除了异地复制,复制的数据则会保留在辅助链接缓存中。

  • 链接缓存时无法缩放任一缓存。

  • 如果缓存已启用群集功能,则无法更改分片数目

  • 无法在任一缓存上启用暂存。

  • 可以从任一缓存导出

  • 无法导入到辅助链接缓存。

  • 只有在取消链接缓存之后,才可以删除任一链接缓存或包含它们的资源组。 有关详细信息,请参阅尝试删除链接缓存时为何操作会失败?

  • 如果缓存位于不同的区域,网络传出费用将适用于在区域之间移动的数据。 有关详细信息,请参阅跨 Azure 区域复制数据的费用是多少?

  • 故障转移不是自动的。 必须启动从主链接缓存到辅助链接缓存的故障转移。 有关如何使用故障转移的详细信息,请参阅启动从异地主缓存到异地辅助缓存的故障转移

  • 无法将专用链接添加到已异地复制的缓存。 若要将专用链接添加到异地复制的缓存,请执行以下操作:1. 取消链接异地复制。 2. 添加专用链接。 3. 最后,重新链接异地复制。

  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.

  4. 可以使用“资源”菜单中的“异地复制”查看复制过程的进度。

    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.

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

异地主缓存 URL

链接缓存后,系统会为每个始终指向异地主缓存的缓存生成 URL。 如果启动从异地主要缓存到异地辅助缓存的故障转移,则 URL 将保持不变,并且基础 DNS 记录将自动更新以指向新的异地主要缓存。

Screenshot showing four URLs created by adding geo-replication.

显示了三个 URL:

  • “异地主要缓存 URL”是格式为 <cachename>.geo.redis.cache.chinacloudapi.cn 的代理 URL。 该 URL 始终指向异地复制对中作为当前异地主缓存的缓存。
  • “当前异地主要缓存”是当前异地主要缓存的直接地址。 该地址是 redis.cache.chinacloudapi.cn 而不是 geo.redis.cache.chinacloudapi.cn。 如果启动故障转移,则此字段中列出的地址会更改。
  • “当前异地辅助缓存”是当前异地辅助缓存的直接地址。 该地址是 redis.cache.chinacloudapi.cn 而不是 geo.redis.cache.chinacloudapi.cn。 如果启动故障转移,则此字段中列出的地址会更改。

启动从异地主缓存到异地辅助缓存的故障转移

只需选择一次,即可触发从异地主缓存到异地辅助缓存的故障转移。

Screenshot of linked caches with Failover highlighted.

这会导致执行以下步骤:

  1. 将异地辅助缓存提升为异地主要缓存。
  2. 更新 DNS 记录以将异地主要缓存 URL 重定向到新的异地主要缓存。
  3. 旧的异地主要缓存将降级为辅助缓存,并尝试构建指向新异地主要缓存的链接。

异地故障转移过程需要几分钟才能完成。

启动异地故障转移之前要检查的设置

启动故障转移后,异地主缓存和异地辅助缓存会交换。 如果新异地主要缓存的配置不同于异地辅助缓存,则可能会给应用程序造成问题。

请务必检查以下各项:

  • 如果在任一缓存中使用防火墙,请确保防火墙设置相似,以免出现连接问题。
  • 确保两个缓存使用相同的端口和 TLS/SSL 设置
  • 异地主要缓存和异地辅助缓存具有不同的访问密钥。 如果已触发故障转移,请确保应用程序可以更新它使用的访问密钥,以便与新的异地主缓存匹配。

在尽量减少数据丢失的前提下进行故障转移

异地故障转移事件可能会在转换期间造成数据不一致性,尤其是客户端在故障转移过程中与旧异地主要缓存保持连接的情况下。 可以使用以下提示最大程度地减少计划性异地故障转移事件中的数据丢失:

  • 检查异地复制数据同步偏移量指标。 该指标由当前异地主要缓存发出。 该指标指示有多少数据尚未复制到异地主要缓存。 如果可能,请仅在该指标指示有待写入的字节数小于 14 时才启动故障转移。
  • 在启动故障转移之前,在当前异地主要缓存中运行 CLIENT PAUSE 命令。 运行 CLIENT PAUSE 会阻止任何新的写入请求,并改为向 Azure Cache for Redis 客户端返回超时失败。 CLIENT PAUSE 命令要求提供以毫秒为单位的超时期限。 请确保提供足够长的超时期限,使故障转移能够发生。 将暂停值设置为 30 分钟(1,800,000 毫秒)左右是一个不错的起点。 始终可以按需降低此数字。

无需运行 CLIENT UNPAUSE 命令,因为新的异地主要缓存会将客户端保留暂停状态。

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

    Screenshot showing how to unlink caches.

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

注意

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

异地复制常见问题解答

是否可以通过标准层或基本层缓存使用异地复制?

不可以,被动异地复制仅在高级层中可用。

在链接或取消链接过程中是否可以使用缓存?

  • 在链接过程完成之前,主链接缓存保持可用。
  • 在链接过程完成之前,辅助链接缓存将不可用。
  • 在取消链接过程完成之前,这两个缓存保持可用。

启动故障转移后,何时可以写入新的异地主缓存?

启动故障转移过程时,会看到链接预配状态更新为“正在删除”,这表示正在清理以前的链接。 以前的链接清理完后,链接预配状态将更新为“正在创建”。 这表示新的异地主缓存已启动并正在运行,并正在尝试重新建立旧异地主缓存的异地复制链接。 此时,可以立即连接到新的异地主缓存实例进行读取和写入。

是的,可以使用多个指标来帮助跟踪异地复制的状态。 Azure 门户中提供了这些指标。

  • “异地复制运行状况”显示异地复制链接的状态。 如果异地主缓存或异地辅助缓存关闭,则该链接将显示为不正常。 此状态通常是由标准修补操作造成的,但也可能指示出现了故障。
  • “异地复制连接滞后时间”显示自上次在异地主要缓存与异地辅助缓存之间成功同步数据以来经过的时间。
  • “异地复制数据同步偏移量”显示尚未同步到异地辅助缓存的数据量。
  • “异地复制完全同步事件已启动”指示已在异地主要缓存与异地辅助缓存之间启动完全同步操作。 如果标准复制进度跟不上新的写入数量,就会发生这种情况。
  • “异地复制完全同步事件已完成”表示已完成完全同步操作。

还有一个名为“异地复制仪表板”的预生成工作簿,其中在一个视图内包含了所有异地复制运行状况指标。 建议使用此视图,因为它聚合了仅从异地主缓存实例或异地辅助缓存实例发出的信息。

不可以,使用被动异地复制时,只能将两个缓存链接到一起。

不可以,这两个缓存必须在同一 Azure 订阅中。

可以,但辅助链接缓存必须大于主链接缓存。 但是,如果缓存大小不同,则你无法使用故障转移功能。

是否可以在启用群集时使用异地复制?

可以,但两个缓存的分片数必须相同。

当缓存位于 VNet 中时是否可以使用异地复制?

在大多数情况下,建议使用 Azure 专用链接而不是 VNet 注入。 有关详细信息,请参阅从 VNet 注入缓存迁移到专用链接缓存

尽管在技术上仍可以在异地复制缓存时使用 VNet 注入,但我们建议使用 Azure 专用链接。

重要

Azure Cache for Redis 建议使用 Azure 专用链接,它可简化网络体系结构并保护 Azure 中终结点之间的连接。 可以通过专用终结点从虚拟网络连接到 Azure Cache 实例,该终结点在虚拟网络中的子网内分配有一个专用 IP 地址。 所有层上均提供 Azure 专用链接,包括 Azure Policy 支持和简化的 NSG 规则管理。 要了解详细信息,请参阅专用链接文档。 若要将 VNet 注入缓存迁移到专用链接,请参阅从 VNet 注入缓存迁移到专用链接缓存

若要详细了解对使用 VNet 进行异地复制的支持,请参阅将 VNet 注入与高级缓存配合使用以进行异地复制

什么是 Redis 异地复制的复制计划?

复制为持续和异步。 它不会按特定计划发生。 针对主缓存的所有写入会即时异步复制到辅助缓存。

异地复制需要多长时间?

复制是增量、异步且持续的,所需时间与区域间的延迟并无太大区别。 在某些情况下,辅助缓存可能需要对主缓存中的数据进行完全同步。 在这种情况下,复制时间取决于多个因素,例如:主缓存上的负载、可用网络带宽和区域间的延迟。 我们发现,在一个异地复制对之间完整复制 53 GB 的内容可能需要 5-10 分钟时间。 可以使用 Azure Monitor 中的 Geo Replication Data Sync Offset 指标跟踪尚未复制的数据量。

复制恢复点是否受保证?

对于异地复制模式下的缓存,会禁用持久性。 如果取消链接异地复制对(例如,客户发起了故障转移),则辅助缓存会保留在该时间点之前的同步数据。 在此类情况下,不提供恢复点保证。

若要获取某个恢复点,请从任一缓存导出。 以后可以导入到主链接缓存。

是否可以使用 PowerShell 或 Azure CLI管理异地复制?

是的,可以使用 Azure 门户、PowerShell 或 Azure CLI 管理异地复制。 有关详细信息,请参阅 PowerShell 文档Azure CLI 文档

跨 Azure 区域复制数据的费用是多少?

使用异地复制时,主链接缓存中的数据会被复制到辅助链接缓存中。 如果两个链接缓存位于同一区域,则数据传输不会产生费用。 如果两个链接缓存位于不同的区域,则数据传输费用是跨任一区域移动数据所产生的网络传出费用。 有关详细信息,请参阅带宽定价详细信息

尝试删除链接缓存时为何操作会失败?

在删除异地复制链接之前,无法删除已链接的异地复制缓存及其资源组。 如果尝试删除包含一个或两个链接缓存的资源组,则会删除该资源组中的其他资源,但该资源组保持 deleting 状态,而资源组中的任意链接缓存则保持 running 状态。 若要完全删除资源组及其包含的链接缓存,请根据删除异地复制链接中所述取消链接这些缓存。

应为辅助链接缓存选择哪个区域?

一般而言,我们建议将缓存放置在应用程序所在的同一 Azure 区域,便于应用程序访问。 对于使用单独主要区域和故障回复区域的应用程序,我们建议将主缓存和辅助缓存放置在这些区域。 有关配对区域的详细信息,请参阅最佳做法 - Azure 配对区域

能否为防火墙配置异地复制?

能,可以为防火墙配置异地复制。 要使异地复制与防火墙一起工作,请确保将辅助缓存的 IP 地址添加到主缓存的防火墙规则。 但是,如果在缓存上禁用了公用网络访问,并且仅启用了专用终结点,则不支持在缓存上使用防火墙。

后续步骤

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