我们有三台运行Ubuntu Server 10.04的服务器,通过DNS进行负载平衡。 我们使用Django,nginx作为数据库提供内容和Postgresql。
对于PostgresQL,有一些镜像解决scheme,但使用“三个主”模式镜像我们的静态文件的最佳方式是什么?
我想只是对它们进行rsyncing不会是一个可扩展和易于维护的方式。
只要文件不经常更改,必须始终保持同步,为什么不rsync? 只要确保您有一个主服务器在您编辑文件,使同步更容易。
除此之外,像NFS这样的networking文件系统可能会工作,或者你实现像DRBD这样的文件来保持文件同步。
还有很多其他的解决scheme(afs,unionfs …),但是rsync的工作方式非常适合单向复制,并且是自我修复的 – 并且可以随着您定义的复制path一起扩展(单个主控器可以适用于高达大概有5个奴隶,但除此之外,可能有很多理由去多层复制)。
唯一的问题是复制的时间。 由于您使用的是循环法DNS,因此您已经拥有服务器关系 – 所以您不会遇到用户更新服务器A的问题,因为他正在查看服务器B,因此无法看到更新。但是,代码可能会在部署中造成一些痛苦(特别是如果你的代码依赖于对普通数据库的DDL修改)。
如果你必须有双向复制(尽可能避免),那么是的,一个实时复制系统会更合适。
如果您当前正在手动/通过cron运行rsync,则可以考虑使用inotify在文件更改时运行rsync,以使延迟变得非常短。
C。
将代码部署到生产环境时,应该将其部署到所有服务器。 如果此操作得到适当控制,则应将其作为控件的一部分进行镜像,并且不需要技术解决scheme。 并不是所有的行政解决scheme都是以技
OpenEFS是一个旨在实现变更控制和部署的工具,您可能会发现它有帮助。 我自己做了很多事情,但对于一个没有基础的人来说,这将是一个好的开始。
对于不在更改控制范围内的静态服务器,我发现rsync是过去的一个合适的解决scheme。 通常,对于属于此类别的服务器,扩展不太可能成为问题,但是如果这是NFS或AFS可能发挥作用的话。