如果发生 Azure Redis 缓存缓存失败,则节点关闭时可能会丢失数据。 Redis 持久性 允许保留缓存实例中存储的数据。 如果发生硬件故障,缓存实例在恢复联机时会使用持久性文件中的数据解除冻结。
本文介绍 Redis 暂留,以及如何在高级层和企业层 Azure Redis 缓存实例中配置和管理数据暂留。 数据持久性功能在“基本”或“标准”层中不可用,在 Enterprise 和 Enterprise Flash 层中处于预览状态。
持久保存数据是提升缓存实例持久性的重要方法,因为它将所有缓存数据存储在内存中。 持久性应该是 Azure Redis 高可用性和灾难恢复 策略的关键部分。
重要
数据持久化功能提供了可应对意外 Redis 节点故障的复原能力。 数据暂留不是数据备份或时间点恢复 (PITR) 功能。 如果将损坏的数据写入 Redis 实例,则损坏的数据也会保留。 若要备份 Redis 实例,请使用 “导出 ”功能。
可用范围
层 | 基本、标准 | 高级 | Enterprise、Enterprise Flash |
---|---|---|---|
可用 | 否 | 是 | 是(预览版) |
Redis 数据持久性的类型
Azure Redis 提供两种类型的数据持久性:Redis 数据库 (RDB) 格式和仅追加文件 (AOF) 格式。
RDB 持久性 以二进制格式保存缓存的快照,并将其保存在 Azure 存储帐户中。 配置备份频率以确定保留快照的频率。 如果发生禁用主缓存和副本缓存的灾难性事件,则缓存会自动使用最新的快照重新构造。 有关详细信息,请参阅 RDB 优点 和 RDB 缺点。
AOF 持久性 将每次写入作保存到日志,并将日志每秒一次保存到 Azure 存储帐户。 如果发生同时禁用主缓存和副本缓存的灾难性事件,则缓存会自动使用存储的写入作重新构造。 有关详细信息,请参阅 AOF 优点 和 AOF 缺点。
要求和限制
数据持久性功能为意外的 Redis 节点故障提供复原能力。 数据持久性不是数据备份或 PITR 功能。 如果损坏的数据写入 Redis 实例,则损坏的数据也会保留。 若要备份 Redis 实例,请使用 “导出 ”功能。
Azure Redis 缓存持久性功能旨在将数据在数据丢失后自动还原到同一缓存。 无法将持久化数据文件导入新的或现有的缓存。
若要跨缓存移动数据,请使用 导入和导出数据 功能。
若要生成可添加到新缓存的数据的任何备份,可以使用定期导出数据的 PowerShell 或 Azure CLI 自动脚本。
数据加密
由于 Redis 持久性会创建静态数据,因此加密此数据非常重要。 加密选项因使用的 Azure Redis 层而异。
设置数据持久性
可以使用 Azure 门户、Azure 资源管理器(ARM)模板、PowerShell 或 Azure CLI 为高级层或企业层 Azure Redis 缓存创建和设置数据暂留。
先决条件
- 若要创建和添加 Azure Redis 缓存的持久性,需要在 Azure 订阅中创建高级或企业级缓存的写入访问权限和权限。
- 对于高级层缓存,需要缓存所在的同一区域中的 Azure 存储帐户 来存储缓存数据。 如果使用 托管标识 作为身份验证方法,则可以在与缓存不同的订阅中使用存储帐户。
- 对于 Azure PowerShell 过程,需要 安装 Azure PowerShell,或者在 Azure 门户中将 Azure Cloud Shell 与 PowerShell 环境配合使用。
- 对于 Azure CLI 过程,需要 安装 Azure CLI,或者在 Azure 门户中将 Azure Cloud Shell 与 Bash 环境配合使用。
在 Azure 门户中设置数据持久性
在 Azure 门户中,可以在创建 Azure Redis Premium 或企业级缓存实例时设置数据持久性。
使用 Azure PowerShell 设置数据持久性
创建 Azure Redis Premium 或企业层缓存时,可以使用 Azure PowerShell 设置数据暂留,或者将持久性添加到以前创建的缓存。
使用 Azure CLI 设置数据持久性
创建 Azure Redis Premium 或企业层缓存时,可以使用 Azure CLI 设置数据暂留,或者将持久性添加到以前创建的缓存。
持久性常见问题
本部分包含有关 Azure Redis 缓存持久性的常见问题的解答。
- 是否可以在现有缓存上启用持久性?
- 是否可以同时启用 AOF 和 RDB 持久性?
- 持久性是否适用于异地复制?
- 应该选择哪个暂留模型?
- 如果我调整为不同的大小,然后还原到缩放操作之前的备份,会发生什么情况?
- 能否在两个不同的缓存中使用同一存储帐户进行保留?
- 是否对存储数据暂留使用收费?
- RDB 和 AOF 持久性写入存储的频率如何? 是否应启用软删除?
- 存储帐户上的防火墙例外是否会影响持久性?
- 如何检查我的存储帐户上是否启用了软删除?
- 是否可以在与缓存所在的订阅不同的订阅中使用存储帐户?
RDB 持久性
AOF 持久性
- 是否应使用第二个存储帐户?
- AOF 持久性是否会影响缓存吞吐量、延迟或性能?
- 如何删除第二个存储帐户?
- 什么是重写,以及它如何影响缓存?
- 扩展启用 AOF 的缓存时,我应该期待什么?
- AOF 数据如何在存储中进行整理?
- 如果我有多个副本,是否可以启用 AOF 持久性?
能否在此前已创建的缓存的基础上启用保留?
可以,可以在缓存创建时和现有高级、企业或企业闪存缓存上配置持久性。
是否可以同时启用 AOF 持久化和 RDB 持久化?
否,可以启用 RDB 或 AOF,但不能同时启用两者。
持久性如何与异地复制协同工作?
数据持久性在启用异地复制时不工作。
应该选择哪个暂留模型?
AOF 持久性每秒写入日志一次,而 RDB 持久性会基于配置的备份间隔保存备份。 与 AOF 持久性相比,RDB 持久性对吞吐量和性能的影响较小。
选择 AOF 持久性,若您的主要目标是最大程度减少数据丢失,同时可以接受缓存吞吐量较低。 如果要在缓存上保持最佳吞吐量,但仍需要一种用于数据恢复的机制,请选择 RDB 持久性。
有关详细信息,请参阅 RDB 优点、 RDB 缺点、 AOF 优点和 AOF 缺点。
AOF 持久化是否会影响缓存的吞吐量、延迟或性能?
AOF 持久性会影响吞吐量。 由于 AOF 同时在主进程和副本进程中运行,因此对于具有 AOF 持久性的缓存,CPU 和服务器负载高于没有 AOF 持久性的相同缓存。 AOF 提供与内存中数据的最佳一致性,因为每次写入和删除仅在数秒钟延迟的情况下即可持久化保存。 代价是 AOF 的计算密集程度更高。
只要 CPU 和服务器负载都小于 90%,吞吐量会受到影响,但缓存正常运行。 如果 CPU 和服务器负载超过 90%,吞吐量损失可能会提高,因此由缓存处理的所有命令的延迟也会增加。 延迟增加是因为 AOF 持久化运行在主进程和副本进程上,从而增加了正在使用的节点的负载,并将持久化置于数据的关键路径上。
如果我调整到不同的大小,并且还原了在缩放操作之前进行的备份,会发生什么情况?
- 如果放大到更大的尺寸,将不会产生任何影响。
- 如果调整为较小的大小,并且自定义的数据库设置超过了新的数据库限制,那么这些数据库中的数据将不会被还原。 有关详细信息,请参阅在缩放过程中,自定义数据库设置是否会受影响?
- 如果缩放到较小的大小,并且较小的空间不足以保存上次备份中的所有数据,则还原过程中会逐出密钥。 通常使用 allkeys-lru 逐出策略来逐出密钥。
能否在两个不同的缓存中使用同一存储帐户进行保留?
否,必须使用不同的存储帐户。 每个缓存都必须有自己的存储帐户,以便设置持久性。
重要
此外,使用单独的存储帐户来进行持久性管理,并定期在缓存上执行导出操作。
是否会对数据持久化中使用的存储费用进行收费?
- 对于高级缓存,需根据存储帐户的定价模型为使用的存储付费。
- 对于企业和企业闪存缓存,托管磁盘存储包含在价格中,不会产生额外的费用。
RDB 和 AOF 的持续写入 blob 的频率如何,是否应启用软删除?
RDB 和 AOF 持久性可以按照每小时、每分钟或每秒的频率写入你的存储 blob。 如果缓存采用典型数据大小,同时每秒执行写入操作,则软删除将很快变得价格高昂。 在存储帐户上启用软删除也意味着 Azure Redis 无法通过删除旧的备份数据来最大程度地降低存储成本。
最好避免在用于 Azure Redis 高级层数据持久性的存储帐户上启用软删除。 有关软删除的详细信息,请参阅定价和计费。
创建缓存后是否可更改 RDB 备份频率?
可以,可以使用 Azure 门户、Azure CLI 或 Azure PowerShell 更改 RDB 暂留的备份频率。
为何我的 RDB 备份频率为 60 分钟,而两次备份的间隔却超过 60 分钟?
在上次备份过程成功完成前,RDB 持久化备份频率间隔不会开始。 如果备份频率为 60 分钟,并且备份过程需要 15 分钟才能完成,则下一个备份在上一次备份的开始时间后 75 分钟才会启动。
进行新备份以后,旧的 RDB 备份会发生什么情况?
除最新备份外的所有 RDB 持久性备份会被自动删除。 这种删除可能不会即刻发生,但旧备份是不会无限期保存。 如果使用高级层进行暂留,并且已为存储帐户启用软删除,则现有备份将继续驻留在软删除状态。
是否应使用第二个存储帐户?
如果预期缓存上的 SET 操作高于正常水平,请使用第二个存储帐户用于 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 文件集。 重写在后台进行,并追加到第一个文件集。 在重写期间发送到缓存的 SET 操作会追加到第二个文件集。
如果在重写期间出现故障,则会临时存储备份。 重写完成后,会立即删除备份。 如果为存储帐户启用软删除,则会应用软删除设置,而现有备份将继续处于软删除状态。
存储帐户上的防火墙例外是否会影响持久性?
是的。 对于高级层中的持久性,使用 存储帐户上的防火墙设置 可以防止持久性功能正常工作。
可以通过查看 “错误”指标来检查保存数据中的错误。 此指标指示缓存是否由于存储帐户或其他问题的防火墙限制而无法保留数据。
若要对设置了防火墙的存储帐户使用数据持久性,请使用 基于托管标识的身份验证 连接到存储。 使用托管标识将缓存实例添加到 受信任的服务列表中,使防火墙例外更易于应用。 如果使用密钥而不是托管标识授权存储帐户,则存储帐户上的防火墙例外往往会中断持久性过程。
如果我有多个副本,是否可以启用 AOF 持久性?
使用高级层时,在有多个副本的情况下不能使用 AOF 持久性。 在企业层和企业闪存层中,副本体系结构更为复杂,但在区域冗余部署中使用企业缓存时,支持 AOF 持久性。
如何检查我的存储帐户上是否启用了软删除?
在 Azure 门户中,选择缓存用于持久性的存储帐户,并在其左侧导航菜单中的数据管理下选择数据保护。 在“数据保护”页上,检查是否已启用“为 blob 启用软删除”。 有关 Azure 存储帐户中的软删除的详细信息,请参阅为 Blob 启用软删除。
是否可以在与缓存所在的订阅不同的订阅中使用存储帐户?
仅当使用托管标识作为存储帐户身份验证方法时,才能选择其他订阅中的存储帐户。
相关内容
了解有关 Azure Cache for Redis 功能的详细信息。