提交日志同步期

时间:2017-11-07 01:37:40

标签: cassandra cassandra-3.0 scylla

根据cassandra提交日志同步周期..数据首先进入os缓冲区...然后从os缓冲区,基于提交日志同步周期,缓冲区数据被同步到磁盘中提交日志文件...和默认同步期间是10秒......如果服务器在那10秒内崩溃了......数据丢失了吗?但是客户端获得了响应,因为当数据被写入os缓冲区中的commitlog缓冲区并且可记忆时...但最终数据丢失,因为系统在10秒窗口内崩溃...我错过了什么?

2 个答案:

答案 0 :(得分:8)

你没有遗漏任何东西。像Cassandra和Scylla这样的数据库不仅可以在故障情况下权衡可用性,而且像Postgres这样的传统数据库也可以权衡性能的耐久性。您可以将commitlog_sync选项更改为batch或减少commitlog_sync_period_in_ms;请注意,如果执行此操作,最好将commitlog存储在与数据目录不同的介质中。

这背后的原因是耐久性可以通过持久性实现,也可以通过复制实现。典型的Cassandra / Scylla用户通常会RF = 3,并且使用QUORUM的一致性级别进行编写,这样您就需要多台计算机的协同故障才能真正丢失数据。

答案 1 :(得分:2)

(免责声明:我是ScyllaDB员工)

我认为您缺少的是数据会同时写入记录日志磁盘和memtable,并假设您正在使用RF> 1与CL> 1(例如仲裁),即使特定节点崩溃,其他副本仍然会有数据,以后可以修复。

如果您正在使用RF> 1和CL = ONE,如果节点在同步副本之前崩溃,那么数据也将丢失。

如果整个群集出现故障,或者在单个节点群集的情况下,您的客户端可以恢复成功,但数据将丢失。

欢迎您查看Scylla Architecture文档以获得更好的理解: