将文件部署到多个服务器

我们在/srv/www服务器1中有一个中央的文件存储库。 那么我们也有N个服务器。 我们希望服务器1能够将其文件以/srv/www部署到所有服务器上,尽可能快速高效地进行。

有没有像rsync的东西,而不是指定一个单一的目标,指定一个集群(N服务器)的目标?

我在想git可能会工作,但我们可以指定多个遥控器推?

什么是最好的解决scheme,假设N个服务器最终可能达到数百个。

那么, Twitter和Facebook都已经开始在他们的集群中使用bittorrent来分发新代码。 这样做,与旧式的集中部署方法相比,他们能够在很短的时间内将代码推送到数以万计的服务器上。

这听起来并不像你现在这么大规模,但是devise你的部署系统没有任何坏处,因为它不会很快成为瓶颈。

我不推荐你所说的音阶的git。 它可以工作,但我个人看到使用该模型获取一些赤字。

有几件事情决定了如何做到最好:

  1. 有多大的回购需要分享。
  2. 它需要多快才能收敛。

为了达到完美的融合和最高的速度,你必须使用networking文件系统,比如NFSv4。 我所知道的集群文件系统不能扩展到“数百个”节点,因此它必须是一个networking文件系统。 这提出了自己的挑战,但这意味着在NFS头上更新文件的时候你将达到融合。

为了快速收敛,你可以使用一些rsync欺骗手段。 如果rsync守护进程结束了CPU绑定,那么可以将一对rsync服务器放在像haproxy这样的负载均衡器后面。 再加上cron作业来提取数据(或其他一些触发代码更新的方法),你可以很快达到融合。

对于上述两者,将中央存储库放在10GbE链路上以获得最大吞吐量可能是一个好主意。

一个替代scheme是push-rsync,它从中央仓库运行,将更新推送到您的服务器。 它不会像以上任何一个那样快速收敛,但会对您的内部带宽更友好。 使用多个主机推动分割的范围,以获得更好的速度

rdist可能会为你工作。

使用Kwatee( http://www.kwatee.net ),您可以在任意数量的服务器上进行部署。 部署是增量式的(只有经过修改的文件被传输),并且可以并行化,所以非常快速。 您还可以将Kwateeconfiguration为感知负载平衡器,以便在更新期间将服务器从LB中删除,然后重新插入。 有一个graphics界面来configuration部署参数,然后部署可以手动触发通过GUI或自动使用python命令。