Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在负载平衡的环境中管理Zend_Search_Lucene索引_Php_Zend Framework_Lucene_Replication - Fatal编程技术网

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

Php 在负载平衡的环境中管理Zend_Search_Lucene索引,php,zend-framework,lucene,replication,Php,Zend Framework,Lucene,Replication,群集中的每台服务器都有一个搜索索引,该索引每15分钟从其中一台服务器同步一次。之所以这样做,是因为在nfs上无法附加索引,因为存在flock;请参阅(否则索引将位于所有服务器都可以访问的共享文件夹上) 我遇到的问题是,如果采取需要修改索引的操作,修改会发生在索引的本地副本上,我需要一种方法以尽可能少的干扰方式将这些更改同步回父级(以便在下次同步时将更改传播到群集中的所有服务器) 我尝试通过http引用父服务器索引,但这不起作用,因为mkdir无法通过http完成。有没有办法引用远程服务器的索引?

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

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


我尝试通过http引用父服务器索引,但这不起作用,因为mkdir无法通过http完成。有没有办法引用远程服务器的索引?如果有一种完全不同的方法可供使用,我理解这种情况,如果服务器的一个索引进行了修改,您希望主索引作为rsync的源在下一次rsync发生之前接收更新-使用更新更新所有服务器

与其rsync调用主服务器索引,为什么rsync不将最新修改的日期作为rsync的源呢?因此,如果对服务器D上索引的最新更新大于主服务器A上的索引,只需同步D源上的所有服务器即可

我对你的情况理解正确吗

编辑


然后,在这种情况下,编辑生成索引es的代码并添加一行,检查索引的上一次生成是否不同,如果不同,则启动对shell脚本的exec调用或手动生成命令以更新中央服务器。这样,中央服务器将实时接收更新,当大型同步停止时,您的问题将得到解决。

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

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


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

此解决方案的问题是,服务器B和C也可能有更新,同步一个会覆盖另一个。请参阅下面的我的解决方案和“Jason”解决方案。。它们在体系结构上非常相似,似乎是您最好的beti。我喜欢公开Api的想法,将检查它有多快。更好的选择可能是使用SOLR