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

Elasticsearch单节点集群扩展及旧节点平滑下线方案咨询

实现流程

阶段1:新节点环境部署与预配置

  • 3台新服务器全部安装和旧集群版本完全一致的7.5.0版本Elasticsearch,版本不匹配会直接导致节点加入失败
  • 确保新旧节点之间9200、9300端口互通,无防火墙/安全组限制
  • 修改所有节点(包括旧节点elk-old)的elasticsearch.yml配置:
    1. 旧节点新增配置:node.attr.storage: old,修改完成后重启旧节点ES服务
    2. 3台新节点统一配置:
      • cluster.name: elasticsearch 和旧集群名称保持完全一致
      • node.attr.storage: new 标记为新存储节点
      • discovery.seed_hosts: ["旧节点IP地址"] 配置旧节点为集群发现种子
      • JVM堆内存设置为31G左右,不超过32G,其余内存、线程等配置和旧节点对齐
  • 逐个启动新节点的ES服务,执行GET _cat/nodes?v确认3台新节点全部成功加入集群,集群整体状态为green

阶段2:配置分片分配规则,实现新旧索引分片隔离

  • 执行以下API创建全局索引模板,要求所有后续新建的索引分片全部分配到打了storage: new标签的新节点上:
PUT _template/new_index_allocation
{
  "index_patterns": ["*"],
  "order": 100,
  "settings": {
    "index.routing.allocation.require.storage": "new"
  }
}
  • 执行以下API批量给所有存量旧索引设置分片锁定规则,禁止存量分片迁移到新节点:
PUT /*/_settings
{
  "index.routing.allocation.require.storage": "old"
}
  • 执行GET _cluster/health?v确认集群状态为green,无异常分片迁移任务,此时新写入的索引都会落在新节点,存量索引全部留在旧节点,读写服务不受任何影响

阶段3:规则有效性验证

  • 新建一个测试索引,执行GET 测试索引名/_settings确认索引配置自动带上了index.routing.allocation.require.storage: new的规则
  • 执行GET _cat/shards/测试索引名?v确认测试索引的分片全部分布在3台新节点上,分配规则生效
  • 随机查询几个存量旧索引的数据,确认读取服务正常,旧索引分片未发生迁移

阶段4:1个月后旧节点下线操作

等1个月后存量旧索引已经被预设的生命周期规则自动删除完毕后,执行以下操作下线旧节点:

  • 执行集群分片排除规则,把旧节点从集群分配列表中移除,若存在漏删的少量索引,集群会自动将对应分片迁移到新节点:
PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.exclude._name": "elk-old"
  }
}
  • 执行GET _cat/shards?v确认所有分片都已经不在elk-old节点上
  • 关停旧节点的Elasticsearch、kibana、apm-server服务即可
  • 清理集群的旧节点排除规则:
PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.exclude._name": null
  }
}
  • 按需修改kibana、apm-server的配置,将ES访问地址切换为新节点地址即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:30:05