为 Azure Cache for Redis 实例配置数据持久化

使用 Redis 持久化,可以持久化存储在缓存实例中的数据。 如果发生硬件故障,缓存实例在恢复联机时会使用持久化文件中的数据解除冻结。 持久化数据的功能是提高缓存实例持久性的重要方法,因为所有缓存数据存储在内存中。 如果在缓存节点关闭的情况下发生故障,则可能会丢失数据。 持久化应是 Azure Cache for Redis 高可用性和灾难恢复策略的关键部分。

警告

如果在高级层上使用持久化,则可在使用数据持久化功能之前检查,以确定存储帐户是否已启用软删除。 将数据暂留与软删除结合使用将导致非常高的存储成本。 有关详细信息,请参阅是否应启用软删除?

可用范围

基本、标准 高级
可用

Redis 中的数据持久化类型

Azure Cache for Redis 的持久化提供了两个选项:Redis 数据库 (RDB) 格式和仅追加文件 (AOF) 格式:

  • RDB 持久性 - 配置 RDB 持久性后,Azure Cache for Redis 会以二进制格式持久保持缓存的快照。 该快照保存在 Azure 存储帐户中。 可配置的备份频率决定了持久保存快照的频率。 如果发生了灾难性事件,导致主缓存和副缓存都无法使用,则会使用最新快照自动重新构造缓存。 详细了解 RDB 暂留的优点缺点
  • AOF 持久性 - 使用 AOF 持久性时,Azure Cache for Redis 会将每个写入操作保存到日志。 在 Azure 存储帐户中,日志每秒至少保存一次。 如果发生灾难性事件,导致主缓存和副本缓存都无法使用,则会使用存储的写入操作自动重新构造缓存。 详细了解 AOF 暂留的优点缺点

Azure Cache for Redis 持久化功能旨在用于在数据丢失后自动将数据还原到同一缓存。 无法将 RDB/AOF 持久化数据文件导入到新缓存或现有缓存。 要在缓存之间移动数据,可使用导入和导出功能。 有关详细信息,请参阅在 Azure Cache for Redis 中导入和导出数据

要生成可添加到新缓存的任何数据备份,可以使用 PowerShell 或 CLI 编写自动化脚本以定期导出数据。

先决条件和限制

持久性功能旨在用于在数据丢失后将数据还原到同一缓存。

  • 无法将 RDB/AOF 持久化数据文件导入到新缓存或现有缓存。 请改用导入/导出功能。
  • 使用被动异地复制或主动异地复制的缓存不支持持久化。
  • 高级层上的多个副本不支持 AOF 持久化。
  • 高级层上,必须将数据持久化保存到位于缓存实例所在同一区域中的存储帐户。
  • 高级层上,如果使用托管标识连接到存储帐户,则可以使用不同订阅中的存储帐户来持久保存数据。

