持久化意味着某些东西会持续存在。在数据库的上下文中,这意味着您打算以某种方式(在内存或磁盘上)保存一段信息一段时间,以便即使计算机进程被终止也能恢复该信息。借助数据持久化,应用程序中的现有数据在会话之间保持不变,从而将其保留以供后续应用程序会话使用,而不会丢失数据。在服务器重启的情况下,数据持久化尤其重要,因为仅存储在内存中的数据会在断电时丢失。
Redis 企业版是一个完全持久化的数据库,它使用 RAM 或 Redis on Flash 直接从内存中提供所有数据。关于持久化数据,Redis 仅在高可用性数据库中的主分片和副分片都丢失时才读取此数据。
Redis 支持仅追加文件数据持久化 (AOF) 以及快照。也可以同时使用 RDB 和 AOF,称为“混合持久化”,以利用这两种选项的优势。让我们深入探讨以下每个 Redis 数据持久化选项,并进一步解释和更详细地介绍每种选项的优缺点。
仅追加文件 (AOF) 是一种日志记录机制,它将对 Redis 数据库执行的每个写入操作写入磁盘上的日志文件。日志文件用于在发生崩溃或故障时重建数据库。
AOF 的工作原理是将每个数据库写入操作追加到日志文件的末尾,因此称为仅追加文件。当 Redis 重启时,它会读取日志文件并重新执行文件中保留的写入操作,以将数据库恢复到其先前状态。
与仅创建时间点数据快照的快照持久化选项相比,AOF 提供了更好的数据持久性。
Redis 使用多部分 AOF 机制,其中原始 AOF 分割为基本文件和增量文件。基本文件表示写入 AOF 时存在的数据的初始快照。增量文件包含自上次创建基本 AOF 之后的更改。
当 AOF 过大时,您可以将其配置为在后台重写,使用称为 AOF fsync 的进程。fsync 配置指令控制 AOF 日志文件与磁盘同步的频率。
最新的 AOF 机制实现减少了 AOF 重写期间的内存消耗和 I/O 操作量。
快照是存储在内存中的 Redis 数据的时间点副本。快照是使用 Redis 数据库 (RDB) 持久化选项创建的,该选项允许将 Redis 数据库的状态以指定的间隔保存到磁盘。当获取 RDB 快照时,Redis 会创建一个子进程来执行快照,从而允许主进程继续为请求提供服务。
快照对于创建 Redis 数据库的备份以及在 Redis 实例之间迁移数据非常有用。可以使用“SAVE”或“BGSAVE”命令手动创建它们,也可以使用 Redis 配置文件中的“save”配置指令自动创建它们。
重要的是要注意,虽然快照允许将 Redis 中的数据持久化到磁盘,但它们没有提供与 AOF 持久化选项相同级别的数据持久性。AOF 将对 Redis 数据库执行的每个写入操作写入磁盘上的日志文件,该文件可用于在发生崩溃或故障时重建数据库。
快照和备份专为两种不同的事情而设计。虽然快照支持数据持久性(即在内存中没有数据集副本时自动恢复数据),但 备份 支持灾难恢复(即需要从头开始重建整个集群时)。
数据持久性是指数据在一段时间内保持存储和可访问的能力,即使面对各种类型的故障或灾难也是如此。另一方面,数据可用性是指用户在需要时访问和使用数据的能力。
数据可用性涉及设计系统和流程,允许用户在需要时访问和使用数据。这可能涉及设计具有高正常运行时间和快速响应时间的系统,以及实施故障转移和负载平衡机制,以确保即使某些系统出现故障,用户也始终可以访问数据。
对于数据中心而言,可用性和持久性都是重要的指标。数据中心将通过使用冗余存储系统(如存储区域网络 (SAN) 或网络附加存储 (NAS) 系统)来支持持久性。这些系统提供多个数据副本,因此如果一个副本不可用,则可以访问其他副本。
有关此主题的更多信息,请参阅我们的博客文章 数据持久性和可用性。
在云原生部署(如公有云、私有云或虚拟私有云)中,临时(实例)存储不能用于数据持久性目的。
临时存储或易失性临时存储会在其相应容器达到其生命周期结束时丢弃数据。
相反,需要网络附加存储 (NAS),如 Amazon Elastic Block Store (EBS)、Microsoft Azure 磁盘存储 或 Google Cloud Platform 永久性磁盘。这是因为,顾名思义,临时存储是临时的!当云实例出现故障时(这相对常见),其本地磁盘的内容也会丢失。
持久存储,也称为非易失性存储,是指任何能够在断电时保持数据完整和可用的存储设备。
持久存储对于维护关键数据并使其可供以后使用非常有用。硬盘驱动器是持久存储设备的常见示例。
Redis 企业版集群旨在与网络附加存储配合使用以实现数据持久性。默认情况下,集群中的每个节点都连接到网络附加存储资源,这使得集群能够免受数据丢失事件的影响,例如多个节点故障,而 DRAM 中没有数据集副本。这种经过数据持久性验证的架构如下所示
如上图所示,在 DRAM 中没有数据集副本的情况下,Redis 企业版将在连接到故障节点的网络附加设备中查找数据集的最新副本,并使用该副本填充新云实例上的 Redis 分片。
默认情况下,当启用数据持久化时,Redis 企业版会在数据库的每个分片的副本上设置数据持久化。在此配置中,对性能没有影响,因为主分片不受磁盘速度慢的影响;另一方面,复制会增加延迟,这可能会破坏数据持久化 SLA。因此,Redis 企业版允许您在主分片和副本分片上启用数据持久化。这是一种更可靠的配置,不会侵犯您的数据持久化 SLA,但如果磁盘速度无法应对“写入”的吞吐量,它会影响数据库的延迟,因为 Redis 会在无法提交到磁盘时延迟其处理。如果您使用 Redis 企业版 DBaaS 部署(云或 VPC),您将自动调整为使用存储引擎和正确的分片配置来支持您的持久存储负载;在本地部署中,我们建议您咨询 Redis 解决方案架构师以了解您的规模。数据持久化选项如下所示
Redis 企业版增强了 Redis 存储引擎,以提高启用数据持久化时 Redis 内核的吞吐量,并通过允许多个 Redis 实例在同一集群节点上运行而不会影响性能来更好地利用集群资源
Dell-EMC 和 Redis 执行的存储引擎基准测试表明,当将 Redis Enterprise 的增强型存储引擎与 Dell-EMC VMAX 结合使用时,Redis 性能几乎不受 AOF 每次写入操作的影响,如下所示
有关此基准测试的更多信息,请访问此处
持久存储也称为非易失性存储,是指即使在存储设备断电的情况下也能保持数据完整且可访问的设备。
它与持久存储同义。Non-Volatile Storage 是指即使断电也不会丢失数据的存储设备。
此层包含在应用程序的堆栈中,以便于检索在持久存储中找到的数据。持久层策略取决于所选应用程序的数据结构。例如,NoSQL 数据库需要与关系数据库不同类型的数据层实现。
它使关键数据在需要时易于访问,因为它的持久性不依赖于容器的寿命或存储设备的电源。
如果应用程序关闭,持久数据使该数据在应用程序的下一个会话中完全可用,而如果在终止过程中执行任何写入,则非持久数据将变得不可检索。
数据持久性极大地塑造了现代数字体验。以流媒体为例。假设一位客户在密歇根州观看一部连续剧,但在中途暂停观看,去赶一趟国际航班。预期是,在下一个会话中,即使是在地球另一端的会话中,也应该允许客户在请求时立即访问数据。即使跨越地理区域和多个会话,可用数据的无缝连续性也是数据持久性的一个例子。
云存储是一种服务,允许您将数据存储在通过互联网访问的远程服务器上,而不是存储在本地计算机或现场数据存储系统上。借助云存储,您可以从任何连接互联网的设备存储和访问数据。一些云存储服务的例子包括 Google Drive、Microsoft OneDrive 和 Dropbox。
下一节 ► 备份、恢复和集群恢复