使用/ etc / hosts在DNS切换期间redirectstream量

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

这个网站有一个MySQL主服务器和两个从服务器。 我希望在交换过程中尽可能减less停机时间,而我最关心的是DNS更改所需的时间。

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

我的想法是将主数据库复制到我们的新服务器,然后将mysql.domain.com的DNS切换到新主服务器的IP。 然而,这意味着我将有两个主服务器的请求,直到DNS在世界范围内传播,这对我的数据造成严重破坏。

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

有没有人看到这个潜在的危险?

如果两台服务器彼此相邻,为什么不将旧服务器的IP地址转移到新服务器。 每个服务器可以有两个(或更多)IP地址。 让你的新服务器回答这两个问题将缓解你所有的问题。

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

  • closures旧服务器
  • 用新IP和旧服务器的IP激活新服务器
  • 如有必要:为旧的服务器提供一个不同的IP并重新启动。

或者设置任何你感到舒服的IP故障切换机制。 确保你的新主人拥有旧的所有数据。

关于你的问题:

这是否意味着你正在提供“国际”的MySQL服务,或者你是在谈论一个networking服务器场或类似的,恰巧在后台使用群集的MySQL安装? 你是否控制连接到数据库的计算机? 这将开辟更多的可能性

我不遵循你的build议达成的目标。 如何调整旧的主SQL上的/etc/hosts帮助您实现最小化DNS传播延迟的目标?

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

最好,根据我认为是你的业务规模,将宣布一个停机窗口,在此期间你认为数据库是只读的。

这不是那样的。 / etc / hosts根本就不是redirect的,所以你必须在所有的客户端系统上编辑这个文件,直到DNS完全传播,所以只有当你控制所有的客户端的时候才能工作。

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

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

在旧的服务器上,停用mysql。 在新的服务器上,像这样开始一个ssh会话:

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

并保持开放。 这应该将到达端口3306的stream量redirect到新的服务器,端口3306.如果您使用另一个端口的mysql,相应地适应。

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