【发布时间】:2021-04-22 01:26:43
【问题描述】:
我对 Cassandra 比较陌生……作为用户和操作员。不是我被聘用的,但它现在在我的盘子里。如果有明显的答案或我遗漏的细节,我将非常乐意提供......请告诉我!
我找不到任何近期或具体的文档来明确说明在将具有更高 Cassandra 版本的节点引入现有集群时 Cassandra 节点的容忍度。
假设,假设我在运行 3.0.16 的集群中有 4 个节点,我想将集群升级到 3.0.24(发布时的最新版本;2021-04-19)。由于此处不重要的原因,不可能在每个现有节点上运行“就地”升级。也就是说:我不能简单地在现有节点上停止 Cassandra,然后执行nodetool drain; service cassandra stop; apt upgrade cassandra; service cassandra start。
我查看了 3.0.17 和 3.0.24(含)之间的 change log,没有看到任何看起来像传输协议的重大突破性变化的东西。
所以我的问题是:我能否将新节点(运行 3.0.24)引入 c* 集群(由 3.0.16 节点组成),然后在每个 @ 上运行 nodetool decommission 987654327@节点执行“一对一”replacement升级集群?
我是否会在此过程中冒任何数据完整性问题的风险?是否有特定原因导致上述程序不起作用?如果每个节点负责的令牌数量随着新节点的增加而增加呢?例如:0.16 节点在 128 令牌上平均分割键空间,但新节点 0.24 将在 256 令牌中分割所有内容。
编辑:在 apache slack 上的 #cassandra 频道上进行一些来回操作后,似乎该过程没有问题。然而,还有其他一些由其他部分自动化引起的共存问题确实威胁到了集群的数据完整性。简而言之,每个新节点都将 ITSSELF 添加到 seed 节点列表列表中以及。这可以在日志中看到:This node will not auto bootstrap because it is configured to be a seed node.
每个新节点都无法引导,但没有失败进行新的写入。
EDIT2:我不是在 k8s 环境中;这是“基本”EC2。同样,数据量/节点大小非常小;从几十兆字节到几百演出不等。在所有情况下,集群都少于 10 个节点。我上面概述的案例是针对一个测试/开发集群,它通常是两个不同机架/可用区中的 2 个节点,集群中总共有 4 个节点。
【问题讨论】:
标签: cassandra upgrade cassandra-3.0 operation