我已经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/