【问题标题】:Point in time recovery and commitlog - Cassandra时间点恢复和提交日志 - Cassandra
【发布时间】:2020-08-21 22:10:28
【问题描述】:

我从 cassandra 开始,我需要为它设置时间点恢复。我被激活了提交日志,但只有存档的提交日志出现在我的备份文件夹中,当前的提交日志是实时更新的。那么,如果节点崩溃,当我从归档的提交日志中恢复时,我怎样才能得到最后一个不在归档日志中的日志?

当我使用 nodetool flush 时,增量备份会更新但 commitlog 没有存档

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    当写入到 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

    【讨论】:

    • 谢谢这对我有帮助。但是,如果我理解正确,当 Cassandra 在服务器崩溃后重新启动时,它会重播未存档的提交,因为它们位于“commitlog”文件夹中。但是,如果当我重新启动服务器时一切都是空的,我将无法访问到当前的提交日志了,对吧?所以如果发生崩溃 + 清理,我找不到最后的操作?
    • 我在答案中添加了更多细节,如果您还有任何问题,请告诉我。如果你重新启动服务器并且提交目录为空,则意味着所有数据都已刷新,否则你有另一个问题。
    • 感谢您提供详细信息,我认为我的另一个问题是:如果我的虚拟机重新启动并清除,我会丢失此提交日志,所以除了存档的提交日志之外,我还需要备份当前的提交日志?
    • 如果只有虚拟机崩溃,您不会丢失它,如果虚拟机崩溃并且您丢失了提交日志目录,那么是的,您将丢失它。但这种情况很少发生,而且您只会输给未刷新到磁盘的写入。
    猜你喜欢
    • 2013-05-09
    • 2016-11-25
    • 1970-01-01
    • 2015-10-28
    • 2015-10-19
    • 1970-01-01
    • 2015-10-22
    • 2016-09-19
    • 2015-11-26
    相关资源
    最近更新 更多