Cassandra:移除节点

3
我想从我的Cassandra集群中删除一个节点,并遵循这两个相关问题(这里这里)以及Cassandra文档。但我仍然不确定确切的过程。
我的第一个问题是:以下方法从Cassandra集群中删除节点是否正确?
  1. decommission我想要删除的节点。
  2. removetoken我刚刚停用的节点。
如果上述过程是正确的,那么我如何知道停用过程已完成,以便我可以进入第二步?或者在第一步后立即执行第二步是否总是安全的?
此外,Cassandra文档说:

您可以使用nodetool decommission将节点从集群中移除到活动节点,或使用nodetool removetoken(到任何其他机器)来删除死亡的节点。这将把旧节点负责的范围分配给其他节点,并在那里复制适当的数据。如果使用decommission,则数据将从已停用的节点流出。如果使用removetoken,则数据将从剩余的副本中流出。

不会自动从正在停用的节点中删除任何数据,因此,如果您想将该节点放回环上的不同令牌服务,请手动删除它。

这是否意味着已停用的节点是死亡节点?此外,由于不会自动从正在停用的节点中删除任何数据,因此我如何知道何时可以安全地从已停用的节点中删除数据(即如何知道何时完成数据流传输)?
1个回答

15

在Cassandra集群中删除节点应按以下步骤进行(适用于Cassandra v1.2.8):

  1. 使用nodetool decommission将目标节点退役。
  2. 一旦从已退役节点的数据流传输完成,手动删除已退役节点中的数据(可选)。

参考文档:

nodetool decommission - Decommission the *node I am connecting to*

更新:以上过程也适用于种子节点。在这种情况下,集群仍然能够顺利运行而不需要重新启动。当您需要出于其他原因重新启动集群时,请务必为所有节点更新中指定的seeds参数。


停用目标节点

在停用开始时,已停用的节点将首先被标记为离开(标记为L)。在以下示例中,我们将删除node-76

> nodetool -host node-76 decommission
> nodetool status

Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address  Load       Tokens  Owns   Host ID                               Rack
UN  node-70  9.79 GB    256     8.3%   e0a7fb7a-06f8-4f8b-882d-c60bff51328a  155
UN  node-80  8.9 GB     256     9.2%   43dfc22e-b838-4b0b-9b20-66a048f73d5f  155
UN  node-72  9.47 GB    256     9.2%   75ebf2a9-e83c-4206-9814-3685e5fa0ab5  155
UN  node-71  9.48 GB    256     9.5%   cdbfafef-4bfb-4b11-9fb8-27757b0caa47  155
UN  node-91  8.05 GB    256     8.4%   6711f8a7-d398-4f93-bd73-47c8325746c3  155
UN  node-78  9.11 GB    256     9.4%   c82ace5f-9b90-4f5c-9d86-0fbfb7ac2911  155
UL  node-76  8.36 GB    256     9.5%   15d74e9e-2791-4056-a341-c02f6614b8ae  155
UN  node-73  9.36 GB    256     8.9%   c1dfab95-d476-4274-acac-cf6630375566  155
UN  node-75  8.93 GB    256     8.2%   8789d89d-2db8-4ddf-bc2d-60ba5edfd0ad  155
UN  node-74  8.91 GB    256     9.6%   581fd5bc-20d2-4528-b15d-7475eb2bf5af  155
UN  node-79  9.71 GB    256     9.9%   8e192e01-e8eb-4425-9c18-60279b9046ff  155

当一个被停用的节点被标记为离开时,它会将数据流式传输到其他活动节点。一旦流式传输完成,该节点将不再从环形结构中观察到,并且其他节点拥有的数据将增加:

Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address  Load       Tokens  Owns   Host ID                               Rack
UN  node-70  9.79 GB    256     9.3%   e0a7fb7a-06f8-4f8b-882d-c60bff51328a  155
UN  node-80  8.92 GB    256     9.6%   43dfc22e-b838-4b0b-9b20-66a048f73d5f  155
UN  node-72  9.47 GB    256     10.2%  75ebf2a9-e83c-4206-9814-3685e5fa0ab5  155
UN  node-71  9.69 GB    256     10.6%  cdbfafef-4bfb-4b11-9fb8-27757b0caa47  155
UN  node-91  8.05 GB    256     9.1%   6711f8a7-d398-4f93-bd73-47c8325746c3  155
UN  node-78  9.11 GB    256     10.5%  c82ace5f-9b90-4f5c-9d86-0fbfb7ac2911  155
UN  node-73  9.36 GB    256     9.7%   c1dfab95-d476-4274-acac-cf6630375566  155
UN  node-75  9.01 GB    256     9.5%   8789d89d-2db8-4ddf-bc2d-60ba5edfd0ad  155
UN  node-74  8.91 GB    256     10.5%  581fd5bc-20d2-4528-b15d-7475eb2bf5af  155
UN  node-79  9.71 GB    256     11.0%  8e192e01-e8eb-4425-9c18-60279b9046ff  155

手动清除剩余数据

一旦流式传输完成,按照 Cassandra 文档 描述的方式,可以手动移除位于已退役节点中的存储数据:

被退役节点中的数据不会自动被删除,所以如果您希望将该节点重新放回环上的不同 token 上使用,则应手动删除它。

这可以通过删除在已退役节点的 cassandra.yaml 文件中指定的 data_file_directoriescommitlog_directorysaved_caches_directory 中存储的数据来完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接