cassandra 3.11.x 混合版本

cassandra 3.11.x mixing vesions

我们有一个 6 节点的 cassandra 3.11.3 集群,ubuntu 16.04。这些是虚拟机。 我们正在切换到品牌(8!)新服务器上的物理机,这些服务器将具有 debian 11 并且可能是 cassandra 3.11.12。

因为主版本一直是3.11.x并且ubuntu16.04不支持,问题是:我们能不能让新机器加入旧集群,然后停用过时的?

我希望得到有关这方面的提示,因为直觉上它似乎很好,但我们对此不太确定。

谢谢。

We have a 6 node cassandra 3.11.3 cluster with ubuntu 16.04. These are virtual machines. We are switching to physical machines on brand (8!)

在此快速提示;但最好以 RF 的倍数构建集群。不确定您的 RF 是多少,但如果 R​​F = 3,我要么保持 6 个,要么再增加一个并转到 9 个。这都是关于均匀的数据分布。

can we just let the new machines join the old cluster and then decommission the outdated?

简而言之,没有。首先,您需要将现有节点升级到 3.11.12。我不记得 3.11.3 和 3.11.12 是否兼容 SSTable,但我不会冒险。

其次,最佳方法是在集群中构建新的(物理)节点作为它们自己的逻辑数据中心。将它们启动为空,然后 运行 每个 nodetool rebuild。完成后,然后 停用旧节点。

有一个更简单的解决方案-将数据从每个虚拟机移动到物理服务器,如下所示:

  1. 准备在物理机上安装Cassandra,配置相同的集群名称等。 1.Stop 虚拟机中的 Cassandra & 确保它不会启动
  2. 将所有 Cassandra 数据/var/lib/cassandra 或类似的东西从 VM 复制到物理服务器
  3. 在物理服务器上启动 Cassandra 进程

对所有 VM 节点重复该过程,在某个时候更新种子等。过程完成后,您可以添加剩下的两个物理服务器。此外,为了加快进程,您可以在 VM 中停止 Cassandra 之前对数据进行初始复制,并在它停止后,使用 rsync 或类似的东西 re-sync 数据。这样您就可以最大限度地减少停机时间。

与添加新节点和停用旧节点相比,这种方法要快得多,因为我们不需要两次传输数据。这是有效的,因为在节点初始化后,Cassandra 通过分配的 UUID 识别节点,而不是通过 IP 地址。

另一种方法是follow instructions on replacement of the dead node。在这种情况下,数据流只会发生一次,但与直接复制数据相比,它可能会慢一点。