如何使用 Azure 门户设置数据持久化

  1. 要创建高级缓存,可登录到 Azure 门户并选择“创建资源”。 可在 Azure 门户中创建缓存。 还可使用资源管理器模板、PowerShell 或 Azure CLI 创建缓存。 有关创建 Azure Redis 缓存的详细信息,请参阅创建缓存

    Screenshot that shows a form to create an Azure Cache for Redis resource.

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

    Screenshot showing Azure Cache for Redis selected as a new database type.

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

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

  5. 在“网络”选项卡中,选择你的连接方法。 对于高级缓存实例,可以通过公共 IP 地址或服务终结点公开进行连接。 可以使用专用终结点以私密方式进行连接。

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

  7. 在高级缓存实例的“高级”选项卡中,配置非 TLS 端口、群集和数据暂留的设置。 对于数据暂留,可以选择 RDB 或 AOF 暂留。

  8. 若要启用 RDB 持久性,请选择“RDB”并配置设置。

    设置 建议值 说明
    身份验证方法 打开下拉列表并选择身份验证方法。 选项为托管标识存储密钥 选择你偏好的身份验证方法。 使用托管标识时,可以在与缓存所在的订阅不同的订阅中使用存储帐户。
    订阅 打开下拉列表并选择订阅。 如果使用托管标识作为身份验证方法,则可以选择其他订阅中的存储帐户。
    备份频率 单击下拉箭头并选择一个备份间隔。 选项包括“15 分钟”、“30 分钟”、“60 分钟”、“6 小时”、“12 小时”和“24 小时” 在上一个备份操作成功完成后,此间隔就会开始倒计时。 当它过期时,将启动新的备份。
    存储帐户 单击下拉箭头,选择你的存储帐户。 在与缓存相同的区域和订阅中选择一个存储帐户。 建议使用“高级存储”帐户,因为高级存储的吞吐量更大。 此外,强烈建议禁用存储帐户上的软删除功能,因为这会导致存储成本增加。 有关详细信息,请参阅定价和计费
    存储密钥 单击下拉箭头,选择要使用的“主密钥”或“辅助密钥”。 如果重新生成了持久性帐户的存储密钥,必须从“存储密钥”下拉列表中重新配置密钥。

    备份频率间隔的时间过后,将启动第一次备份。

    注意

    当 RDB 文件备份到存储时,它们以页 blob 的形式存储。 如果使用启用了 HNS 的存储帐户,持久性往往会失败,因为启用了 HNS 的存储帐户 (ADLS Gen2) 不支持页 blob。

  9. 若要启用 AOF 持久性,请选择“AOF”并配置设置。

    设置 建议值 说明
    身份验证方法 打开下拉列表并选择身份验证方法。 选项为托管标识存储密钥 选择你偏好的身份验证方法。 使用托管标识时,可以在与缓存所在的订阅不同的订阅中使用存储帐户。
    订阅 打开下拉列表并选择订阅。 如果使用托管标识作为身份验证方法,则可以选择其他订阅中的存储帐户。
    第一个存储帐户 单击下拉箭头,选择你的存储帐户。 在与缓存相同的区域和订阅中选择一个存储帐户。 建议使用“高级存储”帐户,因为高级存储的吞吐量更大。 此外,强烈建议禁用存储帐户上的软删除功能,因为这会导致存储成本增加。 有关详细信息,请参阅定价和计费
    第一个存储密钥 单击下拉箭头,选择要使用的“主密钥”或“辅助密钥”。 如果重新生成了持久性帐户的存储密钥,必须从“存储密钥”下拉列表中重新配置密钥。
    第二个存储帐户 (可选)单击下拉箭头,选择你的辅助存储帐户。 可以选择性地配置另一个存储帐户。 如果配置第二个存储帐户,写入副本缓存操作会写入到第二个存储帐户。
    第二个存储密钥 (可选)单击下拉箭头,选择要使用的“主密钥”或“辅助密钥”。 如果重新生成了持久性帐户的存储密钥,必须从“存储密钥”下拉列表中重新配置密钥。

    启用 AOF 持久性后,写入缓存操作会保存到指定的存储帐户(如果配置了另一个存储帐户,则会保存到这两个帐户)。 如果灾难性故障导致主缓存和副本缓存均无法使用,则会使用存储的 AOF 日志重新生成缓存。

  10. 选择“下一步: 标记”选项卡,或者选择页面底部的“下一步: 标记”按钮 。

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

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

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

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

如何使用 PowerShell 和 Azure CLI 设置数据持久化

New-AzRedisCache 命令可用于通过数据持久化创建新的高级层缓存。 请参阅 RDB 持久化AOF 持久化的示例

可以使用 Set-AzRedisCache 命令更新现有缓存。 请参阅将持久化添加到现有缓存的示例。

az redis create 命令可用于通过数据持久化创建新的高级层缓存。 例如:

az redis create --location chinanorth2 --name MyRedisCache --resource-group MyResourceGroup --sku Premium --vm-size p1 --redis-configuration @"config_rdb.json"

可以使用 az redis update 命令更新现有缓存。 例如:

az redis update --name MyRedisCache --resource-group MyResourceGroup --set "redisConfiguration.rdb-storage-connection-string"="BlobEndpoint=https//..." "redisConfiguration.rdb-backup-enabled"="true" "redisConfiguration.rdb-backup-frequency"="15" "redisConfiguration.rdb-backup-max-snapshot-count"="1"

