Elasticsearch:在整个集群重新启动时 - 分片没有恢复并保持为未分配的分片

Elasticsearch: on full cluster restart - Shards are not recovering and remaining as unassigned shards

我正在使用 elasticsearch 2.1.1 并且有一个 8 个节点的集群(3 个主节点 + 5 个数据节点)。我已经尝试过完全重启集群,但最终遇到了奇怪的问题(我在日志中找不到任何问题)。

我刚刚关闭所有节点并重新启动它们。到这里为止一切都很顺利,但是重启后分片没有恢复,它们只是停留在未分配状态。

我的集群有足够的磁盘space,我重新启动了所有数据节点。仍然所有的碎片都没有恢复。 有人可以帮我解决这个问题吗?

我试过调整 gateway.recover_after_nodes"cluster.routing.allocation.enable": "all" 等配置,但没有成功。

更新:

这里的问题是最初我有副本 4,即我有 5 个数据副本包含在 5 个数据节点中。当我重新启动集群时,我只启动了 3 个数据节点,其中最多包含 3 个数据副本,但为了防止分配陈旧的分片副本,ES 使用名为 index.recovery.initial_shards 的配置,其默认值为 quorum(在我的例子中为 4)。因此,为了使分片从完整的集群重启中恢复,我需要至少启动仲裁数据节点,或者需要相应地减少副本(在我的情况下 <=3)。

编辑:

GET /_cat/indices?v:

的示例结果(有很多这样的索引)
health status index                         pri rep docs.count docs.deleted store.size pri.store.size 
red    open   kafka8-2016.07                10   3                                                   
red    open   kafka8-2016.06                10   3                                                   
red    open   .kibana                        1   3

GET /_cat/shards?v

的示例结果(有很多这样的分片)
index             shard prirep    state      docs store ip node 
kafka8-2016.07     5     p      UNASSIGNED                    
kafka8-2016.07     5     r      UNASSIGNED                    
kafka8-2016.07     5     r      UNASSIGNED                    
kafka8-2016.07     5     r      UNASSIGNED                    
kafka8-2016.07     1     p      UNASSIGNED                    
kafka8-2016.07     1     r      UNASSIGNED                    
kafka8-2016.07     1     r      UNASSIGNED                    
kafka8-2016.07     1     r      UNASSIGNED

GET _cat/nodes?v的结果:

host   ip heap.percent ram.percent load node.role master name     
host1 ip1            0          82 0.00 d         -      data-3   
host2 ip2            0          87 0.00 d         -      data-4   
host3 ip3            1          80 0.00 -         *      master-2 
host4 ip4            1          73 0.00 -         m      master-1 
host4 ip5            1          84 0.00 d         -      data-1

当您进行完整的集群重启时,您需要至少启动数据节点的仲裁。这是通过 index.recovery.initial_shards 配置的,可以防止分配陈旧的分片副本。

index.recovery.initial_shards

A primary shard is only recovered only if there are enough nodes available to allocate sufficient replicas to form a quorum. It can be set to:

quorum (default)

quorum-1 (or half)

full

full-1.

Number values are also supported, e.g. 1.

您可以在官方文档中阅读有关此配置的更多信息here

您可以在 elasticsearch github comment

中找到类似问题的解释