Elasticsearch 集群节点下线方案

Elasticsearch 集群节点下线方案

在 Elasticsearch(ES)集群中,节点(Node)下线可能会影响数据的可用性和集群的健康状态。因此,正确的下线步骤需要确保数据不会丢失,并且不会影响查询或写入。


🔍 1. 确定要下线的节点

首先,找到即将下线的节点:

bash 复制代码
curl -XGET "http://<ES_HOST>:9200/_cat/nodes?v"

示例输出:

复制代码
ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
192.168.1.101          65          50   3    0.12    0.15     0.20   mdi         *      node-1
192.168.1.102          70          55   2    0.10    0.12     0.18   mdi                node-2
192.168.1.103          60          48   1    0.08    0.10     0.15   mdi                node-3

📌 注意:

  • mdi:m(Master-Eligible),d(Data Node),i(Ingest Node)
  • * 表示当前的 Master 节点

确保不要误下线 Master 节点,除非你计划先选举新的 Master。


🔍 2. 将节点标记为不再接收新数据

在集群中下线节点前,应该避免它继续接收新数据:

bash 复制代码
curl -XPUT "http://<ES_HOST>:9200/_cluster/settings" -H "Content-Type: application/json" -d '
{
  "persistent": {
    "cluster.routing.allocation.exclude._name": "node-2"
  }
}'

📌 这个操作会让 Elasticsearch 逐步把 node-2 上的分片(Shard)迁移到其他节点。


🔍 3. 监控分片迁移进度

使用以下命令查看分片是否已经迁移完毕:

bash 复制代码
curl -XGET "http://<ES_HOST>:9200/_cat/health?v"
curl -XGET "http://<ES_HOST>:9200/_cat/shards?v"

当所有分片的 STARTED 状态不再显示 node-2,说明数据已安全迁移。


🔍 4. 移除节点

当数据迁移完成后,可以让节点主动退出集群:

bash 复制代码
curl -XPOST "http://<NODE_IP>:9200/_cluster/nodes/_local/_shutdown"

或者直接停止该节点的 Elasticsearch 进程:

bash 复制代码
systemctl stop elasticsearch

如果是 Kubernetes 部署:

bash 复制代码
kubectl delete pod <node-2-pod> -n <namespace>

🔍 5. 确保集群健康

下线后,检查集群状态:

bash 复制代码
curl -XGET "http://<ES_HOST>:9200/_cat/health?v"

如果状态仍然是 green,则说明集群已经成功完成节点下线过程。


🔍 6. 清理下线节点信息

如果 node-2 永久下线,不再加入集群,可以清理它的配置:

bash 复制代码
curl -XPUT "http://<ES_HOST>:9200/_cluster/settings" -H "Content-Type: application/json" -d '
{
  "persistent": {
    "cluster.routing.allocation.exclude._name": null
  }
}'

📌 这样可以让 Elasticsearch 允许新节点加入,并重新平衡分片。


🚀 总结

步骤 操作
确认节点 curl -XGET "http://<ES_HOST>:9200/_cat/nodes?v"
迁移数据 curl -XPUT ... exclude._name": "node-2"
监控迁移 curl -XGET "http://<ES_HOST>:9200/_cat/shards?v"
停止节点 systemctl stop elasticsearch 或 kubectl delete pod
检查健康 curl -XGET "http://<ES_HOST>:9200/_cat/health?v"
清理信息 curl -XPUT ... exclude._name": null

📌 建议:如果你的集群只有 1-3 个节点,建议谨慎操作,确保至少有 2 个 Master-Eligible 节点保持在线!

相关推荐
Devlive 开源社区4 小时前
AuthX 正式更名 GrantForge:我们重新做了一遍权限管理系统
大数据·人工智能·架构
楚楚2515 小时前
2026企业AI办公工具选型指南:落地评估与效果衡量体系
大数据·人工智能
卷毛迷你猪6 小时前
快速实验篇(B16)用户级预测可行性审计(否定性意见)
大数据·hadoop·数据挖掘·聚类
盟接之桥6 小时前
当大模型遇见线束制造:不是通用AI,而是行业AI
大数据·网络·人工智能·安全·制造
归秋1427 小时前
2026 企业 AI 办公工具选型指南:从评估框架到产品适配
大数据·运维·人工智能
枯木◊靠推文躺平版8 小时前
2026 企业级 AI 办公平台选型指南:如何评估可落地的办公 AI 能力
大数据·人工智能
weidian6668 小时前
小红书广告投放形式和小红书广告投放核心流程
大数据
龙亘川9 小时前
数智驱动民政升级 精准守护民生保障
大数据·数据库·人工智能
小蒋观天下10 小时前
端侧大模型在安防摄像头部署实操(上)|行业痛点、架构选型、落地思路解析
大数据·人工智能·安全·计算机视觉·ai大模型
Elastic 中国社区官方博客11 小时前
使用 Lucene 搜索你的 Bean — 索引
java·大数据·数据库·elasticsearch·搜索引擎·全文检索·lucene