管理数据加密

由于 Redis 持久化会创建静态数据,因此加密此数据是许多用户关注的一个重要问题。 加密选项因正在使用的 Azure Cache for Redis 层而异。

使用高级层,数据会在启动持久化时直接从缓存实例流式传输到 Azure 存储。 可将各种加密方法用于 Azure 存储,包括 Microsoft 托管密钥、客户管理的密钥和客户提供的密钥。 有关加密方法的详细信息,请参阅适用于静态数据的 Azure 存储加密

保留常见问题

以下列表包含对 Azure Redis 缓存暂留相关常见问题的解答。

RDB 暂留

AOF 暂留

能否在此前已创建的缓存的基础上启用保留?

是的,可以在创建缓存时或者在现有高级缓存上配置持久性。

是否可以同时启用 AOF 暂留和 RDB 暂留?

不可以,只能分别启用 RDB 或 AOF,但不能同时启用二者。

暂留如何与异地复制一起使用?

如果启用数据持久化,则无法为缓存启用异地复制。

应该选择哪个暂留模型?

AOF 持久性会将每次写入保存到日志,这会对吞吐量产生重大影响。 相较于 AOF,RDB 持久性基于配置的备份间隔保存备份,因此对性能的影响极小。 如果主要目标是最大程度地减少数据损失,并且你可以应对缓存吞吐量下降,请选择 AOF 持久性。 如果希望在缓存上保持最优吞吐量,但仍希望使用一种数据恢复机制,请选择 RDB 暂留。

有关使用 AOF 持久化时的性能详细信息,请参阅 AOF 持久化是否会影响缓存的吞吐量、延迟或性能?

AOF 持久化是否会影响缓存的吞吐量、延迟或性能?

AOF 持久化的确会影响吞吐量。 AOF 运行在主进程和副本进程上,因此与没有 AOF 持久化的相同缓存相比,AOF 持久化缓存的 CPU 和服务器负载会更高。 AOF 提供与内存中数据的最佳一致性,因为每次写入和删除仅在数秒钟延迟的情况下即可持久化保存。 代价是 AOF 的计算密集程度更高。

只要 CPU 和服务器负载同时小于 90%,吞吐量就会受到影响,但缓存会正常运行,反之亦然。 如果 CPU 和服务器负载超过 90%,吞吐量损失可能会高得多,因此缓存处理的所有命令的延迟也会增加。 延迟增加是因为 AOF 持久化运行在主进程和副本进程上,从而增加了正在使用的节点的负载,并将持久化置于数据的关键路径上。

如果我缩放到不同大小并还原了缩放操作之前生成的备份,会发生什么情况?

对于 RDB 暂留和 AOF 暂留:

能否在两个不同的缓存中使用同一存储帐户进行保留?

否,必须为不同的缓存使用不同的存储帐户。 每个缓存都必须有自己的存储帐户,以便设置持久性。

重要

在缓存上使用单独的存储帐户,以实现持久性和执行定期导出操作。

是否需要为数据持久化中使用的存储付费?

  • 对于高级缓存,将按照正在使用的存储帐户的定价模型,为所使用的存储付费。

RDB 和 AOF 的持续写入 blob 的频率如何,是否应启用软删除?

如果在高级层中将存储帐户与 Azure Cache for Redis 数据持久化一起使用,建议避免在存储帐户上启用软删除。 RDB 和 AOF 持久性可以按照每小时、每分钟或每秒的频率写入你的 blob。 另外,在存储帐户上启用软删除意味着 Azure Cache for Redis 无法通过删除旧备份数据来最大程度地减少存储成本。

如果缓存采用典型数据大小,同时每秒执行写入操作,则软删除将很快变得价格高昂。 有关软删除的详细信息,请参阅定价和计费

创建缓存后是否可更改 RDB 备份频率?

是,可以使用 Azure 门户、CLI 或 PowerShell 更改 RDB 持久化的备份频率。

