Unix 服务器镜像解决方案

Unix 服务器镜像解决方案

我们有三台运行 Ubuntu Server 10.04 的服务器,通过 DNS 在它们之间进行负载平衡。我们使用 Django、nginx 提供内容,并使用 PostgresQL 作为数据库。

对于 PostgresQL,有一些镜像解决方案,但是使用“三主”模式来镜像我们的静态文件的最佳方法是什么?

我猜想仅仅 rsyncing 它们不是一种可扩展且易于维护的方法。

答案1

只要文件不经常更改且必须始终保持同步,为什么不使用 rsync?只需确保您有一个主服务器来编辑文件,这样同步就更容易了。

除此之外,像 NFS 这样的网络文件系统也可以工作,或者你可以实现类似DRBD以始终保持文件同步。

答案2

还有许多其他解决方案(afs,unionfs......),但 rsync 在单向复制方面表现得出奇的好,并且具有自我修复功能 - 并且可以根据您定义的复制路径进行扩展(单个主服务器最多可以容纳大约 5 个从服务器,但除此之外,可能有充分的理由进行多层复制)。

唯一的问题是复制的时间。由于您使用的是循环 DNS,因此您已经具有服务器亲和性 - 因此您不会遇到用户更新服务器 A 后由于正在查看服务器 B 而无法看到更新的问题。但代码传播的延迟可能会给部署带来一些麻烦(特别是如果您的代码依赖于对通用数据库的 DDL 更改)。

如果您必须进行双向复制(尽可能避免),那么实时复制系统会更合适。

如果您当前正在手动/通过 cron 运行 rsync,您可能考虑使用 inotify 在文件发生变化时运行 rsync,这样延迟就会变得非常短。

C。

答案3

当代码部署到生产环境时,应一次性部署到所有服务器。如果此操作得到适当控制,则应将其作为控制措施的一部分进行镜像,这样就不需要技术解决方案了。并非所有管理解决方案都基于技术。

开放EFS是一款旨在实现变更控制和部署的工具,您可能会觉得它很有用。我自己实现了其中的很多功能,但对于没有基础的人来说,这将是一个很好的开始。

对于不在变更控制范围内的静态服务器,我发现 rsync 在过去是一种合适的解决方案。通常对于属于此类别的服务器,扩展不太可能成为问题,但如果是,那就是NFS或者先进先出系统可能会发挥作用。

相关内容