2009-07-07 87 views
0

集群中的每台服务器都有一个搜索索引,每15分钟从一台服务器同步一次搜索索引。这样做是因为附加到索引不能在nfs上发生,因为群集;请参阅documentation(否则索引将位于所有服务器均可访问的共享文件夹中)。管理负载平衡环境中的Zend_Search_Lucene索引

我遇到的问题是,如果采取的行动需要修改索引,修改发生在索引的本地副本上,我需要一种方法将这些更改同步到父级尽可能使用侵入性最小的方法(以便通过下一次同步将更改传播到集群中的所有服务器)。

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

回答

0

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

而不是rsync主服务器索引,为什么不rsync采取最新的修改日期作为rsync的源?因此,如果服务器D上的最新索引更新大于主服务器A上的索引,则只需同步源D上的所有服务器即可。我是否正确理解您的情况?

编辑

那么在这种情况下,编辑建立索引-ES的代码,并添加一个检查,看看是否索引的以前的版本是不同的线路,如果是这样发动exec调用一个shell脚本或手动构建命令以更新中央服务器。通过这种方式,中央服务器可以即时接收更新,当大同步关闭时,您的问题就会解决。

+0

此解决方案的问题在于服务器B和C可能也有更新,并且同步一个会覆盖另一个。 – Akeem 2009-07-07 12:43:30

+0

看看我的解决方案和下面的'杰森的'解决方案..它们在架构上非常相似,看起来像你最好的选择 – 2009-07-08 19:08:22

0

我能想到的最佳解决方案是遵循更传统的主/从复制模式。从RDBMS复制中获得一些启发:所有写入都应该发送给主节点。

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

所以,这给你留下了一个选择:在主服务器上公开一个API服务器,从属服务器可以使用它来间接地更新索引。然后,所有更改将在您下一次预定推送时同步。我意识到这可能是您设计的重大改变,但在复制或分布式环境中,这往往是必要的。