如何配置ElasticSearch(ECK):主分片存廉价节点,副本分置昂贵节点
实现ECK部署下ElasticSearch分片定向路由配置方案
1. 给节点打自定义属性标签
在ECK的Elasticsearch资源配置中,分别给廉价节点(CN)和昂贵节点(EN1/EN2)添加自定义节点属性,用于分片路由识别:
- 廉价节点组配置:
apiVersion: elasticsearch.k8s.elastic.co/v1 kind: Elasticsearch metadata: name: es-cluster spec: nodeSets: - name: cheap-nodes count: 1 # 根据实际需求调整节点数量 config: node.attr.role: cheap # 标记为廉价节点 node.data: true node.master: false # 若CN仅承担数据节点角色,可关闭master权限 # 其他Pod模板、存储等配置按需补充 - name: expensive-nodes count: 2 # 对应EN1、EN2两个节点 config: node.attr.role: expensive # 标记为昂贵节点 node.data: true node.master: false # 其他配置按需补充
2. 配置索引分片分配规则
针对已完成数据写入的索引,设置分片分配规则,强制主分片在CN节点,副本分片仅在EN节点:
- 先将索引副本数设为2(对应两个EN节点,每个节点分配一个副本,关闭单个EN后仍有完整副本+主分片保证数据全量可用):
PUT /your-index/_settings { "number_of_replicas": 2 } - 配置主分片与副本分片的强制分配规则:
PUT /your-index/_settings { "index.routing.allocation.require.role": "cheap", "index.routing.allocation.replica.require.role": "expensive" }index.routing.allocation.require.role: cheap:强制所有主分片必须分配到带有role: cheap属性的节点(即CN节点)index.routing.allocation.replica.require.role: expensive:强制所有副本分片必须分配到带有role: expensive属性的节点(即EN1/EN2节点)
3. 重置集群重平衡配置
无需修改cluster.routing.rebalance.enable为primaries,保持默认或设置为all即可,索引级的分配规则优先级更高,会自动锁定分片位置。若之前修改过该参数,可重置为默认:
PUT /_cluster/settings { "persistent": { "cluster.routing.rebalance.enable": "all" } }
4. 验证分片分配
执行以下命令查看分片分布情况,确认主分片全部在CN节点,副本均匀分配到EN1/EN2:
GET /_cat/shards/your-index?v
关键说明
- 副本数设为2是核心:两个EN节点各持有一份副本,关闭任意一个EN节点后,剩余EN节点的副本+CN节点的主分片仍能保证全量数据可用
- 索引级分配规则优先级高于集群级重平衡配置,无需通过
cluster.routing.rebalance.enable限制分片移动,该参数设为all可让集群自动完成符合规则的分片分配
内容的提问来源于stack exchange,提问作者fzd
相关产品推荐
相关产品推荐

