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 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
中找到类似问题的解释