为何我的 RDB 备份频率为 60 分钟,而两次备份的间隔却超过 60 分钟?

RDB 持久性备份频率间隔在先前备份过程已成功完成后才会开始。 如果备份频率为 60 分钟,而备份过程需要 15 分钟才能完成,则在上一次备份开始以后,要再过 75 分钟才会开始下一次备份。

进行新备份以后,旧的 RDB 备份会发生什么情况?

除最新备份外的所有 RDB 持久性备份会被自动删除。 这种删除可能不会即刻发生,但旧备份是不会无限期保存。 如果使用高级层来实现持久化,并已为存储帐户启用软删除,则会应用软删除设置,而现有备份将继续处于软删除状态。

是否应使用第二个存储帐户?

如果认为缓存上的设置操作高于预期,可将另一个存储帐户用于 AOF 持久化。 设置辅助存储帐户有助于确保缓存不会达到存储带宽限制。 此选项仅适用于高级层缓存。

如何删除第二个存储帐户?

可通过将第二个存储帐户设置为与第一个存储帐户相同的方式来删除 AOF 暂留辅助存储帐户。 对于现有缓存,可从缓存的“资源”菜单访问“数据持久化”。 若要禁用 AOF 持久性,请选择“禁用”。

什么是重写?重写对缓存有何影响?

在 AOF 文件足够大时,重写会自动处于缓存上的队列中。 重写使用创建当前数据集所需的最小操作集来重设 AOF 文件大小。 重写期间预期会很快达到性能限制,尤其是在处理大型数据集时。 AOF 文件越大,重写发生频率就会越低,但是如果发生,就会耗费较长时间。

缩放启用 AOF 的缓存时会出现什么情况?

如果缩放时 AOF 文件很大,则缩放操作所花时间应长于预期,因为缩放完成后才会重新加载文件。

有关缩放的详细信息,请参阅如果我缩放到不同大小并还原了缩放操作之前生成的备份,会发生什么情况?

AOF 数据如何在存储中进行整理?

使用高级层时,AOF 文件中存储的数据会按分片划为多个页 Blob。 默认情况下,一半的 Blob 保存在主存储帐户中,一半保存在辅助存储帐户中。 跨多个页 Blob 和两个不同的存储帐户拆分数据可提高性能。

如果写入缓存的峰值速率不是很高,则可能不需要这种额外的性能。 在这种情况下,可以删除辅助存储帐户配置。 所有 AOF 文件会转而仅存储在单个主存储帐户中。 下表介绍每个定价层使用的页 Blob 总数:

高级层 Blob
P1 8 个/分片
P2 16 个/分片
P3 32 个/分片
P4 40 个/分片

启用群集时,缓存中的每个分片具有自己的页 Blob 集,如上表所示。 例如,具有 3 个分片的 P2 缓存在 48 个页 Blob 之间分配其 AOF 文件:每个分片 16 个页 Blob,共 3 个分片。

重写后,存储中存在 2 个 AOF 文件集。 重写在后台进行,并追加到第一个文件集。 在重写期间发送到缓存的设置操作会追加到第二个集。 重写期间如果发生故障,会暂时存储备份。 重写完成后,会立即删除该备份。 如果为存储帐户启用软删除,则会应用软删除设置,而现有备份将继续处于软删除状态。

对存储帐户设置防火墙例外是否会影响持久化?

使用托管标识会将缓存实例添加到受信任的服务列表,从而更容易执行防火墙例外。如果没有使用托管标识,而是使用密钥授权存储帐户,则存储帐户上的防火墙例外往往会中断持久性过程。 这仅适用于高级层中的持久化。

如果我有多个副本,是否可以启用 AOF 持久性?

使用高级层时,无法对多个副本使用仅追加文件 (AOF) 持久化。

如何检查我的存储帐户上是否启用了软删除?

选择你的缓存用于持久性的存储帐户。 从“资源”菜单中选择“数据保护”。 在工作窗格中,检查“为 Blob 启用软删除”的状态。 有关 Azure 存储帐户中的软删除的详细信息,请参阅为 Blob 启用软删除

后续步骤

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