Glo*_*min 4 cassandra cassandra-2.0 cassandra-2.1 cassandra-3.0
目前,我们有两种选择来备份 Cassandra 键空间中的表数据。我们可以使用用户nodetool
命令或使用copy
终端命令cqlsh
。
1)这些命令有什么区别?
2)哪一个最合适?
3)此外,如果我们用于nodetool
进行备份,我们通常会在发出nodetool snapshot command
. 所以我的问题是,如果我们使用cqlsh copy
?
任何帮助表示赞赏。
非常感谢。
好问题!
1)这些命令有什么区别?
运行 anodetool snapshot
会在请求的键空间上创建到 SSTable 文件的硬链接。这与从 (Linux) 命令行运行相同:
ln {source} {link}
Run Code Online (Sandbox Code Playgroud)
A本质上与在桌子上cqlsh COPY
执行 a 相同。SELECT * FROM
它将创建一个文本文件,其中包含您指定的格式的表数据。
就其与备份上下文的区别而言,使用创建的文件cqlsh COPY
将包含来自所有节点的数据。而nodetool snapshot
需要在集群中的每个节点上运行。在节点数大于复制因子的集群中,每个快照仅对拍摄该快照的节点有效。
2)哪一个最合适?
这取决于您想要做什么。如果您只需要节点/集群的备份,那么nodetool snapshot
就是正确的选择。如果您尝试将数据导出/导入到新表或集群中,那么这COPY
是更好的方法。
另外值得注意的是,cqlsh COPY
运行需要一段时间(取决于表中的数据量),并且如果配置不正确,可能会出现超时。 nodetool snapshot
几乎是瞬时的;尽管将快照文件压缩和 SCPing 到集群外实例的过程将需要一些时间。
3)如果我们使用复制命令,我们是否应该采用相同的刷新数据技术
cqlsh
?
不,那没有必要。由于cqlsh COPY
工作原理与 a 类似SELECT
,它将遵循正常的Cassandra 读取路径,该路径将检查RAM 和磁盘上的结构。