保持 Solr 从站同步

Keep Solr slaves in sync

我们有一个主从设置运行 Solr 6.5.0。有一个后端进程 运行 24/7 将其数据推送到主服务器。 master 上没有提交。 Web 前端正在访问从站。复制轮询间隔为 1 小时。

到目前为止一切都很好,但是现在随着流量的增长,slave 上的 CPU 负载确实很高。我认为最好的办法是向主服务器添加第二个从服务器,并让 Web 服务器通过现有的负载均衡器连接到两台 Solr 从服务器。我认为两个 Solr 从站将独立处理它们的复制,每个从站将在另一个时间轮询主站。

由于 master 接收 24/7 新数据,我担心两台机器没有相同的数据 set/version。是否有一种管理工作量小的解决方案来强制两个从属服务器同时从主服务器轮询新数据? (即我试图避免设置一个真正的 Solr 集群,因为多个从属将满足我们的需要。)

传统的master-slave基本上就是在http上做rsync。所以,也许你可以在从机之间进行 rsync(并在 rsync 之后重新加载内核)。

这里的问题是,在您的轮询间隔期间,您的从站可能会不同步。在你的情况下,你有 1 小时的间隔。

下面是可以轻松完成的事情,您可以通过调用命令强制同时在从属服务器上进行复制:

http://slave_host:port/solr/core_name/replication?command=fetchindex

但是,我不确定您可以多久调用一次此命令,因为您很可能无法每分钟左右调用一次。

另一种可能性是每当对主索引执行提交时触发复制。您可以通过添加配置来做到这一点:

<str name="replicateAfter">commit</str>

有关它的更多信息,请查看 here