更改 A 记录的 IP 地址时保持网站正常运行

更改 A 记录的 IP 地址时保持网站正常运行

由于某些原因,我正在更改我的 Web 应用程序的托管服务。问题是,我需要在此过程中保持我的网站可访问且完全正常运行。

我想确保我的计划能够实现这一目标,所以让我们来谈谈基础设施。

DNS Records:
A record : torquemanagement.ca -> 138.197.83.23
A record : dev.torquemanagement.ca  -> 138.197.83.23
CNAME record : dev -> @

Host on CompanyA:
IP: 138.197.83.23
PHP Laravel application deployed with git/branch master
Mysql Connetion into .env pointing to Something
Mysql Database having name: Something

Host on CompanyB:
IP: 159.89.124.24
PHP Laravel application deployed with git/branch master
Mysql Connetion into .env pointing to SomethingElse
Mysql Database having name: SomethingElse

在讨论我计划使用的程序之前,我的 CNAME 和 A 记录中是否存在有关子域的冲突。我应该只使用 A 还是 CNAME?

我计划如何在不中断服务的情况下实现这一目标。

1. Export SQL dump from Something(companyA) and import it into SomethingElse(companyB).
2. Changing the Mysql Connection from .env file onto host CompanyA to the Mysql DB onto host CompanyB
3. Export SQL to only updates new record from Something and import it into SomethingElse.
    3.A. I think this will prevent lost of any record save to DB of companyA while doing the export/import.
4. Changing ALL ip in DNS records to point 159.89.124.24 (ip of host CompanyB)
5. Waiting 48hrs or more.
6. Shutting down host on CompanyA

如果我这样做,我的服务是否仍然可用?据我了解,在网络上更改 DNS 的过程中,连接到 CompanyA 的人员将从 CompanyB 主机上的新数据库获得结果,并且当该过程完成时,他们不会丢失任何记录。

您觉得如何?
我错了吗?
还有其他方法可以让服务保持正常运行吗?

答案1

在讨论我计划使用的程序之前,我的 CNAME 和 A 记录中是否存在有关子域的冲突。我应该只使用 A 还是 CNAME?

这取决于你。如果你保留 A 记录,那么它是静态设置的,除非你更改它,否则它永远不会改变。如果你保留 dev -> @ 的 CNAME,那么如果你更改根记录,dev.torquemanagement.ca 就会改变。在你的情况下,它们无论如何都需要设置为相同的值,所以这真的无关紧要。

该计划有几个问题。首先,您假设能够将 CompanyA 上的应用连接到 CompanyB 的数据库。CompanyB 是否会将您的数据库公开暴露给互联网?或者您是否有能力在站点之间创建 VPN 隧道?或者您是否可以控制防火墙以允许 CompanyA 访问数据库?

您对维护窗口和停机时间的容限是多少?您的网站处理多少流量?数据库有多大?

如果你有足够的维护时间,我建议采用一种更简单的方法

  1. 进入维护模式以阻止新数据进入数据库
  2. 从 A 导出数据库并导入到 B
  3. 验证你方对 B 端应用程序的访问是否正常(使用主机文件来操作 DNS)
  4. 进行 DNS 更改(在开始维护窗口之前,将 DNS 记录的 TTL 设置为非常低的值,例如 120 秒)
  5. 当访问者开始将 URL 解析为新 IP 时,维护模式将自然退出。大多数访问者应遵守 DNS 记录上的 TTL,并且从一个 IP 到另一个 IP 的更改应在 TT 的时间范围内发生。
  6. 准备好后关闭站点 A。

此方法会为您的访问者引入维护窗口,但好处是不必处理数据库复制。当然,如果您的数据库有 100 GB,并且导出/导入对于维护窗口来说太长,则此计划可能行不通。

相关内容