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