我想从我的Cassandra群集中移除一个节点,并且正在关注这两个相关问题(here和here)以及Cassandra document。但我仍然不确定确切的过程。
我的第一个问题是:从Cassandra集群中删除节点的方法是否正确?
decommission
我要移除的节点。removetoken
我刚退役的节点。如果上述过程正确,那么如何判断退役过程是否已完成,以便我可以继续进行第二步?或者在步骤1之后立即执行第2步是否安全?
此外,Cassandra document说:
您可以通过nodetool decommission将节点从群集中取出来 live node或nodetool removetoken(到任何其他机器)删除a 死了一个。这将分配旧节点负责的范围 到其他节点,并在那里复制适当的数据。如果 使用退役时,数据将从退役中流出 节点。如果使用removetoken,则数据将从剩余数据流中传输 复制品。
没有数据从退役的节点中自动删除, 所以如果你想让节点重新投入使用不同的令牌 在戒指上,应手动移除。
这是否意味着退役节点是死节点?此外,由于没有从被退役的节点中自动删除数据,如何确定从解除授权的节点中删除数据的安全性(即,如何知道数据流何时完成?)
答案 0 :(得分:12)
从Cassandra集群中删除节点应该是以下步骤(在Cassandra v1.2.8中):
nodetool decommission
停用目标节点。来自文档:
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 document中所述手动删除已停用的节点中存储的数据:
没有数据从退役的节点中自动删除, 所以如果你想让节点重新投入使用不同的令牌 在戒指上,应手动移除。
这可以通过删除退役节点中data_file_directories
文件中指定的commitlog_directory
,saved_caches_directory
和cassandra.yaml
中存储的数据来完成。