在正在运行的节点中将 cassandra 快照文件复制到 sstable 文件上是否安全?

问题描述

阅读 nodetool 标记的问题后编辑。

我们每天都会对我们的单节点 cassandra 数据库进行快照。如果我想在该节点上或在运行不同 cassandra 实例的临时服务器上恢复快照,我的理解是:

  1. nodetool disablegossip

  2. nodetool 禁用二进制

  3. 节点工具排放

  4. 将snapshot目录下的sstable文件复制到keyspace目录下的sstable目录中。

  5. 在每个表上运行 nodetool refresh。

  6. 启用二进制和八卦。

这是否足以在我刷新时安全地引入快照 sstable 文件而不会被 cassandra 覆盖?

nodetool Drain 的反义词是什么?

一个编辑:sstableloader 怎么样?我应该使用它吗?如果是这样,如何?我查看了“文档”,但并不明智。

解决方法

您概述的步骤不太正确。您不会关闭 Cassandra,也不应该只是将文件复制到现有 SSTable 之上。

概括地说,在节点上恢复表快照的步骤是:

  1. TRUNCATE 要恢复的表(将从数据目录中删除 SSTable)。
  2. 将 SSTables 从 data/ks_name/table-UUID/snapshots/snapshot_name 子目录复制到“实时”数据目录 data/ks_name/table-UUID
  3. 运行 nodetool refresh -- ks_name table_name

您需要为要恢复的每个应用程序表重复这些步骤。注意:不要不要恢复系统表,只恢复应用程序表。

详细步骤记录在 Restoring from a snapshot in Cassandra 中。

要将快照恢复到另一个集群中,我更愿意将其称为“克隆”。将快照克隆到另一个集群的过程取决于源集群和目标集群是否具有相同的配置

如果源集群和目标集群相同,请按照我在此处记录的步骤 -- https://community.datastax.com/questions/4534/。我在这篇博文中解释了相同配置的含义。

如果它们不相同,请按照我在此处记录的步骤操作 - https://community.datastax.com/questions/4477/。干杯!