You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch双节点集群:安全关闭单个节点的最佳方式

安全关闭Elasticsearch单节点的方法(6.2.1版本,RHEL系统)

针对你的2节点集群(1个候选主节点+1个数据节点),以下是几种比直接杀死进程更安全的关闭方式:

1. 使用系统服务管理命令(推荐)

如果你的Elasticsearch是通过RPM包安装的,默认会注册为systemd服务或传统SysV服务,直接用系统命令停止即可触发优雅关闭:

  • 对于systemd系统(RHEL7+):
    sudo systemctl stop elasticsearch
    
  • 对于SysV系统(RHEL6及更早):
    sudo service elasticsearch stop
    

这个过程中,节点会先完成正在处理的请求,将自身分片迁移到集群中其他运行的节点,然后再平稳退出,不会导致数据丢失或集群分片异常。

2. 通过Elasticsearch REST API优雅关闭

利用ES提供的关闭节点API,可精准控制单个节点的下线流程,步骤如下:

  1. 临时禁用分片自动分配(避免关闭过程中集群频繁触发分片迁移,节省资源):
    curl -XPUT 'http://<集群任意节点IP>:9200/_cluster/settings' -H 'Content-Type: application/json' -d '{
      "persistent": {"cluster.routing.allocation.enable": "none"}
    }'
    
  2. 关闭目标节点:
    如果你在要关闭的节点本地操作,可使用_local指代当前节点;也可以指定节点ID或IP:
    # 关闭本地节点
    curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'
    # 或指定节点IP关闭
    curl -XPOST 'http://<目标节点IP>:9200/_cluster/nodes/<目标节点IP>/_shutdown'
    
  3. 节点关闭后恢复分片分配:
    curl -XPUT 'http://<集群剩余节点IP>:9200/_cluster/settings' -H 'Content-Type: application/json' -d '{
      "persistent": {"cluster.routing.allocation.enable": "all"}
    }'
    

3. 使用kill发送优雅终止信号

如果一定要通过进程ID操作,不要用强制杀死的kill -9,而是发送TERM信号让ES进程执行优雅关闭:

# 先找到ES进程ID(比如用ps命令)
PID=$(ps aux | grep elasticsearch | grep -v grep | awk '{print $2}')
# 发送优雅终止信号
kill -TERM $PID

ES进程捕获到TERM信号后,会自动完成请求处理、分片迁移等收尾工作再退出。

注意事项

如果要关闭的是候选主节点,需先确保集群有其他可选举的主节点:

  1. 将另一个数据节点临时设置为候选主节点:
    curl -XPUT 'http://<该节点IP>:9200/_cluster/settings' -H 'Content-Type: application/json' -d '{
      "transient": {"nodes.<该节点ID>.master": true}
    }'
    
    节点ID可通过curl http://<节点IP>:9200/_cat/nodes?v查看。
  2. 确认集群状态正常(curl http://<集群IP>:9200/_cluster/health显示green或yellow)后,再关闭原候选主节点,避免集群失去主节点导致不可用。

内容的提问来源于stack exchange,提问作者user21742699

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 23:45:14