为 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 门户设置数据持久化
如何使用 PowerShell 和 Azure CLI 设置数据持久化
管理数据加密
由于 Redis 持久化会创建静态数据,因此加密此数据是许多用户关注的一个重要问题。 加密选项因正在使用的 Azure Cache for Redis 层而异。
使用高级层,数据会在启动持久化时直接从缓存实例流式传输到 Azure 存储。 可将各种加密方法用于 Azure 存储,包括 Microsoft 托管密钥、客户管理的密钥和客户提供的密钥。 有关加密方法的详细信息,请参阅适用于静态数据的 Azure 存储加密。
保留常见问题
以下列表包含对 Azure Redis 缓存暂留相关常见问题的解答。
- 能否在此前已创建的缓存的基础上启用保留?
- 是否可同时启用 AOF 暂留和 RDB 暂留?
- 暂留如何与异地复制一起使用?
- 应该选择哪个暂留模型?
- 如果我缩放到不同大小并还原了缩放操作之前生成的备份,会发生什么情况?
- 能否在两个不同的缓存中使用同一存储帐户进行保留?
- 是否需要为数据暂留中使用存储付费
- RDB 和 AOF 的持续写入 blob 的频率如何,是否应启用软删除?
- 对存储帐户设置防火墙例外是否会影响持久性
- 如何检查我的存储帐户上是否启用了软删除?
RDB 暂留
AOF 暂留
- 是否应使用第二个存储帐户?
- AOF 持久化是否会影响缓存的吞吐量、延迟或性能?
- 如何删除第二个存储帐户?
- 什么是重写?重写对缓存有何影响?
- 缩放启用 AOF 的缓存时会出现什么情况?
- AOF 数据如何在存储中进行整理?
- 如果我有多个副本,是否可以启用 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 暂留:
- 扩展到更大的大小不会产生任何影响。
- 如果缩减到更小的大小,并且自定义数据库设置大于新大小的数据库限制,则不会还原这些数据库中的数据。 有关详细信息,请参阅在缩放过程中,自定义数据库设置是否会受影响?
- 如果缩减到更小的大小,并且更小的大小空间不足,无法容纳上次备份的所有数据,则在还原过程中会逐出密钥。 通常使用 allkeys-lru 逐出策略来逐出密钥。
能否在两个不同的缓存中使用同一存储帐户进行保留?
否,必须为不同的缓存使用不同的存储帐户。 每个缓存都必须有自己的存储帐户,以便设置持久性。
重要
在缓存上使用单独的存储帐户,以实现持久性和执行定期导出操作。
是否需要为数据持久化中使用的存储付费?
- 对于高级缓存,将按照正在使用的存储帐户的定价模型,为所使用的存储付费。
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 功能的详细信息。