Solr主从架构自定义索引偶发不同步及SwitchOnRebuild适配疑问
我们在生产环境采用Solr Master-Slave架构,配置了2台Solr从服务器,同时在CM和CD服务器中配置了Solr负载均衡URL。目前自定义索引出现间歇性异常,导致搜索功能无法正常工作,每次都需要重建自定义索引才能恢复搜索结果。经排查发现,其中一台Solr从服务器的自定义索引有时会与主服务器不同步。由于我们使用SwitchOnRebuildSolrSearchIndex,自定义索引的主、从核心在主、从服务器中指向不同,特此咨询:在Master-Slave架构下是否适合使用SwitchOnRebuildSolrSearchIndex?
生产环境信息
- Sitecore环境:1台内容管理服务器(CM)、2台内容交付服务器(CD)
- Solr版本:7.2.1
- Sitecore版本:9.1.0
相关配置
Solr Core.properties配置
- 主服务器:
enable.master = true enable.slave = false - 从服务器:
enable.master = false enable.slave = true
(注:SolrConfig.xml及SwitchOnRebuildSolrSearchIndex配置以提供的图片内容为准)
在Sitecore 9.1.0搭配Solr 7.2.1的Master-Slave架构下,不适合使用SwitchOnRebuildSolrSearchIndex,核心原因如下:
主从核心指向冲突
SwitchOnRebuildSolrSearchIndex的运行机制是:重建索引时先向临时核心(如[index_name]_rebuild)写入数据,完成后切换主核心与临时核心的指向。但在Solr Master-Slave架构中,主、从服务器的核心角色通过enable.master/enable.slave配置绑定在服务器层面,SwitchOnRebuild的核心切换操作会打破这种绑定关系,导致主、从服务器的核心指向不一致,直接引发从服务器索引不同步的问题。主从同步机制与SwitchOnRebuild不兼容
Solr Master-Slave的同步依赖主节点的索引变更事件(如commit)触发从节点拉取更新,但SwitchOnRebuild的核心切换不属于常规索引更新操作,从节点无法识别这种指向变更,自然无法同步新核心的数据,最终出现部分从服务器仍指向旧核心的间歇性异常。适配Master-Slave架构的替代方案
针对Master-Slave架构,Sitecore官方推荐使用常规SolrSearchIndex配置,配合Solr原生主从同步机制保障索引一致性。若需避免重建索引影响搜索体验,可参考以下方案:- 在CM服务器单独配置Solr主节点用于索引重建,完成后触发主从同步
- 优化Solr的
replicationHandler配置,确保从节点能及时拉取主节点的完整索引更新 - 若需实现无停机索引重建,建议升级至SolrCloud架构,Sitecore对该架构下的SwitchOnRebuild支持更完善
内容的提问来源于stack exchange,提问作者Ruchi Gupta

