假设我们在 server-1 有一个中央文件存储库/srv/www
。然后我们还有 N 个服务器。我们希望 server-1 能够/srv/www
尽可能快速高效地将其文件部署到所有服务器。
是否有类似 rsync 的东西,但不是指定单个目标,而是指定目标集群(N 个服务器)?
我认为git
这可能有效,但是我们可以指定多个遥控器来推送吗?
假设 N 服务器最终可能会达到数百台,那么最好的解决方案是什么?
答案1
答案2
我不推荐使用 git 来处理你所说的规模。它可以工作,但我个人认为使用该模型进行抓取存在一些缺陷。
有以下几点可以决定如何最好地解决此问题:
- 需要共享多大的 repo。
- 它需要多快收敛。
为了实现完美融合和最大速度,您必须使用网络文件系统,例如 NFSv4。据我所知,集群文件系统无法扩展到“数百个”节点,因此它必须是网络文件系统。这本身就存在挑战,但这意味着在 NFS 头上更新文件时,您将达到融合。
为了快速收敛,您可以使用一些 rsync 技巧。如果 rsync 守护进程最终受到 CPU 限制,您当然可以将两到三个 rsync 服务器放在诸如 haproxy 之类的负载平衡器后面。将其与 cron 作业结合起来以提取数据(或触发代码更新的其他方法),您就可以很快实现收敛。
对于以上两种情况,将中央存储库放在 10GbE 链路上以实现最大吞吐量可能是个好主意。
另一种方法是 push-rsync,它从中央存储库运行以将更新推送到您的服务器。它不会像上述任何一种方法那样快速收敛,但对您的内部带宽更友好。使用多个主机推送到划分的范围以获得更好的速度。
答案3
迪斯蒂可能对你有用。
答案4
[附属] 使用 Kwatee (http://www.kwatee.net),您可以根据需要在任意数量的服务器上部署。部署是增量式的(仅传输修改过的文件),并且可以并行化,因此速度非常快。您还可以将 Kwatee 配置为负载平衡器感知,以便在更新期间从 LB 中移除服务器,然后重新插入。有一个图形界面可以配置部署参数,然后可以通过 GUI 手动触发部署,也可以使用 python 命令自动执行部署。