【问题标题】:Lost data after running nodetool decommission运行 nodetool decommission 后丢失数据
【发布时间】:2018-05-09 02:10:59
【问题描述】:

我有一个 3 节点集群,其中有 1 个种子和不同区域的节点。全部在 GCE 中使用 GoogleCLoudSnitch 运行。

我想更改每个节点上的硬件,所以我开始在不同区域添加一个新种子,该种子完美地加入了集群。然后我从“nodetool decommission”开始,完成后我在节点关闭时删除了节点,“nodetool status”表明它不在集群中。我为所有节点执行此操作,最后我在不同区域的“额外”种子上执行此操作,只是为了将其删除以返回 3 节点集群。

我们丢失了数据!可能是什么问题?我看到了一个突击队,“nodetool rebuild”,我运行它并实际上得到了一些数据。 “nodetool cleanup”也没有帮助。我应该在“退役”之前运行“nodetool flush”吗?

在运行“退役”时,大多数键空间都有 ..

{'class' : 'NetworkTopologyStrategy', 'europe-west1' : 2}"

我是否应该首先更改关键空间以包含新的区域/数据中心,即“'europe-west3' : 1”,因为该数据中心中仅存在一个节点?我还注意到集群中的一些键空间错误..

{ 'class' : 'SimpleStrategy', 'replication_factor' : 1 }

这会导致数据丢失吗?似乎是在“SimpleStrategy keyspaces”中数据丢失了。

【问题讨论】:

    标签: cassandra nodetool


    【解决方案1】:

    (免责声明:我是 ScyllaDB 员工)

    您是否第一次添加新节点来替换您正在停用的节点并相应地配置密钥空间复制策略? (你在描述中只提到了新的种子节点,你没有提到你是否为其他节点做了)。

    您的数据丢失很可能是以下原因造成的:

    • 不更改键空间以包含具有适当复制策略和复制因子的新区域/区域。
    • 使用简单策略(无网络感知)复制策略和复制因子 1 配置的密钥空间。这意味着数据仅存储在 1 个节点中,一旦该节点关闭并停用,您基本上会丢失数据。

    您是否有机会拍摄快照并将它们存储在您的集群之外?如果你这样做了,你可以尝试恢复它们。

    我强烈建议您查看这些程序,以便更好地理解和执行您打算执行的程序的正确方法:

    【讨论】:

    • 不,我没有为另一个添加新节点,只为种子添加新节点,因为集群至少需要一个种子。但是新种子在不同的地区,那可能也是一个糟糕的决定?我认为退役应该足够了,或者我真的需要每个节点在运行退役之前替换添加一个节点,令牌不只是流式传输到其他两个节点吗?
    • 我认为丢失的数据是由于密钥空间配置错误以及我造成的其他故障造成的。我会尝试你的建议。如果可以验证,我会将您的回答作为解决我的问题的答案。
    • @nicgul 我想我没有完全理解你所做的场景。 1.您添加了一个新节点并替换了种子节点(顺便说一句,这是程序:docs.scylladb.com/procedures/replace_seed_node) 2.您开始停用所有其他节点。 - 是一一做的吗? - 您没有添加新节点,那么如果您最终停用所有节点,您希望将数据流到哪里?请澄清您的步骤...
    • 好的@TomerSan .. 对不起,我会尽量说得更清楚。 1) 在不同的 Google 区域中添加了一个新节点(新种子节点)。 2) 在第一个种子节点上运行节点退役。 3) 在原始 Google 区域中添加了与原始 ip 相同的新种子节点。 4) 在第二个节点上运行退役。 5) 添加了与第二个节点具有相同 ip 的新节点。 6)在第三个节点上运行退役。 7) 添加了与第三个节点具有相同 ip 的新节点。 8) 在位于不同区域的“额外”种子节点上运行退役。感谢您带我完成这一切!
    • @nicgul,您是否每次在添加新节点后等待流式传输完成,这意味着它从 UJ(Up Joining)状态变为 UN(Up Normal)状态,然后再停用其他节点?
    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2014-10-21
    • 2020-12-11
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多