Cassandra:将磁盘运送到新 DC 以同步 50TB 数据

Cassandra: Shipping Disk to New DC in order to sync 50TB of data

我们正在向我们的 Cassandra 集群添加一个新的数据中心。目前,我们有一个 15 节点的 DC,RF=3,产生了大约 50TB~ 的数据。

我们正在另一个国家/地区添加另一个数据中心,我们希望两个数据中心都包含所有数据。显然,通过互联网同步 50TB 的数据将花费大量时间。

是否可以将一个完整的副本复制回几个磁盘,将其运送到新的 DC,然后恢复?我只是想知道这样做的程序是什么。

如果可能的话,有人能给我一些关于这个操作的指导吗? 或任何其他提示?

我们的新 DC 将暂时变小(6 个节点),尽管 space 足够可用。新的 DC 主要是作为一个 live-backup/failover,一般来说不会是写作的主要集群。

TL;DR;由于两个 DC 之间的拓扑结构(节点数)发生变化,据我所知,避免将数据流式传输是不可能的。

Our new DC is going to be smaller (6 nodes) for the time being

由于节点上的令牌对齐方式不同(新集群的环将发生变化),典型流程将无法正常工作。因此,仅仅复制现有的 SSTables 是行不通的,因为保存这些表的节点可能没有与文件中的数据相对应的标记,因此 C* 将无法找到所述数据。

将数据批量加载到新 DC 也已结束,因为如果您重新插入旧数据,将会覆盖旧数据。

在您要保留拓扑的情况下为您提供流程概览:

  1. 从原始 DC 快照数据
  2. 配置新的DC。为每台机器设置 initial_token 非常重要。您可以在原始集群上通过 运行 nodetool ring 获取所需令牌的列表。这就是为什么您需要相同数量的节点。同样重要的是,在复制 SSTable 文件时,您需要文件和令牌来自同一节点。
  3. 将数据发送到新 DC(请记住,如果新节点 10.0.0.1 从旧 dc 的 192.168.0.100 获取令牌,那么它还必须从 192.168.0.100 获取快照数据)。
  4. 启动新的 DC 并确保两个 DC 都能看到彼此。
  5. 重建并修复 system_distributedsystem_auth(假设您启用了身份验证)
  6. 根据需要更新客户端一致性。 (你想写信给两个 DC 吗?从你的描述听起来像是不,所以你可能都很好)。
  7. 更新架构,确保您对要共享的任何密钥空间使用 NetworkTopologyStrategy,然后为新 DC 添加一些复制。
    ALTER KEYSPACE ks WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'oldDC' : 3, 'newDC':3 };
  1. 运行 对新 dc 中的每个节点进行全面修复。