在 Elasticsearch 中设置某个节点临时不可用(例如进行维护或升级),可以通过以下步骤安全地操作,避免数据丢失或集群状态异常
-
1: 排除节点分片分配,触发分片迁移到其他节点
PUT /_cluster/settings { "transient": { #"cluster.routing.allocation.exclude._ip": "目标节点的IP", # 或使用节点名称 "cluster.routing.allocation.exclude._name": "节点名称" # 或使用节点ID # "cluster.routing.allocation.exclude._id": "节点ID" } }
执行后,Elasticsearch 会开始将此节点上的分片迁移到其他节点。
使用 GET /_cluster/settings 检查设置是否生效。
-
2: 等待分片迁移完成
检查分片分配状态,直到目标节点的分片数为 0:
GET /_cat/shards?h=index,shard,prirep,state,node&format=json
-
3.停止节点服务
#切换到es用户,查询elasticsearch进程 ps aux|grep elasticsearch #停止es kill -9 pid
-
4.修改配置文件
修改安装目录/config/elasticsearch.yml文件
path.data: /es/data
-
5.维护完成后恢复节点
启动节点服务,进入安装目录,执行命令:bin/elasticsearch -d
移除分片分配排除规则:
PUT /_cluster/settings { "transient": { "cluster.routing.allocation.exclude._name": null } }
-
注意事项
-
主节点(Master Node):如果目标节点是主节点,确保集群中还有其他可用主节点。
-
强制停机风险:直接关闭节点而不迁移分片可能导致集群变黄/红(部分数据不可用)。
-
大集群耗时:分片迁移可能较慢,取决于数据量和网络。