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