#Cassandra - nodetool removenode,decommission,assassinate,replace之间有什么区别?

Bhu*_*wal 5 operations cassandra

为了删除一个节点(工作/不工作)哪个命令适用于哪种情况?

Jef*_*rsa 13

停用从离开节点流式传输数据.因此,您可以保证保持与开始操作时相同的一致性.

Removenode从拥有该范围的任何可用节点流式传输数据.根据您自修复后的时间和用于写入数据的一致性级别,您可能会违反一致性(甚至可能丢失数据).

通常情况下,如果可能,您应该选择退役.假设您有5个节点集群(AE),并且给定的写入将转到B,C和D.您使用仲裁进行编写,因此由于某种原因C关闭,但是写入B和D.当C返回时在线,D需要从群集中删除(您正在缩小规模,或更改驱动器,或其他东西).

  • 如果D在线,则运行decommission,D将其数据发送到E - 您保留所有数据的2个副本,并且您将能够稍后运行修复以获得对C的写入.

  • 如果D处于脱机状态,或者如果运行removenode而不是decommission,则可以从C而不是D进行流式传输.在这种情况下,您现在有2个副本(C和E)缺少数据.如果您在仲裁时读取,您现在可以点击C和E而不是B,并获得缺少数据的结果.修复可以解决这个问题,只要你的原始写入到多个节点,但如果你的原始写入只到一个节点,你实际上可能会丢失数据.

Assassinate是一种很少使用的工具,只能用于强制节点退出群集的工具.不执行流式传输.数据丢失的可能性要高得多,特别是如果您使用RF <3并使用CL <ALL写入.