在solrcloud中使用副本从单个碎片丢失中恢复

时间:2017-05-19 11:48:29

标签: solr solrcloud

我有一个solrcloud集群,它在6个节点上有一个RF = 2和NumShards = 3的集合。我们想测试如何从碎片丢失等意外情况中恢复。因此,我们可能会在其中一个副本或主服务器上的solr数据目录中执行rm -rf。 现在的问题是,这个破碎的节点将如何从碎片丢失中恢复?是否需要手动步骤(如果是,那么需要做什么),还是会自动从副本中恢复?

1 个答案:

答案 0 :(得分:0)

您还没有指定solr版本,但这里是一些概念的概要:

  1. SolrCloud在两个地方记录群集状态。节点的本地磁盘,以及ZooKeeper。当Solr在一个节点上启动时,它会扫描其本地磁盘上的solr" Cores",(在这种情况下是Replicas),如果找到,它会在ZK中将自身注册为服务该副本。如果根据ZK,它不是该副本的分片的领导者,它会在它开始提供流量之前与领导者同步。

  2. Leader(我在这里避免使用Master / Slave术语,因为通常在非solrcloud设置中使用的术语)是一个短暂的角色。如果领导者垮台,非领导者将被选为新领导人,生活还在继续。如果前领导人回来了,那么它现在是非领导者。一般来说,你不需要关心哪个副本是领导者。

  3. SolrCloud通常不会自动分配副本。你明确告诉它你想要的东西。

  4. 考虑到这些,你想要的"失败模式"有点有趣。从正在运行的JVM中删除文件可能不会做太多。 JVM对所有索引文件都有一个打开的文件句柄,因此即使您删除了引用,操作系统也无法清理它们。事情可能会继续正常,直到下一次Solr需要将新的段文件写入不再存在的目录,此时事情将会爆炸。我不确切知道是什么。

    如果停止Solr,请删除该目录,然后重新启动Solr - 您已经删除了Solr节点参与任何索引的知识。 Solr将出现并加入群集,而不是托管任何碎片的任何副本。您可能需要ADDREPLICA来回复它。