【发布时间】:2020-08-21 22:10:28
【问题描述】:
我从 cassandra 开始,我需要为它设置时间点恢复。我被激活了提交日志,但只有存档的提交日志出现在我的备份文件夹中,当前的提交日志是实时更新的。那么,如果节点崩溃,当我从归档的提交日志中恢复时,我怎样才能得到最后一个不在归档日志中的日志?
当我使用 nodetool flush 时,增量备份会更新但 commitlog 没有存档
【问题讨论】:
标签: cassandra
我从 cassandra 开始,我需要为它设置时间点恢复。我被激活了提交日志,但只有存档的提交日志出现在我的备份文件夹中,当前的提交日志是实时更新的。那么,如果节点崩溃,当我从归档的提交日志中恢复时,我怎样才能得到最后一个不在归档日志中的日志?
当我使用 nodetool flush 时,增量备份会更新但 commitlog 没有存档
【问题讨论】:
标签: cassandra
当写入到 Cassandra 节点时,它首先进入提交日志(磁盘),然后进入内存表(内存)。
根据某些条件(大小...),内存表会定期刷新到磁盘并成为 SSTable。
提交日志用于重放内存中的数据,并且在节点崩溃时未刷新到磁盘。所以当内存中的数据刷新到磁盘时,相应的提交日志就会被清除。
所以如果你使用 nodetool 刷新,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
【讨论】: