我有一个托管网站的服务器和需要重新安装的其他服务。我想暂时将这些服务重新定位到另一台服务器,尽可能减少停机时间。两台服务器都在同一个数据中心,并且可以在同一个网络交换机上。
以最少的停机时间移动这些服务的最佳技术是什么?该站点是数据库驱动的,所以理想情况下我想要一个“铁路转换”事件,我可以确保所有流量立即转移到新服务器。我不希望在将数据迁移到新数据库后旧数据库得到更新的情况。
我考虑过两件事:
更改 DNS 以指向临时服务。这里的主要问题是我不控制 DNS 的传播时间,其他服务器可以保留缓存的结果一段时间,让获得旧地址的用户“关闭”站点。
有没有办法解决 Apache + 重定向的问题?我怀疑不是,因为基于名称的虚拟主机在没有域名的情况下会中断,我无法使用它,因为它已经过时了。
将旧 IP 地址绑定到新服务器,并在重新安装期间(临时)为旧服务器分配不同的 IP。在这种情况下,我可以不理会 DNS。
还有其他我忽略的简单解决方案吗?
听起来您最好使用相对简单的解决方案……因为您可以忍受一点停机时间。我会避免与 DNS 混淆,因为您几乎无法控制传播/缓存延迟。
1- 构建临时服务器
2- 关闭主服务器上的服务
3- 将关键数据从主服务器移动/复制到临时服务器
4- 将主服务器更改为另一个 IP 地址
5- 将临时服务器更改为主 IP 地址,启动
6- 修复主服务器(在不同的 IP 上)
7- 关闭临时服务器上的服务
8- 将密钥数据从临时服务器移动/复制到主服务器
9- 关闭临时服务器
10- 将主服务器更改回主 IP 地址,启动
唯一的停机时间是数据在服务器之间移动时,并且会根据数据的移动方式而有所不同。
注意:如果您有防火墙并且正在执行 NAT,则在主要和临时之间更改 NAT 是交换 IP 地址的一个很好的替代方法,并且可以减少停机时间。
如果没有绑定到 IP 的其他服务,则继续进行切换。这不会花费很长时间,您可以绝对确定交通将流向正确的目的地。
请注意相邻机器的 ARP 缓存。更改后使用arping -s 是一种很好的做法。
您的服务器本身是否有公共 IP。如果有 NAT 映射,您只需将 NAT 映射更改为具有相同的公共 IP 指向新服务器的新内部 IP。
我认为拥有一个简短的维护页面和测试通常比我自己零停机时间更好。
如果您在 2 个系统之间具有 LAN 速度连接并具有完全访问权限,则使用 drbd (drbd.org) 可能是在切换和返回之前在系统之间同步数据的不错选择。
设置 DRBD 并让它同步
关闭 db 和 web 服务器
将原始机器上的
drbd 切换到辅助 将第二台机器上的 drbd 切换到主要
更改原始服务器 IP
将旧 IP 添加到新
服务器 在辅助系统上启动 db 和 web 服务器
重建原始系统时翻转它们
如果您的“数据”主要在数据库中,使用数据库复制的选项也很好
即使 TTL 较低,等待 DNS 传播也会提供“不一致”的结果
迁移服务器..多么痛苦。
幸运的是,您在同一个数据中心拥有一切。
但是,这实际上取决于您拥有的应用程序等,并确保您已在新盒子上配置了所有这些应用程序。
通常,在我的工作场所中,我们不会在配置中使用 IP 地址,而是使用 DNS 名称。但是这些 DNS 名称只在 /etc/hosts 中被引用过
这意味着如果我们需要更改某个 IP 地址,我们只需更改 hosts 文件,所有内容都指向新位置。
不过,这实际上取决于您希望如何进行切换——渐进与否。您至少需要确保两台机器上的数据源等完全相同,因此,为数据库等创建一个复制的从属设备等。基本上,当您在一台机器上拔下插头时,另一台机器应该是能够立即接管,并处于相同的状态。这是保持服务器独立的一个很好的理由。所以不要让一台服务器运行所有的邮件、数据库、网络应用程序等。确保没有单点故障。
这是我们最近进行服务器迁移的方式(从一个数据中心到另一个数据中心)
虽然这并不完全是我们所做的一切的“一击一击”。它提供了一个很好的概述。
我在博客上写了关于如何将 Web 服务器移动到另一个服务器。包括很多,包括数据库问题。
http://mysqlbarbeque.blogspot.com/2009/03/how-to-move-your-web-server-with-no.html
如果您拥有相关域,您可以让您的 DNS 管理员将该 DNS 条目的 TTL 更改为较低的值(例如 3-5 分钟)。让这个新设置在 Internet 上传播几天,然后再进行实际的 DNS IP 更改。这应该确保任何缓存的 DNS 条目在您更改后快速更新。
你说得对,DNS 转换是完全不可靠的。我更喜欢做的是,在更改 DNS 的同时,切换旧站点的数据库配置,使其连接到新服务器的数据库。Ta-da,你所有的更新都集中在一个地方。
当然,对于连接到旧服务器的人来说,该站点可能会运行得更慢,但这只会持续到他们同步为止。
在您的数据库服务器上使用复制。这将解决您在中间时间在两台服务器上更新数据库的问题。
理想情况下,您将 DNS 主机记录的 TTL 设置得比预定时间提前几天,但如果您无法控制(或无法与某人合作),那就没办法了。
如果没有,唯一要做的就是构建新服务器,直到它准备好投入生产,然后在你关闭机器时安排几分钟的停机时间......