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

Ham*_*mid 6 lucene backup solr

我使用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崩溃或硬件重置或任何其他问题,我可以防止更新期间损坏的索引文件吗?

Pau*_*rth 15

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

http://host:8080/solr/replication?command=backup&location=/home/jboss/backup
Run Code Online (Sandbox Code Playgroud)

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

更多详情可在这找到:

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

Lucene in Action一书中有一节关于Lucene的热备份,在我看来,Solr的ReplicationHandler中的代码使用了与此处概述的相同的策略.该书的作者之一甚至详细阐述了它在另一个StackOverflow答案中的工作原理.


Mau*_*fer 8

更新索引时不要运行备份.您可能会得到一个损坏的(因此无用的)备份.

解决它的一些想法:

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

  • @Karussell:它只是一个副本,而不是一个适当的备份,因为你不能应用异地存储,增量/差异/完全备份等备份策略.备份还有很多东西,而不仅仅是复制东西. (2认同)