You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solr8.8.0非集群模式下repeater请求不存在索引文件异常咨询

问题分析与解决方案

一、Repeater获取不存在文件名称的原因

非SolrCloud模式的主从复制分为两个核心步骤:首先Repeater向Leader发送请求获取当前最新索引版本对应的全量文件列表,之后Repeater对比本地已有文件,向Leader请求缺失的文件。你遇到的文件不存在问题,通常有两个触发原因:

  • Leader在返回文件列表后、Repeater发起文件请求前,触发了Lucene的段合并操作:Lucene会将多个小段合并为更大的段提升查询性能,合并完成后旧的段文件(包括你报错中的_9.fdm)会被自动删除,此时Repeater拿着之前获取的旧文件列表发起请求,就会出现文件不存在的异常。
  • 你报错中的索引路径为/app/solr/testCore/data/index.20210817190431551,属于带时间戳的快照式索引目录,如果Leader在返回文件列表后刚好切换到新的索引快照,旧的快照目录被清理,也会导致旧目录下的文件无法访问。

二、问题解决办法

永久修复方案

  • 调整旧段/旧快照保留时长
    在Leader节点的solrconfig.xml索引配置块中,增加旧段文件的保留时间,确保保留时长大于单次索引复制的最长耗时:
<indexConfig>
  <mergePolicyFactory class="org.apache.lucene.index.TieredMergePolicyFactory">
    <!-- 调大合并段阈值,减少合并频率,单位MB -->
    <int name="maxMergedSegmentMB">5120</int>
  </mergePolicyFactory>
  <!-- 合并完成后旧段至少保留1800秒,可根据实际复制时长调整 -->
  <keepFullyDeletedSegmentsSeconds>1800</keepFullyDeletedSegmentsSeconds>
  <!-- 如果使用快照目录模式,调整旧快照保留数量,至少保留2个以上快照 -->
</indexConfig>
  • 配置Repeater复制重试策略
    在Repeater节点的solrconfig.xml的ReplicationHandler配置中,增加文件请求失败后的重试次数和间隔,遇到文件不存在异常时自动重新拉取最新的索引文件列表后重试:
<requestHandler name="/replication" class="solr.ReplicationHandler">
  <lst name="slave">
    <str name="masterUrl">http://你的Leader节点地址:8983/solr/testCore/replication</str>
    <int name="replicationInterval">60</int>
    <!-- 最多重试5次 -->
    <int name="maxRetries">5</int>
    <!-- 每次重试间隔30秒 -->
    <int name="retryWaitTime">30</int>
  </lst>
</requestHandler>

临时修复方案

如果当前报错持续出现,可手动触发Repeater全量复制:先清空Repeater本地的索引目录,然后调用Repeater的复制接口http://你的Repeater节点地址:8983/solr/testCore/replication?command=fullcopy,重新从Leader拉取完整的最新索引即可消除报错。

内容的提问来源于stack exchange,提问作者user2137216

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:57:04