我在生产环境中有一个 Web 服务器。它的 IP 是 111.111.111.111,它被称为 ServerA。除了存储脚本文件之外,该服务器还存储用户上传的文件并拥有一个数据库。该应用程序使用通配符子域,其中 foo.example.com、bar.example.com 等转到一个公共虚拟主机,并且服务器代码根据子域名做出适当的响应。我的域名注册商指向 IP 111.111.111.111,并且还设置为支持通配符。
我需要将网络服务器更改为 IP 为 222.222.222.222 的新服务器,它被称为 ServerB。
应采取什么步骤来以最少的停机时间迁移服务器?
以下是我的初步想法。如果我有误或遗漏了某些步骤,请评论。
- 在服务器A上发布通知,系统将停机维护。
- 在 ServerB 上设置 Apache,类似于 ServerA 上的设置,并在 ServerB 上添加另一个虚拟主机,服务器名为 222.222.222.222(稍后会详细介绍)。
- 在 ServerA 上设置 Apache 以显示维护页面而不是访问应用程序脚本。
- 将脚本文件、上传的用户文件和数据库从ServerA复制到ServerB。
- 将域名注册商更改为指向 IP 222.222.222.222。
- 在 ServerA 上设置 Apache,将所有请求重定向到 IP 222.222.222.222。这将如何满足子域名要求?
- 等待域名更改传播。在此期间我会停机吗?
- 待ServerB完全测试完成后,取消ServerA的服务计划。
答案1
怎么样?零停机迁移?
这是我对此类迁移的总体计划:
- 在旧服务器和新服务器之间建立一个临时 VPN(例如使用 OpenVPN)。
- 将整个应用程序从旧服务器复制到新服务器。
- 通过VPN 在旧服务器和新服务器之间建立数据库复制,旧服务器作为主服务器,新服务器作为从服务器。
- 等待所有数据库复制完成。这可能需要一段时间。
- 复制完成后,直接连接到新服务器(使用 /etc/hosts 技巧)并验证应用程序是否正常工作、Web 服务器是否配置正确等。
- 打破主/从关系,并配置旧服务器上的应用程序通过 VPN 与新服务器上的数据库通信。
- 更改 DNS 记录。在等待 TTL 过期期间,一些用户会访问旧服务器,一些用户会访问新服务器,但两者都会使用新服务器上的数据库。
- 当 TTL 到期且旧服务器不再接收流量时,请停用它。关闭临时 VPN。