【问题标题】:Solr Incremental backup on real-time system with heavy indexSolr 在具有大量索引的实时系统上进行增量备份
【发布时间】:2010-06-21 09:10:36
【问题描述】:

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

我使用 2 个专用的 Windows x64 和 tomcat 6(Solr 分片模式)。每台服务器,索引大约 1.2 亿个文档和大约 220 GB(总共 500 GB)。

我想在更新或搜索期间从 solr 索引文件中获取备份增量。
搜索后,找到适用于 UNIX 的 rsync 工具和适用于 windows 的 DeltaCopy(适用于 windows 的 GUI rsync)。但在更新期间出现错误(消失)。

如何解决这个问题。

注意1:当文件很大时,文件复制真的很慢。所以我不能用这种方式。

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

【问题讨论】:

    标签: solr lucene backup


    【解决方案1】:

    您可以使用 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 中详细阐述了它的工作原理。

    【讨论】:

      【解决方案2】:

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

      解决它的一些想法:

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

      【讨论】:

      • @Karussell:它只是一个副本而不是一个适当的备份,因为您不能应用异地存储、增量/差异/完整备份等备份策略。还有很多备份而不仅仅是复制东西。
      • 我对备份的东西不是很熟悉。但什么是异地存储? (您可以将被动索引放在另一台服务器上)
      • @Karusell:异地存储:将备份副本放置在其他建筑物/城市/州/国家/地区。被动索引应尽可能靠近主索引,以加快复制速度。备份也应该在被动索引附近进行,以尽可能少地禁用复制。只有当您拥有该备份时,您才能选择将其存储在异地。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多