如何在SolrCloud上强制领导者?

时间:2018-08-28 19:53:51

标签: solr apache-zookeeper solrcloud

我有一个5节点的SolrCloud(Solr 7.0),带有一个外部3节点的Zookeeper集成。有一个称为“生产”的集合,该集合以5的复制因子分片为5个分片。请参见以下屏幕截图:

enter image description here

shard5很长时间以来一直在努力选举新领导人,而其他核心则抱怨以下错误:

  

azsolr1 solr:2018-08-28 19:32:43.575错误(qtp1124317168-9304)[c:production s:shard2 r:core_node9 x:production_shard2_replica_n4] oashRequestHandlerBase org.apache.solr.common.SolrException:未注册等待4000毫秒后找到领导者,收集:生产切片:shard5

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

使用该设置,尝试使用Collection API FORCELEADER来强制分片的头没有任何作用。在卸载内核之前,我也尝试过这样做。

这是当前状态:

enter image description here

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

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

2 个答案:

答案 0 :(得分:1)

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

enter image description here

答案 1 :(得分:0)

我有同样的问题。

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

1-停止 solr2 solr3

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

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