无需停机即可转移站点

php*_*nky 1 domain-name-system

我想将我的网站转移到新的主机上。我已将所有内容移到那里,但希望在 DNS 指向新名称服务器时最大程度地减少数据库丢失。

我怎样才能做到这一点?

更多细节:

  • 将文件和数据库传输到新主机。

  • 将 DNS 记录更改为新的名称服务器,女巫需要一些时间来更新!

我需要的是:将旧服务器上的站点指向新服务器中的新数据库,这样任何新数据都不会丢失!

zer*_*eux 8

我定期进行这些迁移。没有停机是困难的,但可能停机时间很少或几乎不明显。总体思路是:

  • 做一个热备份的源服务器到新的; 这是一个完整的工作副本,而您的源仍在工作(在 LAMP 服务器上:在源上运行 mysqldump,然后通过 rsync 将整个文件系统传输到目标上)
  • 如果应用程序处理得很好,则1/ 将源置于只读模式( shell> mount -remount o,ro /path/to/fs+ mysql> flush tables with read lock),或者 2/显示维护页面
  • 做一个冷增量备份,即。重新转储您的 SQL 并只传输自热备份以来修改过的内容。使用 rsync,成本仅取决于目标上的 inode(文件)数量,因为它们都必须经过修改测试;这很少是带宽问题。根据我的经验,在具有 100 - 500k inode 的 1 - 10 GB 站点上,此增量备份需要 1 秒到 1 分钟。
  • 在源上设置一个反向代理,将所有流量重定向到新目标。大功告成,如果出现问题,几秒钟后可以回滚(将反向代理部分放到源服务器上)。显然,您已经准备好配置,以便简单的调用apachectl graceful就足以应用它。
  • 如果一切顺利,您可以完成迁移并更新您的 DNS(我通常在 24 小时后执行此操作)。然后等待流量停止从您的源服务器流出(通常是另一个 24-48 小时)。

细节比较棘手,但是当这是你的工作并且你已经习惯了它实际上很容易。除了知道如何运行 'rsync'、'mysqldump' 以及在 Apache 中使用几行设置反向代理之外,您就大功告成了。

很多时候你必须调整一些与源服务器和目标服务器不同的东西(比如主机名)。在这种情况下,我编写了一个小脚本来自动执行备份部分和“修复”(使用 sed、perl 等)。随着rsync -a --delete可用于冷热备份相同的脚本。

这样做的好处您不依赖于 DNS。根据我的经验,DNS 托管总是很糟糕或几乎无法控制站点所有者。许多 DNS 提供商的 DNS 更新是不可预测和不可调试的。大多数缓存 DNS 服务器会忽略或修改 TTL。您遇到了这个有趣的时间窗口,其中许多人没有看到使用相同名称的相同服务器,这会导致非常糟糕的客户端关系。将 DNS 排除在外对我来说是一个巨大的胜利(除非我可以直接托管 DNS 区域,然后我可以 100% 控制,但那是另一回事)。