我要购买 2 台专用服务器(一台用于实时托管,一台用于暂存环境)。
四个问题:
如何使实时服务器与临时服务器保持同步?目标是每天运行同步,但我不能承受任何停机时间,那么在同步过程中,临时镜像生产环境是否可以供用户使用?以及如何像 cron 作业一样自动执行此过程?
我需要将文件从暂存区推送到生产区,我假设这是通过 FTP 完成的,或者如何通过某些工具自动完成此操作?
对于我的临时服务器,如何在内部保护它?我有我的主要域,例如:
www.example.com
因此在生产服务器上,此 URL 应该可供互联网上的每个人使用。在临时服务器上,相同的 URL 应该仅供内部人员使用。我不能使用子目录,因为我的站点已经有很多子域/子目录,并且我想保留准确的 URL 结构以进行正确的 QA。我需要使用代码版本控制,因此我假设在两台服务器上都安装了 SVN,并且它们可以同步,尽管我不确定如何在 SVN 上的环境之间区分它们?
我的数据库是 MySQL 和 MagnoDB。
答案1
你必须原谅我的例子,我是一个 Windows 系统管理员,但我确信 Unix 上也存在相同的工具。
如何保持实时服务器与暂存服务器同步?
对于 HTML 和外围文件,这很简单。只需每天在预定的时间运行同步即可。我使用robocopy
,但我相信rysnc
在 *nix 上也能完成同样的工作。
目标是每天运行同步,但我不能承受任何停机时间,那么在同步过程中,用户可以使用暂存镜像生产吗?
通常不会。如果你需要这样做,那么你实际上需要的是两个暂存系统。其中一个是实时的,另一个是空闲的。你总是同步到空闲的那个,然后在同步完成后将登台系统切换到空闲的那个,这样空闲的那个就变为活动状态,而旧的活动状态的那个将接收下一个更新。
当然,这意味着当服务器切换角色时,所有用户都将被踢出系统。你说它们都必须 100% 处于运行状态,但实际上,你能每天花 1 分钟来做这件事吗?如果你在凌晨 3 点(或一天中其他安静的时间)做这件事,那么影响应该是最小的。
以及如何像 cron 作业一样自动执行该过程?
这个问题没有简单的答案。我们对 Windows 和 MSSQL 所做的是robocopy
从实时状态到暂存状态更新所有静态文件,然后在暂存数据库上执行 MSSQL 备份/恢复。这一切都是脚本化的,每周日凌晨 1 点运行一次。
我需要将文件从暂存区推送到生产区,我假设这是通过 FTP 完成的,或者如何通过某些工具自动完成此操作?
有很多方法可以做到这一点。看看这个网站,以前有人问过这个问题。rsync
这可能是最好的方法。
对于我的暂存服务器,如何在内部保护它?...我无法使用子目录,因为我的网站已经有很多子域/子目录,并且我想保留准确的 URL 结构以进行正确的 QA。
您需要一个拆分 DNS。您的 QA 用户所在的 DNS 服务器需要返回与公共用户不同的 A 记录。没有简单的方法可以做到这一点。就个人而言,我们所做的就是使用不同的主机名,因此www.example.com
内部 DNS 有一个额外的 A 记录staging.example.com
。该 A 记录不会暴露给互联网,因此只有办公室或 VPN 内部的人员才能访问它。
我需要使用代码版本控制,因此我假设在两台服务器上都安装了 SVN,并且它们可以同步,尽管我不确定如何在 SVN 上的环境之间区分它们?
SVN 是实现此目的的绝佳方式。当我们只需要部署到暂存系统而非实时系统时,我们会分叉代码,然后在暂存服务器上进行签出。这样,关键更新在准备就绪时仍可以部署到实时系统,但暂存系统正在测试尚未投入生产的代码库。然后,当我们完成后,我们会合并回主干并重新签出暂存服务器,以便它们都回到同一个系统上。