我使用的是elasticsearch 2.1.1,它有一个由8个节点组成的集群(3个主节点+5个数据节点)。我尝试过完全重新启动集群,但最后出现了奇怪的问题(在日志中找不到任何问题)。
我刚刚关闭了所有节点并重新启动它们。直到这里,一切都进行得很顺利,但是在重启之后,碎片没有恢复,它们只是停留在未分配的状态。
我的集群有足够的磁盘空间,我重新启动了所有的数据节点。尽管如此,所有的碎片都没有恢复。有人能帮我吗?
我尝试过调整配置,如gateway.recover_after_nodes和"cluster.routing.allocation.enable": "all",但没有成功。
更新:
这里的问题是,最初我有副本4,也就是说,我有5个数据的副本,包括在5个数据中的主数据。当我重新启动集群时,我只启动了3个数据节点,其中包含最多3个数据副本,但为了防止分配陈旧的碎片副本,ES使用了名为index.recovery.initial_shards的配置,默认值为仲裁(在我的示例中为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 3GET /_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 UNASSIGNEDGET _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发布于 2016-07-22 21:04:42
在完全重新启动群集时,至少需要启动数据节点的仲裁。这是通过index.recovery.initial_shards配置的,这可以防止分配过期的碎片副本。
index.recovery.initial_shards只有当有足够的节点可分配足够的副本以形成仲裁时,才能恢复主碎片。可将其设置为: 法定人数(违约) 法定人数-1(或一半) 完整 全部-1。 还支持数字值,例如1。
您可以在正式文档这里中了解有关此配置的更多信息。
您可以在本elasticsearch github评论中找到类似的问题。
https://stackoverflow.com/questions/38489405
复制相似问题