设置了几个与负载平衡相同的 VPS/专用服务器。我该如何确保所有代码都相同?
最近我读了关于 rsync 的文章。但我并不十分确定 rsync 应该用于哪些用例。
如果所有节点(服务器)都链接到一个服务器(主服务器),则内容相同。但是,如果主服务器出现故障,情况就很糟糕了。所有节点是否可以相互 rsync,因此它不依赖于主服务器。
答案1
根据设置的复杂性以及内容变化的频率,您可以采取多种选择。
Rsync 是同步节点的不错选择,但当节点可能处于启动或关闭状态时,您确实会遇到一些问题。常见的设置可能是在每个节点上运行 cron 作业以从“主”节点提取数据,但如果该主节点关闭,则需要选择一个新的“领导者”并从那里开始。如果您手动分配主节点,并假设当它关闭时不会发生任何变化,则可以仅在该节点上运行 cron 作业,并同步到其他每个节点。由于您定期运行任务,因此 Cron 总是会遇到一点延迟。
一个比上述方法稍微好一点的版本——仍然受到处理节点故障问题的影响,但更“即时”的是使用因克龙。可以将其设置为在目录内容发生变化时触发 rsync 脚本,从而大大减少节点不同步的时间。
如果你只关心代码是否同步,你的版本控制软件应该允许你设置提交后钩子。例如颠覆该过程将主要包括:
- 在您的服务器上创建存储库
- 将文件导入存储库
- 将工作副本签出到主节点
- 设置一个将更新节点的提交后钩子(例如通过 rsync)
- 将工作副本检出到本地机器进行更改并将其提交到存储库(svn commit) - 钩子将自动运行脚本并更新远程节点。
最通用的选项是分布式文件系统,尽管如果你只是想保持代码同步,那么它可能有点多余。例如,使用集群文件系统,您可以在多个节点之间设置复制 - 并且任何给定节点的故障都将得到透明处理。缺点是写入时间增加,因为对任何节点的写入都必须在所有节点上同步。然而,它是最能抵抗单个节点故障的选项(在上述选项中),并且具有相当大的可扩展性。它还允许您设置节点,以便文件分布和复制(即,如果您有 10 个节点,您可能不需要 10 个数据副本 - 也许 10 个节点之间分布的 5 个数据副本就足够了 - 这将允许大约一半的节点发生故障,并且您的数据仍然可以读取。)