首页 文章

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

提问于
浏览
0

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

1 回答

  • 0

    您尚未指定solr版本,但这里是一些概念的概要:

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

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

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

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

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

相关问题