具有重索引的实时系统上的Solr增量备份

时间:2010-06-21 09:10:36

标签: solr lucene backup

我使用solr实现搜索引擎,每天导入最少200万个doc。 用户必须尽快搜索导入的文档(接近实时)。

我使用2个专用的Windows x64和tomcat 6(Solr shard模式)。每台服务器,索引约1.2亿doc,约220 GB(总计500 GB)。

我希望在更新或搜索期间从solr索引文件获得备份增量。
搜索之后,找到UNIX的rsync工具和Windows的DeltaCopy(Windows的GUI rsync)。但在更新过程中会收到错误(消失)。

如何解决这个问题。

注意1:文件大小非常大时,文件复制速度很慢。因此我不能用这种方式。

注意2:如果Windows崩溃或硬件重置或任何其他问题,我可以在更新期间防止损坏的索引文件吗?

2 个答案:

答案 0 :(得分:15)

您可以使用ReplicationHandler将Solr的数据目录复制到本地系统的其他位置,从而进行热备份(即写入索引时)。然后用该目录做任何你喜欢的事情。您可以随时通过转到以下URL来启动备份:

http://host:8080/solr/replication?command=backup&location=/home/jboss/backup

显然你可以用wget + cron编写脚本。

更多细节可以在这里找到:

http://wiki.apache.org/solr/SolrReplication

Lucene in Action一书中有一节关于Lucene的热备份,在我看来,Solr的ReplicationHandler中的代码使用了与此处概述的相同的策略。其中一本书的作者甚至详细阐述了它在another StackOverflow answer中是如何运作的。

答案 1 :(得分:8)

更新索引时不要运行备份。你可能会得到一个腐败的(因此无用的)备份。

解决它的一些想法:

  • 批量更新,即不是一直添加/更新文档,而是每隔 n 分钟添加/更新。这样,您就可以在 n 分钟之间运行备份。缺点:文档新鲜度受到影响。
  • 使用第二个无源Solr核心:为每个碎片设置两个核心,一个是活动的,一个是被动的。所有查询都针对活动核心发布。使用replication使被动核心保持最新状态。针对被动核心运行备份。运行备份时,您必须disable replication。缺点:复杂,运动较多的部件,需要双倍的磁盘空间来维护被动核心。