配置数据库持久化
如何配置数据库持久化,使用仅追加文件(AOF)或快照。
数据存储在RAM或RAM与闪存组合中(Auto Tiering),这在进程或服务器故障期间存在数据丢失的风险。Redis Enterprise Software支持多种方法,按数据库将数据持久化到磁盘,以确保数据的持久性。
您可以在数据库创建期间或通过编辑现有数据库来配置持久性。尽管持久性模型可以动态更改,但切换可能需要时间,具体取决于数据库大小和正在切换的模型。
配置数据库持久化
您可以在创建数据库时配置持久性,或者您可以编辑现有数据库的配置:
-
从数据库列表中,选择数据库,然后选择配置。
-
选择编辑。
-
展开耐久性部分。
-
对于持久性,请从列表中选择一个选项。
-
选择保存。
数据持久化选项
Redis Enterprise Software 中有六种持久化选项:
选项 | 描述 |
---|---|
None | 数据完全不持久化到磁盘。 |
仅追加文件 (AOF) - 每次写入都进行 fsync | 每次写入时数据都会通过 fsync 同步到磁盘。 |
仅追加文件 (AOF) - 每秒 fsync | 数据每秒同步到磁盘。 |
快照,每小时一次 | 每小时创建一次数据库的快照。 |
快照,每6小时 | 每6小时创建一次数据库的快照。 |
快照,每12小时 | 每12小时创建一次数据库的快照。 |
选择持久化策略
在选择持久化策略时,您应考虑对数据丢失的容忍度和性能需求。这两者之间总是存在权衡。 fsync() 系统调用将数据从文件缓冲区同步到磁盘。您可以配置 Redis 执行 fsync() 的频率,以便在性能和持久性之间为您的用例做出最有效的权衡。 Redis 支持三种 fsync 策略:每次写入、每秒和禁用。
Redis 还允许通过 RDB 文件进行快照以实现持久化。在 Redis Enterprise 中,您可以配置快照和 fsync 策略。
对于任何高可用性需求,使用复制以进一步降低数据丢失的风险。
对于数据丢失成本较高的使用场景:
仅追加文件(AOF)- 每次写入都进行fsync - Redis Enterprise 设置 Redis 指令 appendfsyncalways
。使用此策略时,Redis 将等待写入和 fsync 完成,然后再向客户端发送数据已写入的确认。这除了执行命令外,还引入了 fsync 的性能开销。fsync 策略始终优先考虑持久性而非性能,应在数据丢失成本较高时使用。
对于数据丢失仅可有限容忍的使用场景:
仅追加文件(AOF)- 每秒执行一次fsync - Redis将每秒对任何新写入的数据执行fsync。此策略在性能和持久性之间取得平衡,应在故障发生时可以接受最小数据丢失的情况下使用。这是Redis的默认策略。此策略可能导致1到2秒的数据丢失,但平均而言,这将接近1秒。
对于可以容忍数据丢失或长时间可恢复的用例:
- 快照,每小时一次 - 每小时执行一次完整备份。
- 快照,每6小时 - 每6小时执行一次完整备份。
- 快照,每12小时 - 每12小时执行一次完整备份。
- 无 - 完全不备份或持久化数据。
仅追加文件 (AOF) 与快照 (RDB)
既然你已经了解了可用的选项,为了帮助你决定哪个选项适合你的使用场景,这里有一个关于两者的表格:
仅追加文件 (AOF) | 快照 (RDB) |
---|---|
资源消耗更多 | 资源消耗较少 |
提供更好的持久性(恢复到最后的时间点) | 持久性较差 |
恢复时间较慢(文件较大) | 恢复时间较快 |
需要更多的磁盘空间(文件往往会变得很大并且需要压缩) | 需要较少的资源(每隔几小时进行一次I/O操作,且不需要压缩) |
主动-主动数据持久化
Active-Active 数据库仅支持 AOF 持久化。Active-Active 数据库不支持快照持久化。
如果Active-Active数据库正在使用快照持久化,请使用crdb-cli
切换到AOF持久化:
crdb-cli crdb update --crdb-guid <CRDB_GUID> --default-db-config \
'{"data_persistence": "aof", "aof_policy":"appendfsync-every-sec"}'
自动分层数据持久化
自动分层闪存存储不被视为持久存储。
基于闪存的数据库预计将保存更大的数据集,节点故障后的分片修复时间可能会更长。为了更好地保护数据库免受修复时间较长的节点故障影响,请考虑启用主节点和副本节点的双数据持久化。
然而,使用复制的双重数据持久化会增加一些处理器和网络开销,特别是对于具有网络附加持久存储的云配置,例如AWS中的EBS支持卷。
有时,性能对您的使用场景至关重要,您不希望数据持久化增加延迟的风险。
您可以使用以下rladmin
命令在主分片上启用或关闭数据持久化:
rladmin tune db <database_ID_or_name> master_persistence <disabled | enabled>