Kee*_*ers 9 architecture solr high-availability high-traffic dataimporthandler
你好技术人员,
假设我们有一个(PHP)网站,每月有数百万访问者,我们在网站上运行SolR索引,托管了400万个文档.Solr在4个独立的服务器上运行,其中一个服务器是主服务器,另外三个服务器是复制的.
有可以被插入数以千计的文件到Solr中每5分钟.除此之外,用户还可以更新他们的帐户,这也应该触发solr更新.
我正在寻找一种安全的策略来快速安全地重建索引,而不会丢失任何文档.并有一个安全的增量/更新策略.我已经考虑过一个策略,我想与专家分享这些策略以听取他们的意见,以及我是否应该采用这种方法,或者他们是否可以提出一些(完全)不同的建议.
Solr DataImport
对于所有操作,我想使用一个数据导入处理程序.我想将数据和delta导入混合到一个配置文件中,如DataImportHandlerDeltaQueryViaFullImport.我们使用MySQL数据库作为数据源.
重建指数
为了重建索引,我有以下几点; 我们在'live'核心附近创建了一个名为'reindex'的新核心.使用dataimporthandler,我们完全重建整个文档集(400万个文档),总共需要1-2个小时.在实时索引上,仍然每分钟都有一些更新,插入和删除.
重建后大约需要1-2个小时,新指数仍然不再是最新的.为了缩短延迟,我们对新核心进行一次'delta'导入,以提交过去1-2小时内的所有更改.完成后进行核心交换.每分钟运行一次的正常"delta"导入处理程序将选择这个新核心.
提交对活核心的更新
为了保持我们的实时核心,我们每分钟都会运行delta导入.由于核心交换,reindex核心(现在是活核心)将被跟踪并保持最新状态.我猜这个索引延迟几分钟不应该是一个问题,因为dataimport.properties也会被交换掉?delta-import已超过这些延迟时间,但应该是可能的.
我希望你了解我的情况和我的策略,并建议我是否以正确的方式在你眼中做到这一点.另外我想知道是否有任何瓶颈我没有想到?我们正在运行Solr 1.4版.
我有一些问题,复制怎么样?如果主服务器交换核心,那么如何处理这个?
在交换时丢失文件有什么风险吗?
提前致谢!
好(又难)的问题!
完全导入是一项非常繁重的操作,通常最好运行增量查询以仅将索引更新为 RDMS 中的最新更改。我明白了为什么当您需要进行完全导入时要交换主版本:当完全导入在新核心上运行时,您可以使用增量导入来保持最新的实时核心,因为这需要两个小时。听起来不错,只要完全导入不那么频繁使用即可。
关于复制,我会确保在交换主核心之前没有任何复制正在进行。有关复制工作原理的更多详细信息,如果您尚未完成,可以查看Solr wiki 。
此外,我会确保在交换主核心之前,实时核心上没有运行任何增量导入。