首页 > 解决方案 > 停止启动具有所有主分片的弹性搜索实例

问题描述

我有一个带有 3 个节点的 Elasticsearch (v5.6.10) 集群。

每个数据节点有 6 个分片,复制设置为 1。所有 6 个主节点都在节点 B 中,所有 6 个副本都在节点 C 中。

我的要求是取出节点 B,做一些维护工作,然后将其放回集群中,而不需要任何停机时间。

我检查了弹性文档、讨论论坛和 stackoverflow 问题。我发现我应该先执行以下请求,以便将该节点上的分片分配给其余节点。

curl -XPUT localhost:9200/_cluster/settings -H 'Content-Type: application/json' -d '{
  "transient" :{
      "cluster.routing.allocation.exclude._ip" : <Node B IP>
   }
}';echo

重新分配所有分片后,我可以关闭节点并进行维护工作。完成后,我必须再次包含该节点以进行分配,Elasticsearch 将再次重新平衡分片。

现在我还发现了另一个讨论,其中用户面临黄色/红色集群健康问题,因为只有一个数据节点但错误地将复制设置为一个,导致未分配的分片。在我看来,在做这个练习时,我正在把我的集群带向那个状态。

所以,我在这里关心的是我是否遵循正确的方法,记住我的所有主分片都在我从复制因子为 1 的集群中取出的节点(节点 B)中。

标签: elasticsearch

解决方案


  1. 只有两个数据节点并且您想关闭一个,您无法真正重新分配分片。Elasticsearch 从不​​在同一个节点上分配主分片和副本分片;它不会增加可用性或性能方面的任何好处,只会使磁盘空间增加一倍。所以你的重新分配命令不会在这里增加任何好处,因为碎片不能移动到任何地方。
  2. 执行同步刷新,然后有序关闭节点。剩余节点上的副本分片将自动提升为主分片。在另一个节点再次加入之前,您的集群将变黄,但在您的场景中并没有真正的解决方法(既不是黑客也不是矫枉过正)。但这很好——只要您始终有一个副本,它将在另一个节点上,并且您的集群将继续按预期工作。

推荐阅读