将文件部署到多台服务器

将文件部署到多台服务器

假设我们在 server-1 有一个中央文件存储库/srv/www。然后我们还有 N 个服务器。我们希望 server-1 能够/srv/www尽可能快速高效地将其文件部署到所有服务器。

是否有类似 rsync 的东西,但不是指定单个目标,而是指定目标集群(N 个服务器)?

我认为git这可能有效,但是我们可以指定多个遥控器来推送吗?

假设 N 服务器最终可能会达到数百台,那么最好的解决方案是什么?

答案1

嗯,两者皆有推特Facebook已经开始在集群中使用 bittorrent 来分发新代码版本。与老式的集中式部署方法相比,这样做可以在很短的时间内将代码推送到数万台服务器。

听起来你还没有达到那个规模,但设计你的部署系统以使其不会很快成为瓶颈并没有什么坏处。

答案2

我不推荐使用 git 来处理你所说的规模。它可以工作,但我个人认为使用该模型进行抓取存在一些缺陷。

有以下几点可以决定如何最好地解决此问题:

  1. 需要共享多大的 repo。
  2. 它需要多快收敛。

为了实现完美融合和最大速度,您必须使用网络文件系统,例如 NFSv4。据我所知,集群文件系统无法扩展到“数百个”节点,因此它必须是网络文件系统。这本身就存在挑战,但这意味着在 NFS 头上更新文件时,您将达到融合。

为了快速收敛,您可以使用一些 rsync 技巧。如果 rsync 守护进程最终受到 CPU 限制,您当然可以将两到三个 rsync 服务器放在诸如 haproxy 之类的负载平衡器后面。将其与 cron 作业结合起来以提取数据(或触发代码更新的其他方法),您就可以很快实现收敛。

对于以上两种情况,将中央存储库放在 10GbE 链路上以实现最大吞吐量可能是个好主意。

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

答案3

迪斯蒂可能对你有用。

答案4

[附属] 使用 Kwatee (http://www.kwatee.net),您可以根据需要在任意数量的服务器上部署。部署是增量式的(仅传输修改过的文件),并且可以并行化,因此速度非常快。您还可以将 Kwatee 配置为负载平衡器感知,以便在更新期间从 LB 中移除服务器,然后重新插入。有一个图形界面可以配置部署参数,然后可以通过 GUI 手动触发部署,也可以使用 python 命令自动执行部署。

相关内容