如何在 SolrCloud 上强制领导者?

How to force a leader on SolrCloud?

我有一个 5 节点 SolrCloud (Solr 7.0) 和一个外部 3 节点 Zookeeper 集合。有一个名为 "production" 的集合被分成 5 个分片,复制因子为 5。请参见下面的屏幕截图:

shard5 长期以来一直在努力选举新的领导者,其他核心抱怨以下错误:

azsolr1 solr: 2018-08-28 19:32:43.575 ERROR (qtp1124317168-9304) [c:production s:shard2 r:core_node9 x:production_shard2_replica_n4] o.a.s.h.RequestHandlerBase org.apache.solr.common.SolrException: No registered leader was found after waiting for 4000ms , collection: production slice: shard5

在一个接一个地重启所有节点后(我什至重启了 zookeeper 节点),我没有运气选出唯一的活动副本(azsolr1)作为领导者。然后,我使用 CoreAdmin API UNLOAD 命令卸载了状态为 'down' 的 4 个副本,这导致副本完全消失。

使用该设置,尝试使用 Collection API FORCELEADER 强制分片的领导者无济于事。我在卸载核心之前也尝试过这个。

这是当前状态:

为什么 Solr 不能只选择分片 5 的唯一活动副本作为领导者?这不是很明显吗,尤其是在将 leader 强加到分片上之后?

假设领导者以某种方式成功选举了,我是否会重新创建使用Collection API ADDREPLICA删除的复制品?在这种情况下,我是否应该重复使用已删除副本的相同 instanceDirdataDir?或者我只是让它从头开始复制?

重新启动托管 shard5 唯一副本的 azsolr1 强制选举领导者。听起来很疯狂,但仅此而已。 这样做之后,我使用 ADDREPLICA 命令添加了其他 4 个副本。

我遇到了同样的问题。

一个集合有 3 个副本(solr1 --> 之前是领导者,solr2、solr3)。其中一个碎片没有领导者!我做了这些步骤:

1 - 停止 solr2solr3

2- 呼叫 FORCE LEADER API (http://xx.xx.xxx.xx:8983/solr/admin/collections?action=FORCELEADER&collection=your_collection_name&shard=shard1)

3 - 几分钟后,solr1 被选为领导者