【发布时间】:2020-09-22 06:42:13
【问题描述】:
我们有一个由 6 个节点组成的集群,其中复制为 3 个。 只需启动它们并让它们加入集群,然后重新启动所有节点以更新种子列表即可添加 4 个新节点。所以每个节点都更新了所有其他种子,并且复制因子仍然是 3。 Nodetool 状态显示所有节点为 UN(新节点快速进入 UN 状态),并且 describecluster 显示所有节点都加入了相同的模式。 Nodetool 状态还显示旧节点有很多数据而新节点很少,我猜只是新数据进来。 在更新期间,我们没有将 auto_bootstrap 参数添加到 cassandra.yaml,据我所知默认值为 true。 令牌范围被重新分配,因此每个节点拥有大约 10% 的范围。 对不起,但无法复制粘贴/截图。
添加节点后一切似乎都很好,然后我注意到 3 个列族中缺少一些数据。也许还有更多遗失,但目前无法发现。
最终目标是将所有数据从 6 个旧节点迁移到 4 个新节点并停用旧节点。
问题:
如果 auto_bootstrap 值为真,数据不应该从其他节点流式传输到新节点吗?节点在完成之前会处于 UJ 状态吗?我的新节点很快就进入了联合国,似乎没有向它们传输数据。
为什么我的数据丢失了?查询不应该找到带有数据的节点并从那里获取它吗?
- 最重要的是,如何取回数据?必须仍然在磁盘上的某个地方。我能找到的最接近的答案是:
您应该在添加后在新节点上执行 nodetool 重建 他们用 auto_bootstrap: false
但这适用于 auto_bootstrap 为 false 的情况。重建/修复会有帮助吗?
- 继续在 4 个新节点中获取所有数据并停用 6 个旧节点的最佳方法是什么? 我的计划是逐个停用旧节点,以这种方式分发数据。
Cassandra 版本:2.0.17 使用astyanax最新版本,以为是3.90
【问题讨论】: