【问题标题】:How to quickly transfer data between servers using Sunspot / Websolr?如何使用 Sunspot / Websolr 在服务器之间快速传输数据?
【发布时间】:2014-12-22 20:39:42
【问题描述】:

由于我怀疑我的设置相当传统,我想先提供一些背景信息。我们的 Solr 设置涉及三个环境:

  1. 生产 - Solr 服务器托管在 Websolr
  2. Staging - 也是托管在 Websolr 上的 Solr 服务器。
  3. 开发 - 通过sunspot_solr gem 支持,它允许我们轻松设置我们自己的本地 Solr 服务器进行开发。

在大多数情况下,这运作良好。我们有很多记录,因此进行完整的重新索引需要几个小时(尽管急切加载并使用后台作业来并行化工作)。但这并不算太糟糕,因为我们不需要经常完全重新索引。

但是还有另一种情况开始变得非常烦人......我们经常需要用生产数据填充我们的本地机器(或暂存环境)(即基本上从生产中获取 SQL 转储并将其通过管道传输到我们的本地数据库)。我们一直这样做是为了修正错误等等。

此时,由于我们的数据发生了变化,我们本地的 Solr 索引已经过时了。因此,如果我们希望我们的搜索正常工作,我们还需要重新索引我们的本地 Solr 服务器,这需要非常长的时间

所以现在的问题是:我不想进行完整的重新索引,而是简单地将生产索引复制到我的机器上(即在概念上类似于 SQL 转储,但用于 Solr 服务器而不是数据库)。我已经用谷歌搜索了足够多的信息,知道这是可能的,但没有看到任何特定于 Websolr / Sunspot 的解决方案。这些是非常常见的工具,我想其他人一定已经知道了。

提前感谢您的帮助!

【问题讨论】:

  • 我尝试将索引目录从我们的生产服务器复制到我们的 QA 和本地服务器。 Solr 多次抱怨索引有问题。我不知道这出了什么问题。对我有用的更简单的解决方案是设置复制并暂时使您的 QA/staging/local Solr 作为生产的奴隶。然后 Solr 复制将为您复制索引。完成后,将您的 QA/local/staging 设为 master(用于自己的环境),一切就绪。

标签: solr sunspot websolr


【解决方案1】:

Solr(和 websolr)保存得更好的秘密之一:您可以使用 Solr Replication API 在两个索引之间复制数据。

如果您将生产索引“prod54321”复制到 QA 索引“qa12345”中,那么您将使用 QA 索引的 replication 处理程序上的 fetchindex 命令启动复制。这是一个使用 cURL 进行近似的快速命令。

curl -X POST https://index.websolr.com/solr/qa12345/replication \
  -d command=fetchindex \
  -d masterUrl=https://index.websolr.com/solr/prod54321/replication

(注意两个 URL 上对 replication 请求处理程序的引用。)

【讨论】:

  • 尼克。太感谢你了!!!这很好用,而且速度非常快。我有一个后续问题
  • 您可以使用复制将生产 Websolr 索引复制到通过 sunspot_solr 运行的本地 SOLR 吗?如果它有帮助,这个要点包含我看到的跟踪:gist.github.com/coryschires/46e9e75436730af99349。我想我已经接近正确了
  • 哦!这是我想说的最快的!我在几秒钟内得到了所有的索引。谢谢
猜你喜欢
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
相关资源
最近更新 更多