将数据从一个 cassandra 集群迁移到另一个

use*_*321 1 cassandra

您好,我想将数据从我的 cassandra 集群迁移到另一个 cassandra 集群。我看到很多帖子提出了各种方法,但不是很清楚或有局限性。看到的方法如下:

  1. 使用 COPY TO 和 COPY FROM 命令:该命令易于使用,但似乎对其可以复制的行数有限制。
  2. 使用 SSTABLELOADER:大多数文章建议使用 sstableloader 将数据从一个集群移动到另一个集群。但没有获得有关创建sstables的步骤的明确详细信息(是否可以使用某些 nodetool 命令或需要创建 java 应用程序?这些是每个节点还是每个集群创建的?如果创建,如何将它们从一个集群移动到另一个集群?)或者创建快照,这很乏味,因为它们是每个节点创建的,并且必须传输到另一个集群。还看到建议使用并行 ssh 为整个集群创建快照的答案,但也没有得到任何示例。

任何帮助,将不胜感激。

Ale*_*Ott 6

这确实是一个需要更多信息才能提供明确答案的问题。例如,您是否需要保留元数据,例如数据的 WriteTime 和 TTL?目标集群是否具有相同的拓扑(节点数、令牌分配等)。

基本上,您有以下选择:

  1. 使用sstableloader- Cassandra 本身附带的工具,用于从备份恢复等。要执行数据迁移,您需要创建要加载的表的快照(使用nodetool snapshot)并sstableloader在该快照上运行。主要优点是它将保留元数据(TTL/WriteTime)。主要缺点是需要在源集群的所有节点上执行快照/加载,并且需要在目标集群中具有完全相同的架构和分区器;
  2. 您可以使用备份/恢复工具,例如medusa,它基本上可以自动拍摄快照和加载数据;
  3. 例如,您可以使用 Apache Spark 使用Spark Cassandra Connector将数据从一个表复制到另一个表,如本博客文章中所述- 只需读取一个集群的表,然后写入另一个集群中的表。适用于简单的复制操作,并且您可以在必要时执行数据转换,但如果需要保留元数据,则变得更加复杂。另外它还需要 Spark;
  4. 使用DataStax Bulk Loader (DSBulk)将数据导出到磁盘上的文件,然后加载到另一个集群中。cqlsh与的命令相比COPY,它针对大量数据的加载/卸载进行了大量优化。它适用于 Cassandra 2.1+ 和大多数 DSE 版本(旧版本除外)。