You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CloudSolrClient中<autocommit>功能失效及自动提交异常问题求助(本地与预发布环境配置一致但行为不同)

帮你排查Solr集群与单机环境自动提交行为不一致的问题

看起来你遇到了挺头疼的问题:本地单机Solr照着配置5秒后就能看到新增的文档,但预发布的SolrCloud环境(用CloudSolrClient+ZooKeeper)却没动静,连自动提交删记录都不好使,而且两边的solrconfig.xml明明是一样的。我给你列几个实际排查的方向,都是平时遇到这类问题的常见点:

1. 先确认CloudSolrClient的提交是否真的到了集群

你本地用的是HttpSolrClient直接连单个节点,预发布换成了CloudSolrClient,这一步最容易出问题:

  • 先检查你的CloudSolrClient初始化代码,ZooKeeper地址是不是填错了?有没有指定正确的collection(也就是usersession)?
  • 调用Solr.add(doclist)的时候,有没有悄悄抛出异常?比如网络不通、集群节点挂了?建议在代码里加个日志或者捕获下异常,确认提交请求真的发出去了,不是石沉大海

2. 别光看本地配置,要查ZooKeeper里的实际生效配置

你说两边配置一致,但SolrCloud的配置是存在ZooKeeper里的,很可能你改了本地文件却没同步到集群:

  • 用Solr自带的zkcli工具(zkcli.sh或者zkcli.bat)去查集群里的真实配置,命令大概是这样:
    ./zkcli.sh -zkhost 你的ZK地址:端口 -cmd get /configs/usersession/solrconfig.xml
    
    对比里面的<autoCommit><autoSoftCommit>是不是和你预期的一样
  • 也可以直接在Solr管理UI里看,每个节点的Core Admin点进去,看usersessionConfig标签,确认生效的配置到底是什么

3. 查日志确认autoCommit有没有真的触发

自动提交没生效,大概率是没按时触发,去预发布的Solr节点日志里搜autoCommit相关内容:

  • 找有没有Starting autoCommitCompleted autoCommit这类日志,看看是不是每5秒跑一次
  • 如果完全找不到相关日志,那可能是solr.autoCommit.maxTime被覆盖了!比如启动Solr的时候加了JVM参数-Dsolr.autoCommit.maxTime改成了其他值,或者ZK里的全局solr.xml配置覆盖了core级的设置

4. 注意openSearcher=false的坑

你的配置里autoCommitopenSearcherfalse,这个设置的意思是:提交只把数据写磁盘,但不刷新搜索器——理论上这时候新数据是查不到的啊!那你本地为什么能看到?这里肯定有问题:

  • 是不是本地和预发布的Solr版本不一样?不同版本对这个参数的处理可能有差异,比如有些单机版本会默认刷新搜索器,而集群版本严格遵循配置?
  • 再仔细核对下本地的solrconfig.xml,是不是真的openSearcher=false?会不会你本地改了没保存?或者有没有测试的时候不小心手动调用了Solr.commit()

5. 排查TTL字段的影响(虽然概率低,但别漏)

你给文档加了time_to_live_s字段,值是+30000SECONDS,虽然3万秒是8个多小时,不至于刚提交就过期,但还是要确认:

  • 预发布环境的solrconfig.xml里有没有配置TTLUpdateProcessorFactory?没开的话TTL不生效,但开了的话会不会有其他问题?
  • 检查下预发布服务器的时钟和本地是不是一致?万一时钟快了好几个小时,那文档可能刚提交就过期了(这个概率低,但排查的时候可以顺手看一眼)

6. 删除操作的问题和集群状态挂钩

你说自动提交删不了记录,这和集群的同步有关:

  • 删除操作是不是也用的CloudSolrClient?有没有调用删除后没等自动提交?或者删除的时候有没有报错?
  • 去Solr管理UI的Cloud标签看看集群状态,是不是所有节点都是活跃的?如果有节点挂了,删除操作可能没同步到所有节点,导致看起来没删成

7. 最后确认版本一致性

一定要确认本地和预发布的Solr版本完全一致!不同版本在自动提交、SolrCloud的提交机制上可能有差异,甚至有些版本的集群模式有特定的bug导致autoCommit不触发


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

火山引擎 最新活动