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

如何配置Elasticsearch将索引分片副本固定分配到指定按需节点

配置步骤

步骤1:给节点打自定义标签

首先编辑on-demand节点的elasticsearch.yml配置文件,添加自定义属性标识节点类型:

node.attr.node_type: on_demand

你也可以给2台spot实例添加对应的标签方便后续规则匹配:

node.attr.node_type: spot

修改完成后逐个重启节点(注意先重启数据节点最后重启主节点,避免集群脑裂),重启后执行以下命令验证标签是否生效:
GET _cat/nodeattrs?v
返回结果中如果能看到on-demand节点的attr列显示node_type、value列显示on_demand即为配置成功。

步骤2:配置分片分配规则

存量索引批量配置

执行以下请求给所有已存在的索引添加分配规则,要求每个索引至少有一个分片(主/副均可)分配到on-demand节点:

PUT /*/_settings
{
  "index.routing.allocation.include.node_type": "on_demand"
}

如果需要严格要求副本必须落在on-demand节点,你可以调整规则为:

PUT /*/_settings
{
  "index.routing.allocation.require.node_type": "on_demand",
  "index.routing.allocation.total_shards_per_node": 1
}

新建索引自动生效(推荐)

创建全局索引模板,后续所有新建的索引会自动继承该规则,无需重复配置:

PUT _index_template/force_on_demand_replica
{
  "index_patterns": ["*"],
  "priority": 150,
  "template": {
    "settings": {
      "number_of_replicas": 1,
      "index.routing.allocation.include.node_type": "on_demand"
    }
  }
}

步骤3:验证配置结果

执行以下命令查看所有分片的分布情况,确认每个索引都至少有一个分片在on-demand节点上:
GET _cat/shards?v

注意事项
  • 提前评估on-demand节点的存储、内存资源,确保可以承载所有索引的至少一个分片,避免节点过载
  • 如果你的集群索引副本数大于1,ES会自动保证至少一个副本落在on-demand节点,其余副本可正常分配到spot实例
  • spot实例被回收后,集群会自动在剩余节点补全缺失的分片副本,不会出现数据丢失的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:57:02