时间点恢复和提交日志 - Cassandra

Point in time recovery and commitlog - Cassandra

我从 c​​assandra 开始,我需要为其设置时间点恢复。我激活了提交日志,但只有存档的提交日志出现在我的备份文件夹中,当前提交日志是实时更新的。所以,如果节点崩溃,当我从存档的提交日志中恢复时,我如何才能得到最后一个不在存档日志中的日志?

当我使用 nodetool flush 时,更新了增量备份但未归档提交日志

当写入 Cassandra 节点时,它首先进入提交日志(磁盘),然后进入内存表(内存)。

根据某些条件(大小...),内存表会定期刷新到磁盘并成为 SSTable。

提交日志用于重播内存中的数据,如果节点崩溃,则不会刷新到磁盘。因此,当内存中的数据被刷新到磁盘时,相应的提交日志将被清除。

所以如果你使用 nodetool flush,memtables 中的数据被刷新到磁盘到 sstable,并且不再需要提交日志。

如果节点崩溃,你不需要做任何恢复,当它重新启动时,它会重播提交日志中包含的突变:如果任何数据没有刷新到磁盘,提交日志将不会为空.

恢复和备份更多地通过快照处理,nodetool 快照,使用提交日志从保存点恢复并不常见,更合适的使用是当节点崩溃并且数据未写入磁盘时。

如果需要,您还可以激活归档提交日志:

https://cassandra.apache.org/doc/latest/configuration/cass_cl_archive_file.html

您可以在此处找到有关 Cassandra 备份的更多详细信息: https://docs.datastax.com/en/archived/cassandra/3.0/cassandra/operations/opsBackupRestore.html

如果你想看看 Cassandra 中的写入路径,它会让你更好地理解数据是如何写入的:

https://docs.datastax.com/en/cassandra-oss/2.1/cassandra/dml/dml_write_path_c.html