各位技术人员您好,
假设我们有一个(PHP)网站,每月有数百万访问者,我们在网站上运行一个 SolR 索引,托管了 400 万个文档。Solr 在 4 台独立的服务器上运行,其中一台服务器是主服务器,其他 3 台服务器是复制的。
每 5 分钟可以将数千个文档插入 Solr。除此之外,用户可以更新他们的帐户,这也应该触发 solr 更新。
我正在寻找一种安全的策略来快速安全地重建索引而不会丢失任何文档。并有一个安全的增量/更新策略。我已经考虑过一种策略,我想在这里与专家分享,以听取他们的意见,以及我是否应该采用这种方法,或者他们是否会提出(完全)不同的建议。
Solr 数据导入
对于所有操作,我想使用一个数据导入处理程序。我想将数据和增量导入混合到一个配置文件中,例如DataImportHandlerDeltaQueryViaFullImport。我们使用 MySQL 数据库作为数据源。
重建索引
为了重建索引,我有以下几点;我们在“live”核心附近创建了一个名为“reindex”的新核心。使用 dataimporthandler,我们完全重建了整个文档集(400 万个文档),总共需要大约 1-2 小时。在实时索引上,每分钟仍有一些更新、插入和删除。
经过大约 1-2 小时的重建后,新索引仍然不是最新的。为了使延迟更小,我们对新内核执行一次“增量”导入,以提交过去 1-2 小时内的所有更改。完成此操作后,将进行核心交换。每分钟运行一次的普通“delta”导入处理程序将选择这个新核心。
提交更新到实时核心
为了让我们的实时核心保持正常运行,我们每分钟运行一次增量导入。由于核心交换,重新索引核心(现在是活动核心)将被跟踪并保持最新。我猜如果这个索引被延迟几分钟应该不是问题,因为 dataimport.properties 也会被交换?delta-import 已经超过了这些分钟的延迟,但应该是可能的。
我希望你能理解我的情况和我的策略,如果我在你眼中做对了,我会给出建议。另外我想知道是否有我没有想到的瓶颈?我们正在运行 Solr 1.4 版。
我确实有一个问题是,复制呢?如果主服务器交换核心,从属如何处理?
交换等时丢失文件是否有任何风险?
提前致谢!