Elasticsearch集群Yellow状态是否返回部分结果?如何转为Green?
先直接回答你的第一个问题:Yellow状态下,你的查询会返回完整的结果。因为集群Yellow的判定标准是所有主分片都已正常活跃,只是部分副本分片未分配。你这里的活跃主分片和活跃分片都是206,说明所有主分片都在稳定工作,查询请求会被正常路由到主分片上,完全不会出现返回部分结果的情况——唯一的隐患是没有副本分片做冗余,一旦这个唯一的数据节点出问题,集群会直接变成Red状态,数据可能无法访问。
接下来聊聊怎么把集群从Yellow改成Green。结合你的集群信息(1个数据节点、205个未分配分片),问题根源很明确:Elasticsearch默认不会把副本分片分配到和主分片相同的节点上(避免单点故障时副本也跟着失效),而你只有1个数据节点,这205个副本分片根本没地方安放,所以集群一直卡在Yellow状态。
针对这个情况,有两种解决方案,你可以根据自己的场景选择:
方案1:增加数据节点(生产环境优先推荐)
这是最稳妥的高可用方案。在Amazon Elasticsearch Service控制台中找到你的集群,进入「集群配置」页面,调整数据节点的数量(比如增加到2个及以上)。当新节点启动并成功加入集群后,Elasticsearch会自动把未分配的副本分片分发到新节点上,等所有副本分片都进入活跃状态,集群状态就会自动切换为Green。
方案2:修改索引副本数(适合测试/开发环境)
如果你的集群只是用于测试或开发,不需要高可用性,可以直接把索引的副本数设置为0,这样就不会存在未分配的副本分片了。具体操作可以通过Elasticsearch API实现:
- 修改单个索引的副本数:
PUT /your_index_name/_settings { "number_of_replicas": 0 }
- 批量修改所有索引的副本数:
PUT /*/_settings { "number_of_replicas": 0 }
⚠️ 注意:这么做会让集群失去数据冗余能力,一旦唯一的节点故障,数据大概率会丢失,所以生产环境绝对不建议这么操作。
内容的提问来源于stack exchange,提问作者shantanuo

