使用 /etc/hosts 在 DNS 切换期间重定向流量

使用 /etc/hosts 在 DNS 切换期间重定向流量

我正在将一个相当繁忙的站点迁移到另一个服务器集群。

该站点有一台 MySQL 主服务器和两台从服务器。我希望切换期间的停机时间尽可能短,我最担心的是 DNS 更改传播所需的时间。

主数据库服务器在mysql.domain.com下运行。

我的想法是将主数据库复制到我们的新服务器,然后将 mysql.domain.com 的 DNS 切换到新主服务器的 IP。但是,这意味着在 DNS 传播到全球范围之前,我将向两个主服务器发送请求,从而对我的数据造成严重破坏。

我的计划是改变旧主服务器上的 /etc/hosts 文件,以便对 mysql.domain.com 的任何请求都转到新服务器的 IP。

有人看到这其中的潜在危险吗?

答案1

如果两台服务器相邻,为什么不将旧服务器的 IP 地址转移到新服务器呢?每台服务器可以有两个(或更多)IP 地址。让新服务器同时响应这两个 IP 地址将缓解您的所有问题。

如果可能的话,我会投票:

  • 关闭旧服务器
  • 使用新 IP 和旧服务器的 IP 激活新服务器
  • 如果有必要:为旧服务器提供不同的 IP 并将其重新启动。

或者,设置您觉得合适的任何 IP 故障转移机制。确保您的新主服务器拥有旧主服务器的所有数据。

关于你的问题:

这是否意味着您正在提供“国际”mysql 服务,或者您指的是恰好在后台使用集群 mysql 安装的 Web 服务器场或类似服务器场?您是否控制连接到数据库的计算机?这将带来更多可能性

答案2

我不明白你的提议能达到什么效果。/etc/hosts对旧主 SQL 进行调整如何帮助你实现最小化 DNS 传播延迟的目标?

如果您控制主机上的 DNS 服务器和解析器,您可能能够在更改之前发布具有更短 TTL 的旧主服务器,然后在进行更改时重新启动任何nscd进程。

根据我对您业务规模的假设,最好的做法是声明一个停机窗口,在此期间您认为数据库是只读的。

答案3

这不是这样工作的。/etc/hosts 根本不是重定向,你必须在所有客户系统直到 DNS 完全传播,因此只有当您控制所有客户端时这才会起作用。

可能有效的是在旧机器上通过 iptables 或 ssh 设置一些到新机器的转发。

可以尝试一下(未经测试,只是一个快速的想法,192.168.0.2 是新的,192.168.0.1 是旧服务器):

在旧服务器上,停用 mysql。在新服务器上,启动 ssh 会话,如下所示:

ssh [email protected] -R 3306:192.168.0.2:3306 

并保持打开状态。这应该将到达端口 3306 的流量重定向到新服务器端口 3306。如果您对 mysql 使用其他端口,请进行相应调整。

答案4

编辑 DNS 区域设置并修改 mysql.domain.com 的 A 记录以指向新服务器的新 IP 不是更容易吗?如果任何请求仍然发送到旧服务器(由于 DNS 传播延迟),新的区域设置应该正确地将它们指向您的新服务器。

相关内容