实时 Web 服务器迁移

Sim*_*mon 5 domain-name-system migration

我需要更换运行繁忙网站的老化网络服务器。我已经启动并运行了新硬件,所有软件都已安装。我正在寻找解决方案的地方只剩下一个问题:

当我在 DNS 中更改域的 A 记录时,由于 DNS 缓存,更改需要一段时间才能通过 Internet 传播。在此期间,有的用户会打新服务器,有的会打旧服务器,导致数据不一致,因为现在有两个数据库。我怎样才能立即切换所有人?我不运行 DNS 服务器,只能更改 A 和 CNAME 记录,但如果有帮助,我可以设置自己的。

夜间搬家时,我可能会有一两个小时的停机时间。

谢谢,西蒙

编辑:感谢您的所有回答。我接受 SmallClanger 的答案,因为它是一个可行的解决方案,我赞成 Brian,因为他的回答给了我一个新想法:按照 SmallClanger 的解决方案进行数据库迁移,然后用代理所有请求的 HTTP 代理替换旧的 apache到新服务器。我将代理配置为通过 IP 地址寻址新服务器,并且它不涉及临时子域,该子域可能(尽管有 302 代码)最终出现在某个书签目录、社交网络或浏览器缓存中。

Sma*_*ger 2

您遇到的根本问题是在切换期间保持数据库一致性。为了实现停机时间,您别无选择,只能将两台服务器设置为主动/主动集群。(即使暂时假设集群设置本身不会涉及停机时间,这也有点牵强。)

鉴于您无法更改 TTL,最好的步骤是最大限度地减少停机时间:

  • 在第二个域名上设置新站点(例如:www2.example.com),但也使其回答www.example.com。仅将 DNS 指向www2新服务器。
  • 复制站点文件并锁定双方的编辑。
  • 然后,在公布的维护窗口中,用“停机升级”通知替换实时站点。
  • 根据需要同步或复制数据库,然后启动新服务器。
  • 然后(且仅在此时)对记录进行 DNS 更改www
  • 用简单的 302 重定向替换旧的站点配置www2.example.com
  • 等待完整的 TTL 过期(然后稍微过期),然后再关闭旧服务器。

这将确保所有流量在 DNS 传播期间都流向新站点,无论它们最初流向哪个服务器,尽管它假设您的站点能够同时从多个域名提供服务。

对于单服务器 LAMP 堆栈(如果这就是您所拥有的),那么这是实现最短(但不是零)停机时间的途径。