CRDB 区域故障中的一致性与数据丢失注意事项

上次更新时间:2024 年 4 月 18 日

问题

使用主动-主动 Geo 分布式数据库,区域性中断可能会导致多少数据丢失,以及可能出现哪些其他一致性问题?

术语

关键路径。在项目管理中,关键路径是完成一个项目所必须完成的任务的最长序列。DR。灾难恢复 (DR) 是一个组织对对业务运营产生负面影响的事件做出响应和恢复的能力。RTO。恢复时间目标是在灾害发生后业务运营恢复或资源再次可用的时间量。

答案

假设 CRDB 副本中的主库和副本分片之间没有复制数据丢失的情况,那么重点不应放在数据丢失上,而应放在数据一致性上,因为在故障发生之前提交的某些更改可能尚未与其他 CRDB 副本协调。它最终会得到协调,因此这不是数据丢失的问题。

如果 CRDB 副本未开启 AOF 持久性,当此副本发生故障时,不会被复制到其他 CRDB 副本的更改将丢失:从最新的备份加与其他 CRDB 副本同步的更改开始执行恢复。在这种情况下,丢失的数据量与网络延迟和复制速度呈函数关系,并且数据大小(和数据类型)允许估计丢失数据量的范围。

顺便提一下,即使开启了 AOF 持久性,也可能丢失数据

  • 在 CRDB 副本中,是由副本分片来执行持久性(默认配置),对副本分片的复制是异步的,因此在命令执行和数据安全地存储到磁盘之间存在延时
  • 仅追加文件通常配置为每秒对磁盘执行一次 fsync,这给数据丢失又增加了 1 秒

使用 CRDB 进行灾难恢复的客户应监控集群之间的复制延迟,并进行压力测试以了解在预期峰值负载下的延迟。可以说,切换到 DR 位置时数据不会丢失,但如果主位置宕机“很长”一段时间,对于某些应用程序来说,原始位置中未复制的数据就相当于丢失。区域之间的延迟可能在几秒钟的范围内(1、2 等)。对于购物车应用程序来说,这意味着添加到购物车的最后几件商品可能会丢失。

恢复目标

用户设置恢复目标,通常涵盖的范围大于一个缓存/数据库。在会话缓存 5 分钟内恢复,记录的事务数据系统 (SOR) 在 2 小时内恢复的场景中,会话缓存的 RTO 将不相关。仅当会话缓存是关键路径的一部分时才重要。CRDB 数据库可用于将数据复制到 DR 站点,但应用程序故障转移到 DR CRDB 副本所需的时间主要取决于客户。可以将 CRDB 视为支持业务连续性而不是 DR。业界逐渐认识到这些术语之间的差异,但仍然习惯将所有内容都称为 DR。这并不是完全正确的,因为 CRDB 部署可以完全避免恢复。

参考

请参阅本文的“高可用性与灾难恢复”一节。文章