实时Web服务器迁移

我需要更换运行繁忙网站的老化的networking服务器。 我有新的硬件和运行,所有的软件安装。 只有一个问题留在我正在寻找解决scheme:

当我在DNS中更改域的Alogging时,由于DNScaching,更改需要一段时间才能在Internet上传播。 在这段时间内,一些用户会碰到新的服务器,有些用户会碰到旧的,导致数据不一致,因为现在有两个数据库。 我怎样才能立即切换每个人? 我不运行DNS服务器,只能改变A和CNAMElogging,但是如果有帮助,我可以设置自己的DNSlogging。

过夜时我可能会有一两个小时的停机时间。

谢谢,西蒙

编辑 :谢谢你的答案。 我接受SmallClanger的答案,因为这是一个可行的解决scheme,我很高兴布赖恩,因为他的答案给了我一个新的想法:遵循SmallClanger的解决scheme,直到数据库迁移,然后用一个代理所有请求的HTTP代理replace旧的Apache到新的服务器。 我将代理configuration为通过IP地址寻址新服务器,并且不涉及可能(尽pipe302代码)在某个书签目录,社交networking或浏览器caching中的临时子域。

您拥有的基本问题是在交换过程中保持数据库的一致性。 为了实现宕机,您将别无select,只能将这两台服务器设置为主动/主动群集。 (即使现在假设群集设置本身不涉及停机时间,这是一点点延伸)。

鉴于你不能改变TTL,你最好的办法就是尽量减less停机时间:

  • 将新网站设置为第二个域名(例如: www2.example.com ),但也可以使其回复www.example.com 。 将www2的DNS指向新服务器。
  • 让站点文件从双方的编辑中复制和locking。
  • 然后在广告维护窗口中,用“closures升级”通知来replace现场。
  • 根据需要同步或复制数据库,然后启动新的服务器。
  • 然后(并且只有这样)才能将您的DNS更改为wwwlogging。
  • 用一个简单的302redirect到www2.example.comreplace旧的站点configuration
  • 等待完整的TTL过期(然后一点点),然后再closures旧的服务器。

这将确保所有stream量在DNS传播过程中进入新网站,而不pipe最初使用哪个服务器,尽pipe它假设您的网站能够同时从多个域名提供服务。

对于单服务器LAMP堆栈(如果这是你所拥有的),那么这是你的最小(但不是零)停机时间的路线。

您可以将旧的Web服务器configuration为将所有请求redirect到新的IP。 这可以用apache中的mod_rewrite完成。

您可以在迁移之前的一两天将您的区域的TTL降低到一个较小的值。 在您更改了A资源logging之后,您可以再次将TTL提高到旧值。

您必须先迁移新服务器上的所有数据文件(apache和mysql文件)。 之后,当你有2 houres停止服务器,你可以同步rsync的所有数据文件。 使用rsync -avz / var / www / sites(旧服务器)user @ hosts2:/ var / www / sites(新服务器)。 并导出所有的数据文件在SQL Server从服务器1导入到新的服务器。 然后swich服务器2

并停止旧的服务器,如果你有一些问题再次启动服务器1并重新启动错误的新服务器。

但在你开始新的服务器检查错误之前,请自行testing。

降低TTL,并在旧页面上的维护标记下?

我的东西TTL是个坏主意。 如果旧服务器活着,一些用户将会连接旧服务器,另一个用户将使用新服务器。 如果你真的有2个小时使用syn并导出​​inport所有从sql到sql,然后在新的服务器上swich确保所有将罚款亩解决scheme

您可以使用旧的服务器IP为您的新的服务器。