我将一个相当繁忙的站点迁移到另一个服务器群集。
这个网站有一个MySQL主服务器和两个从服务器。 我希望在交换过程中尽可能减less停机时间,而我最关心的是DNS更改所需的时间。
主数据库服务器在mysql.domain.com下运行。
我的想法是将主数据库复制到我们的新服务器,然后将mysql.domain.com的DNS切换到新主服务器的IP。 然而,这意味着我将有两个主服务器的请求,直到DNS在世界范围内传播,这对我的数据造成严重破坏。
我的计划是更改旧的主服务器上的/ etc / hosts文件,以便对mysql.domain.com的任何请求都转到新服务器的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传播延迟),新的区域设置应该正确地将它们指向您的新服务器。