在负载平衡环境中管理Zend_Search_Lucene索引

时间:2009-07-07 06:03:16

标签: php zend-framework lucene replication

群集中的每个服务器都有一个搜索索引,每15分钟从一个服务器同步一次。这样做是因为因为flock而无法在nfs上附加到索引;请参阅documentation(否则索引将位于所有服务器都访问的共享文件夹中)。

我遇到的问题是,如果采取需要修改索引的操作,则修改发生在索引的本地副本上,我需要一种方法将这些更改同步回到父级中。尽可能少的干扰方式(以便通过下一次同步将更改传播到群集中的所有服务器)。

我尝试通过http引用父服务器索引但这不起作用,因为mkdir无法通过http完成。有没有办法引用远程服务器的索引?如果有一种完全不同的方法可供考虑

2 个答案:

答案 0 :(得分:0)

据我了解这种情况,如果其中一个服务器的索引经过修改,您希望主索引作为rsynch的源在下一个rsync发生之前接收更新 - 用更新来更新所有服务器。

为什么rsync不将rsync作为rsync的源,而不是rsync-ing主服务器索引?因此,如果服务器D上的索引的最新更新大于主服务器A上的索引,则只需同步D源上的所有服务器

我是否正确了解您的情况?

修改

然后在这种情况下,编辑构建索引的代码并添加一行以检查索引的先前构建是否不同,如果是,则启动对shell脚本的exec调用或手动构建命令更新中央服务器。通过这种方式,中央服务器将动态接收更新,当大同步发生故障时,您的问题将得到解决。

答案 1 :(得分:0)

我能想到的最佳解决方案是遵循更传统的主/从复制模式。从RDBMS复制中获取一些灵感:所有写入都应该发送到主服务器。

当然,你不能直接这样做。正如您所提到的,您无法直接写入远程索引。

因此,这为您提供了一个选项:在主服务器上公开API /服务,从服务器可以使用它来间接更新索引。然后,所有更改将在您下次计划的推送时同步。我确实意识到这可能是对您的设计的重大改变,但在复制或分布式环境中,这通常是必要的。