3

我想从我的 Cassandra 集群中删除一个节点,并关注这两个相关的问题(此处此处)和Cassandra 文档。但我仍然不太确定确切的过程。

我的第一个问题是:以下从 Cassandra 集群中删除节点的方法是否正确?

  1. decommission我要删除的节点。
  2. removetoken我刚刚退役的节点。

如果上述过程是正确的,那我怎么知道退役过程已经完成,以便我可以进行第二步呢?还是在第 1 步之后立即执行第 2 步总是安全的?

此外,Cassandra 文件说:

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

不会从正在退役的节点中自动删除任何数据,因此如果您想以环上的不同令牌将节点重新投入使用,则应手动删除。

这是否意味着退役节点是死节点?此外,由于没有数据会自动从正在退役的节点中删除,我如何判断何时可以安全地从已退役的节点中删除数据(即,如何知道数据流何时完成?)

4

1 回答 1

15

从 Cassandra 集群中删除节点应该是以下步骤(在 Cassandra v1.2.8 中):

  1. 通过 停用目标节点nodetool decommission
  2. 一旦来自退役节点的数据流完成,手动删除退役节点中的数据(可选)。

从文档:

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

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


停用目标节点

停用开始时,停用的节点将首先标记为leaving(标记为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

当一个退役节点被标记为leaving时,它正在向其他活节点流式传输数据。流式传输完成后,从环形结构中不会观察到该节点,其他节点拥有的数据会增加:

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 文档中所述:

不会从正在退役的节点中自动删除任何数据,因此如果您想以环上的不同令牌将节点重新投入使用,则应手动删除。

这可以通过删除存储在 、 和已停用节点的文件中指定的data_file_directories数据commitlog_directory来完成saved_caches_directorycassandra.yaml

于 2013-08-15T21:13:16.457 回答