elasticsearch7.15节点磁盘空间满了迁移数据到新磁盘-一.数据安全迁移

时间:2025-04-23 08:57:36

在 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):如果目标节点是主节点,确保集群中还有其他可用主节点。

  • 强制停机风险:直接关闭节点而不迁移分片可能导致集群变黄/红(部分数据不可用)。

  • 大集群耗时:分片迁移可能较慢,取决于数据量和网络。