保持文件同步在两台服务器上

我已经build立了一个运行nginx的web服务器,另外一台服务器在Linode虚拟机上运行php-fpm。 Nginx将所有的PHP请求代理到PHP后端,这很好。

问题在于,实际的Web文件需要同时存在于Web服务器和PHP工作者上,需要同步。

这是如何完成的? 我在想一个最佳的解决scheme是使用共享存储(NFS)并在每个服务器上安装存储,但我没有这方面的经验。 任何好的指导呢? Linode甚至有可能吗?

另一个解决scheme(虽然不是很好),将会每3秒运行一次像rysnc,但是会有同步滞后,更不用说所有额外的networking活动了。

感谢您的想法。

每隔三秒(或类似的情况)运行rsync,每当文件实际发生更改时都运行rsync。 这可以用incron轻松完成。 Incron就像cron一样,但不是指定“每分钟运行一次”之类的东西,而是可以说“每次文件更改时运行”。 你可以像这样指定一个incrontab:

/path/to/webroot IN_MODIFY,IN_CREATE rsync -az $@/$# user@otherserver:$@/$# /path/to/webroot IN_DELETE rsync --delete $@ user@otherserver:$@ 

在Ruby应用服务器之前,我们有一个类似nginx的设置。 在这种情况下,我们正在使用gluster。 负载平衡的Web服务器是gluster服务器,应用程序服务器作为gluster客户端。

Gluster使用FUSE,因此在VPS环境下运行可能更容易。

http://www.csync.org/与rsync类似,但是在devise时考虑到了这种特殊情况; 我想你可能还需要一些东西来触发它,比如incron

你的源文件是否经常变化,你甚至会考虑每3秒钟进行一次rsyncing,还是这些dynamic生成的文件?

如果这些确实是源文件,则最好在检测到上次修改时间的文件/文件夹更改时触发重新同步。

如果dynamic生成,则应考虑将内容存储在两台计算机共享的数据库中,如果数据库版本比物理文件更新(将时间戳字段与文件时间戳比较),则将其重新创build为文件。

在研究自己的解决scheme时,偶然发现了这个答案。 incron的问题是它不监视子目录和文件夹。

另一种方法是lsyncd: http : //code.google.com/p/lsyncd/