保持两台服务器之间的文件同步

保持两台服务器之间的文件同步

我在 Linode VM 上设置了一个运行 nginx 的 Web 服务器和另一个运行 php-fpm 的服务器。Nginx 将所有 PHP 请求代理到 PHP 后端,效果很好。

问题是,实际的网络文件需要同时存在于网络服务器和 PHP 辅助服务器上,并且需要同步。

这是如何实现的?我认为最佳解决方案是使用共享存储 (NFS) 并在每台服务器上安装存储,但我没有这方面的经验。有这方面的好指南吗?Linode 也能做到这一点吗?

另一个解决方案(虽然不太好)是每 3 秒运行一次 rysnc 之类的程序,但会出现同步延迟,更不用说所有额外的网络活动了。

感谢您的想法。

答案1

比每三秒运行一次 rsync(或类似操作)更好的方法是,只要文件实际发生更改,就运行 rsync。这可以通过以下方式轻松实现:因克龙。Incron 类似于 cron,但不是指定“每分钟运行一次”,而是指定“每次文件更改时运行一次”。您可以像这样指定 incrontab:

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

答案2

我们在 ruby​​ 应用服务器前面使用了类似的 nginx 设置。我们在此场景中使用 gluster。负载平衡的 Web 服务器是 gluster 服务器,应用服务器是 gluster 客户端。

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

答案3

http://www.csync.org/与 rsync 类似,但设计时考虑到了这种特殊情况;我认为你可能仍然需要一些东西来触发它,比如 incron

答案4

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

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

相关内容