我有一个由 21 个节点组成的 Cassandra 集群(每个节点有 4 TB Cassandra 数据量),我需要更换节点(从 Ubuntu 18.04 迁移到 22.04)
我想知道是否可以将数据量从现有实例重新附加到新实例而不产生负面后果?我正在考虑以下计划:
- 排空(nodetool排出)旧的Cassandra服务器并将其关闭;
- 分离数据卷并将其附加到新服务器;
- 启动新服务器;
- 对其余 Cassandra 节点重复以下步骤。
这样做有什么风险吗?唯一会改变的是节点的私有IP地址。
我有一个由 21 个节点组成的 Cassandra 集群(每个节点有 4 TB Cassandra 数据量),我需要更换节点(从 Ubuntu 18.04 迁移到 22.04)
我想知道是否可以将数据量从现有实例重新附加到新实例而不产生负面后果?我正在考虑以下计划:
这样做有什么风险吗?唯一会改变的是节点的私有IP地址。
我发现这样做的唯一问题是
system
键空间表会知道它们是旧节点的一部分,这可能会导致问题。因此,您可能需要在停止原始 Cassandra 节点后访问rm -rf
该目录。data/data/system
当您物理移动数据时,您无需担心将其流式传输到集群中的其余节点。然后,将驱动器移动到新节点并启动,同时将 JVM 标志(在文件中
cassandra-env.sh
)设置-Dcassandra.replace_address_first_boot=<dead_node_ip>
为新的 IP 地址。这将确保“新”节点(具有相同的驱动器)将获得相同的令牌范围以与驱动器上的数据匹配。由于新节点已经有数据,因此您不需要流式传输它。所以我也在文件
auto_bootstrap: false
中进行了设置cassandra.yaml
。我建议事先在开发/阶段环境中尝试一下,以确保该方法有效。您还应该查看有关替换节点的官方文档,因为这可能会有所帮助。