为了删除节点(工作/不工作),哪种命令在哪种情况下适用?

最佳答案

退役从离开节点流传输数据。因此,可以保证保持与开始操作时相同的一致性。

Removenode从拥有该范围的任何可用节点中流式传输数据。您有可能会违反一致性(甚至可能会丢失数据),具体取决于修复后的时间以及用于写入数据的一致性级别。

通常,如果可能的话,您应该首选退役。假设您有5个节点群集(AE),并且给定的写操作将到达B,C和D。您使用仲裁进行写操作,因此由于某种原因,C处于关闭状态,但是写操作转到了B和D。当C返回时联机时,需要将D从集群中删除(您正在缩小规模,更改驱动器或进行其他操作)。

  • 如果D处于联机状态,则运行退役,然后D将其数据发送到E-您保留所有数据的2个副本,以后便可以运行修复程序将数据写入C。
  • 如果D脱机,或者如果您运行removenode而不是停用,则可以从C而不是D进行流传输。在这种情况下,您现在有2个副本(C和E)缺少数据。如果您按法定人数读书,您现在可能会按C和E而不是B,并得到缺少数据的结果。只要您的原始写入到达一个以上的节点,修复即可解决此问题,但是,如果您的原始写入仅到达一个节点,则实际上可能会丢失数据。

  • 暗杀是很少使用的工具,仅应用于将节点强制出集群。不执行流式传输。数据丢失的机会明显更高,尤其是如果您使用RF

    关于cassandra - #Cassandra-nodetool removenode,退役,暗杀,更换有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37103072/

    10-13 04:15