如何为其他 Cassandra 的远程节点复制 Cassandra 的本地节点?

How do I replicate a Cassandra's local node for other Cassandra's remote node?

我需要使用 SimpleStrategy 将本地节点复制到其他 Cassandra 数据库中的远程节点。有人知道我从哪里开始吗?

这里的主要复杂性是,如果您将数据写入两个集群,如何避免覆盖云中更改的数据晚于本地设置。有几种可能性可以做到这一点:

  • 如果表的结构相同(包括键的名称spaces,如果使用用户定义的类型),那么您可以从本地计算机复制 SSTables到云端,并使用 sstableloader 重播它们 - 在这种情况下,Cassandra 将遵守实际写入时间,并且不会覆盖已更改的数据。此外,如果您正在从表中删除,那么您需要在逻辑删除过期之前复制 SSTables。你可能不会每次都复制所有的 SSTables,只复制自上次数据上传以来发生变化的文件。但是你总是需要从你正在上传的所有节点复制 SSTables。

  • 如果结构不一样,那么您可以考虑使用 DSBulk or Spark Cassandra Connector。在这两种情况下,您还需要使用 writetime 导出数据,然后使用时间戳加载它。请注意,在这两种情况下,如果不同的列具有不同的写入时间,那么您将需要单独加载该数据,因为 Cassandra 允许在 updating/inserting 数据时仅指定一个时间戳。

如果是 DSBulk,您可以按照示例 19.4 从 this blog post, and example 11.3 for loading (from another blog post) 导出数据。所以这可能需要一些 shell 脚本。另外,您需要有磁盘 space 来保存导出的数据(但您可以使用压缩)。

对于 Spark Cassandra 连接器,如果两个节点都可以从 Spark 访问,则无需中间存储即可导出数据。但是您需要使用 RDD or DataFrame API 编写一些 Spark 代码来读取数据。