【问题标题】:How to restore Cassandra shapshot after changing number of nodes in the cluster更改集群中的节点数后如何恢复 Cassandra 快照
【发布时间】:2017-09-01 13:11:01
【问题描述】:

假设我们有一个包含以下节点的 3 节点集群:node1、node2、node3。 有一天,我们为整个集群创建了一个快照,并将快照表从每个节点复制到外部备份服务器。

一段时间过去了,现在集群增长了:我们有 5 个节点,而不是 3 个节点。除此之外,原来的节点之一已不存在,因此集群现在看起来如下:node1、node3、node4、node5、node6。

如何将快照数据正确恢复到更改的集群中? 在上述情况下,唯一的方法是使用 sstableloader,我对吗?

如果是,如果将快照放置在未安装 Cassandra 的备份服务器上,如何启动恢复过程?我需要在那里安装 sstableloader 还是可以远程启动它?

sstableloader 恢复数据的速度有多快?

【问题讨论】:

    标签: cassandra restore


    【解决方案1】:

    您最好阅读以下内容:

    http://www.datastax.com/dev/blog/using-the-cassandra-bulk-loader-updated

    简而言之,sstable 加载器将了解您要向其推送数据的集群的拓扑结构。所以数据最终会出现在正确的节点上。

    如果出于某种原因,将 sstables 转移到节点可能更可行。您可以将它们放到正确的文件夹中,然后运行 ​​reload 或 restart ... 然后进行清理,但与 sstable 加载器相比,它就没有那么优雅了。

    【讨论】:

    • 在我之前描述的情况下,节点的数量从创建快照的那一刻起就发生了变化。那么,将node2的备份数据放在node5上可以吗?之后 nodetool cleanup 会在需要的节点上传播数据吗?
    • no cleanup 不会传播它,cleanup 只是丢弃所有不属于这个节点的东西。如果你想传播数据,理论上你必须放置每个节点的备份,然后运行清理。在您的情况下,我会使用 sstable 加载程序,它将备份的数据流式传输到集群中的正确节点。您可以使用复制清理组合来执行此操作,但这只是时间/资源密集型。
    • 如果可以在节点数量或复制随时间发生变化的集群中执行此操作,我更愿意采用将快照放回数据文件夹的方式。
    • 是的,这是可能的,但是您必须将备份文件放在所有节点上,然后在每个节点上运行清理。另外不要忘记在清理之前运行nodetool refresh,以便在节点上注册数据。
    • 谢谢马尔科。我只是担心通过 sstableloader 恢复数据所需的时间,我读到这是非常耗时的操作。除此之外,我需要自动化这个过程,我怀疑 sstableloader 是否会返回足够的状态信息来处理在恢复过程中可能发生的故障。
    猜你喜欢
    • 2016-07-08
    • 2019-06-28
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多