Solr中继器/从复制都是在主服务器上而不是优化上提交的



我有一个主-中继器-从配置。主/从/中继器使用此复制配置<str name="replicateAfter">optimize</str>设置,完整配置如下

<requestHandler name="/replication" class="solr.ReplicationHandler">
<str name="commitReserveDuration">01:00:00</str>
<lst name="master">
<str name="enable">${Project.enable.master:false}</str>
<str name="replicateAfter">${Project.master.setReplicateAfterCommit:}</str>
<str name="replicateAfter">${Project.master.setReplicateAfterStartup:}</str>
<str name="replicateAfter">optimize</str>
<str name="confFiles"></str>
</lst>
<lst name="slave">
<str name="enable">${Project.enable.slave:false}</str>
<str name="masterUrl">/solr/someCoreName</str>
<str name="pollInterval">${Newton.replication.pollInterval:00:02:00}</str>
</requestHandler>

中继器配置为每 1 秒轮询一次。 N 个从站配置为以不同的间隔轮询,以免下载请求淹没中继器,例如:2,4,6,8 分钟。 两者都通过java启动命令args。

现在,鉴于我在主索引上每 2 小时在主索引上发出优化,我希望主索引仅在优化后才能提供可复制版本。但似乎,在每次提交后,主站生成都会增加,这发生在X(可配置的(分钟后,中继器和从站获得未优化的状态(但最近具有最新提交数据的状态(。

<updateHandler class="solr.DirectUpdateHandler2">
<updateLog>
<str name="dir">some/dir</str>
</updateLog>
<autoCommit>
<maxDocs>10000000</maxDocs>
<maxTime>${Project.autoCommit.maxTime:60000}</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
</updateHandler>

中继器/从站看到主生成增量后的日志

2019-08-31 14:48:05,544 [INFO ][indexFetcher-15-thread-1][solr.handler.IndexFetcher][fetchLatestIndex()] - Master's generation: 6
2019-08-31 14:48:05,544 [INFO ][indexFetcher-15-thread-1][solr.handler.IndexFetcher][fetchLatestIndex()] - Master's version: 1567288083960
2019-08-31 14:48:05,544 [INFO ][indexFetcher-15-thread-1][solr.handler.IndexFetcher][fetchLatestIndex()] - Slave's generation: 5
2019-08-31 14:48:05,544 [INFO ][indexFetcher-15-thread-1][solr.handler.IndexFetcher][fetchLatestIndex()] - Slave's version: 1567288023785
2019-08-31 14:48:05,544 [INFO ][indexFetcher-15-thread-1][solr.handler.IndexFetcher][fetchLatestIndex()] - Starting replication process
2019-08-31 14:48:05,563 [INFO ][indexFetcher-15-thread-1][solr.handler.IndexFetcher][fetchLatestIndex()] - Number of files in latest index in master: 66
2019-08-31 14:48:05,624 [INFO ][indexFetcher-15-thread-1][solr.update.DefaultSolrCoreState][changeWriter()] - New IndexWriter is ready to be used.
2019-08-31 14:48:05,627 [INFO ][indexFetcher-15-thread-1][solr.handler.IndexFetcher][fetchLatestIndex()] - Starting download (fullCopy=false) to MMapDirectory@/data/<path>/index.20190831144805564 lockFactory=org.apache.lucene.store.NativeFSLockFactory@416c5340

问题:

如何绝对确保仅在发出的优化命令完成后才允许从主索引到中继器/从属索引流过?

注意

一旦我发出优化,具有 1 个段的优化索引确实按预期流向中继器/从站,但在主服务器上发生的中间提交也会导致中继器/从站下载新索引的一部分,使其段计数> 1 并减慢搜索速度,因为段大小> 1 的搜索成本高于在段大小 1 上搜索的成本更高。我只想要新索引,在定期(用代码编程(优化命令发出后,而不是在每次提交之后。我实际上删除了 master 上的提交持续时间,然后它仅在优化后增加了其生成,但如果我完全删除提交,那么我们就有可能在 2 个优化周期之间丢失未提交的数据,并且机器恰好在这 2 个周期之间死亡。

Solr/luceneMatchVersion

Version7.7.1

我也尝试添加合并策略因子配置,但行为仍然相同

<mergePolicyFactory class="org.apache.solr.index.TieredMergePolicyFactory">
<int name="maxMergeAtOnce">32</int>
<int name="segmentsPerTier">32</int>
</mergePolicyFactory>

尝试将<replicateAfter>commit</replicateAfter>更改为<replicateAfter>optimize</replicateAfter>

另外,如果它不起作用,请尝试从从属服务器中删除轮询间隔配置。

您所看到的是 solr 的预期行为,没有什么不寻常的。尝试更改,我希望它应该正常工作。

最新更新