如何保持多个服务器的文件同步?

如何保持多个服务器的文件同步?

我目前正在管理一个 PHP-FPM 服务器集群,所有这些服务器往往彼此不同步。我在应用服务器 (Magento) 上使用的应用程序允许管理员修改系统上的各种文件,但现在该站点处于集群设置中,修改文件只会在集群中各个机器的单个实例(在其中一个应用服务器上)上进行修改。

有没有一个开源的 Linux 应用程序可以让我保持所有这些服务器同步?我可以创建一个小型 VM 实例来监听要同步的机器的更改。理论上,完美的应用程序会在每台要同步的机器上运行小型客户端,这些客户端会与主服务器通信,然后主服务器会决定如何/从每台机器同步什么。

我已经研究过运行集中式文件服务器的可能性,但不幸的是,我的应用服务器分布在 EC2 和物理机器之间,这使得这种方法不可行。由于有多个应用服务器(其中一些是根据站点的负载动态创建的),因此简单地设置 rsync cron 作业效率不高,因为必须在每台机器上修改 cron 作业以将文件发送到集群中的每台其他机器,而这只会产生一大堆不必要的数据传输/ssh 连接。

答案1

您可能需要考虑使用 Puppet 或 CFEngine 来更改服务器。这些工具允许您对所有服务器进行受控更改。它们有助于保持多个服务器的配置同步。

答案2

看一下 GlusterFS。据我所知,它在 EC2 上可用。

它的复制/镜像是基于文件的,并且设置起来相当容易。文件驻留在节点本地文件系统的本地目录中。

具体来说,您可以在所有应用服务器之间设置镜像安全地访问此本地目录以进行阅读解决 FUSE 开销(但您必须通过 glusterfs 挂载进行写入,因此文件会在所有节点上复制)。

答案3

由于我非常熟悉,我不知道有任何 Magneto 安装会通过正常使用对文件或目录进行更改,除非

./var/cache   <-- should be on a distributed cache like Redis or Memcache
./var/report  <-- doesn't need to be network replicated
./var/log     <-- doesn't need to be network replicated
./var/locks   <-- the admin node should operate on a single server
./var/session <-- should be on a distributed cache like Redis or Memcache
./media/catalog/product/cache <-- doesn't need to be network replicated

无论如何,像 NFS 这样的网络文件系统都不是一个可靠的选择 - 除非您在通过 WAN 保护和调整它方面拥有丰富的经验。

网络块复制,例如 Gluster/DRBD 也不是一个好的选择。Gluster 的性能较弱(配置复杂),而 DRBD 必须使用 OCFS2 等多主文件系统 - 并不理想。

出于这个原因,Magento 的较新版本也支持媒体的数据库存储 - 尽管这不太理想,而且不是一个好主意。

版本控制软件 (Git/SVN) 会处理您的代码级需求。您可以轻松地将钩子添加到暂存机,以在生产系统上执行无接触式多次拉取。但无法满足管理员上传(图像等)的需求。

将所有管理流量和生产部署重定向到单个节点 - 然后从该源复制到剩余节点,这将更加实用。

唇型同步是一款可以满足您的“Dropbox 风格”需求并在必要时执行更改的应用程序。我们已多次将其与 Magento 集群一起使用。

相关内容