作者:来自 Elastic Jessica Garson
解释如何从 Elasticsearch 集群中移除一个节点。
更多阅读:
想获得 Elastic 认证?了解下一次 Elasticsearch Engineer 培训的时间吧!
Elasticsearch 拥有丰富的新功能,帮助你为你的使用场景构建最佳搜索解决方案。浏览我们的示例 notebooks 了解更多内容,开始免费 cloud 试用,或者现在就尝试在本地机器运行 Elastic。
在管理 Elasticsearch 集群时,有时需要从集群中移除一个节点。这可能是由于硬件故障、维护,或者缩减集群规模所致。本文将讨论在不造成任何数据丢失或影响集群性能的情况下,安全地从 Elasticsearch 集群中移除节点的步骤。如果你想了解 Elasticsearch 节点的概念和角色类型,请查看这篇指南。
从 Elasticsearch 集群中安全移除节点的步骤
1)停止写入并执行同步刷新(可选)
首先,如果你可以在短时间内停止写入操作,建议执行一次同步刷新。这个操作有助于在移除节点后集群重启时加快恢复过程。要执行同步刷新,请运行以下命令:
POST _flush/synced
2)获取节点名称
在执行同步刷新后,你需要知道要移除的节点名称,以便将其从集群中移除。你可以通过执行以下命令来获取节点名称:
GET _cat/nodes?v
3)从集群中移除节点
确定节点名称后,你可以将该节点从集群中移除。要移除该节点,需要更新集群设置,使用节点名称将其排除。执行以下命令,并将 <node_name>
替换为你在上一步中获取的节点名称:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.exclude._name": "<node_name>"
}
}
这个命令会指示 Elasticsearch 将指定节点上的所有分片迁移到集群中的其他节点。你可以通过执行以下命令来监控分片迁移的进度:
GET _cat/recovery?v&active_only=true
在继续下一步之前,请等待分片迁移过程完成。
4)停止该节点上的 Elasticsearch 进程
当所有分片都已迁移到其他节点后,你就可以安全地停止要移除节点上的 Elasticsearch 进程。根据你的安装方式和操作系统,停止 Elasticsearch 的命令可能有所不同。例如,如果你在 Linux 系统上使用 systemd,可以执行以下命令:
sudo systemctl stop elasticsearch
5)验证集群健康状态
最后,通过执行以下命令来验证集群的健康状态:
GET _cluster/health
确保集群状态为 “green”(表示所有分片都已正确分配),且集群中的节点数量减少了一个。
Elastic Cloud Serverless
另一种避免担心节点管理的方法是使用 Elastic Cloud Serverless。在这个全托管的解决方案中,Elastic 会负责集群的底层架构,意味着你不需要担心节点、分片或扩展,所有操作都会自动完成。
总结
总之,从 Elasticsearch 集群中移除节点的步骤包括禁用该节点的分片分配、可选地执行同步刷新、将节点排除出集群,以及停止该节点上的 Elasticsearch 进程。通过遵循这些步骤,你可以安全地移除节点,不会影响集群性能或导致数据丢失。如果你想要托管解决方案,可以考虑使用 Elastic Cloud Serverless。
原文:Removing a node from an Elasticsearch cluster - Elasticsearch Labs