Solr CDCR目标集群提交机制疑问及自动提交配置咨询
Solr CDCR目标集群自动提交不生效的解决方案
嘿,这个问题其实是Solr CDCR的默认设计导致的——目标集群的自动提交会被CDCR自动禁用,目的是让目标严格对齐源集群的提交节奏,避免数据不一致。这就是为啥你配置了autoCommit但完全没效果的核心原因。
怎么让目标集群恢复自动提交?
你只需要在目标集群的每个Core的solrconfig.xml里加一行CDCR专属配置,明确允许目标集群执行自动提交:
打开目标集群Core的
solrconfig.xml文件找到(或者新增)CDCR的配置块,添加
autoCommitEnabled="true":<!-- 如果已有cdcr节点,直接加属性 --> <cdcr autoCommitEnabled="true" /> <!-- 如果没有,就新增这个节点 --> <cdcr> <autoCommitEnabled>true</autoCommitEnabled> </cdcr>你可以把这个节点放在
<updateHandler>节点附近,或者任何Solr能识别的配置位置。保存配置后,要么重启Solr服务,要么通过Core Admin页面重载对应Core的配置,就能生效了。
顺便解释下源集群的“无延迟”现象
你说源集群UI几乎无延迟看到新文档,虽然配置里autoSoftCommit是关闭的(maxTime:-1),autoCommit的openSearcher还是false——这大概率是因为你的索引客户端在写入数据时,主动触发了显式提交(比如调用API时加了commit=true参数),或者源集群作为CDCR的源节点,默认不会被禁用自动提交,所以它的autoCommit正常工作(虽然openSearcher=false,但文档已经持久化到磁盘,可能客户端用了实时查询参数?不过不管怎样,源集群的逻辑不影响目标的配置)。
最后验证下
开启后,目标集群会同时遵循两个规则:
- 同步源集群过来的提交操作
- 自身
autoCommit配置的15秒定时提交
这样既保证了数据同步的一致性,又能让新数据按时被搜索到,不用再手动提交啦。
内容的提问来源于stack exchange,提问作者Harald
相关产品推荐
相关产品推荐

