Elasticsearch 5.6配置:全索引节点复制与三节点集群容灾
Elasticsearch 5.6 集群配置与滚动重启问题修复
一、滚动重启集群变红问题的解决
你提到的延迟分片分配确实是适配场景的核心方案,它能避免集群在节点短暂离线(如滚动重启)时立刻触发分片重分配,给重启节点留足恢复时间,减少主分片丢失风险。
配置方式
- 静态配置(写入
elasticsearch.yml,永久生效):cluster.routing.allocation.delay: 5m cluster.routing.allocation.node_concurrent_recoveries: 2 cluster.routing.allocation.node_initial_primaries_recoveries: 4 cluster.routing.allocation.enable: all - 动态配置(通过API临时生效,重启集群后失效):
PUT /_cluster/settings { "persistent": { "cluster.routing.allocation.delay": "5m", "cluster.routing.allocation.node_concurrent_recoveries": 2, "cluster.routing.allocation.node_initial_primaries_recoveries": 4 } }
滚动重启操作规范
每次仅重启一个节点,通过以下命令确认节点完全恢复后,再操作下一个:
GET _cat/nodes?v:检查节点状态为readyGET _cat/shards?v:确认所有分片状态为STARTED
避免因提前启动下一个节点导致分片未完成恢复,引发集群红色状态。
二、3节点集群扛2节点故障的配置方案
要实现承受两个节点故障,需确保任意单个节点离线后,剩余节点仍保有所有分片的可用副本,具体配置如下:
索引层面配置
针对两个索引,按以下规则设置分片:
- 主分片数
number_of_shards: 1:主分片数不能超过「节点数 - 容忍故障数」(3-2=1),否则双节点故障时,剩余节点可能缺失某主分片的副本。 - 副本分片数
number_of_replicas: 2:每个主分片对应2个副本,确保3个节点各存储一份完整的索引数据(每个节点都包含该索引的所有分片副本)。
示例创建索引命令:
PUT /your_index_1 { "settings": { "number_of_shards": 1, "number_of_replicas": 2 } }
注意:主分片数创建后无法修改,已存在的索引需通过重建索引调整主分片数,再设置副本数。
集群层面分片分配配置
添加以下配置到elasticsearch.yml,确保分片均匀分布:
# 若GKE节点分属不同可用区,可设置该属性实现跨可用区分片分布,提升可用性 # cluster.routing.allocation.awareness.attributes: zone cluster.routing.allocation.same_shard.host: true
三、配置验证
- 执行
GET _cat/shards?v,确认每个索引的主分片和副本分片均匀分布在3个节点上。 - 模拟双节点故障:停止任意两个节点,检查集群状态(至少保持黄色,即主分片全部可用),验证剩余节点可正常提供所有索引的查询服务。
内容的提问来源于stack exchange,提问作者Moritz Schmitz v. Hülst
相关产品推荐
相关产品推荐

