AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 17106
Accepted
Steve Madsen
Steve Madsen
Asked: 2009-06-02 11:44:37 +0800 CST2009-06-02 11:44:37 +0800 CST 2009-06-02 11:44:37 +0800 CST

如何以最少的停机时间将网站从一台服务器迁移到另一台服务器?

  • 772

我有一个托管网站的服务器和需要重新安装的其他服务。我想暂时将这些服务重新定位到另一台服务器,尽可能减少停机时间。两台服务器都在同一个数据中心,并且可以在同一个网络交换机上。

以最少的停机时间移动这些服务的最佳技术是什么?该站点是数据库驱动的,所以理想情况下我想要一个“铁路转换”事件,我可以确保所有流量立即转移到新服务器。我不希望在将数据迁移到新数据库后旧数据库得到更新的情况。

我考虑过两件事:

更改 DNS 以指向临时服务。这里的主要问题是我不控制 DNS 的传播时间,其他服务器可以保留缓存的结果一段时间,让获得旧地址的用户“关闭”站点。

有没有办法解决 Apache + 重定向的问题?我怀疑不是,因为基于名称的虚拟主机在没有域名的情况下会中断,我无法使用它,因为它已经过时了。

将旧 IP 地址绑定到新服务器,并在重新安装期间(临时)为旧服务器分配不同的 IP。在这种情况下,我可以不理会 DNS。

还有其他我忽略的简单解决方案吗?

migration unix
  • 10 10 个回答
  • 2334 Views

10 个回答

  • Voted
  1. Best Answer
    tomjedrz
    2009-06-02T12:30:58+08:002009-06-02T12:30:58+08:00

    听起来您最好使用相对简单的解决方案……因为您可以忍受一点停机时间。我会避免与 DNS 混淆,因为您几乎无法控制传播/缓存延迟。

    1- 构建临时服务器
    2- 关闭主服务器上的服务
    3- 将关键数据从主服务器移动/复制到临时服务器
    4- 将主服务器更改为另一个 IP 地址
    5- 将临时服务器更改为主 IP 地址,启动
    6- 修复主服务器(在不同的 IP 上)
    7- 关闭临时服务器上的服务
    8- 将密钥数据从临时服务器移动/复制到主服务器
    9- 关闭临时服务器
    10- 将主服务器更改回主 IP 地址,启动

    唯一的停机时间是数据在服务器之间移动时,并且会根据数据的移动方式而有所不同。

    注意:如果您有防火墙并且正在执行 NAT,则在主要和临时之间更改 NAT 是交换 IP 地址的一个很好的替代方法,并且可以减少停机时间。

    • 4
  2. Dan Carley
    2009-06-02T12:01:14+08:002009-06-02T12:01:14+08:00

    如果没有绑定到 IP 的其他服务,则继续进行切换。这不会花费很长时间,您可以绝对确定交通将流向正确的目的地。

    请注意相邻机器的 ARP 缓存。更改后使用arping -s 是一种很好的做法。

    • 2
  3. Kyle Brandt
    2009-06-02T11:58:23+08:002009-06-02T11:58:23+08:00

    您的服务器本身是否有公共 IP。如果有 NAT 映射,您只需将 NAT 映射更改为具有相同的公共 IP 指向新服务器的新内部 IP。

    我认为拥有一个简短的维护页面和测试通常比我自己零停机时间更好。

    • 1
  4. Jeff Hengesbach
    2009-06-02T11:59:14+08:002009-06-02T11:59:14+08:00

    如果您在 2 个系统之间具有 LAN 速度连接并具有完全访问权限,则使用 drbd (drbd.org) 可能是在切换和返回之前在系统之间同步数据的不错选择。

    设置 DRBD 并让它同步
    关闭 db 和 web 服务器
    将原始机器上的
    drbd 切换到辅助 将第二台机器上的 drbd 切换到主要
    更改原始服务器 IP
    将旧 IP 添加到新
    服务器 在辅助系统上启动 db 和 web 服务器

    重建原始系统时翻转它们

    如果您的“数据”主要在数据库中,使用数据库复制的选项也很好

    即使 TTL 较低,等待 DNS 传播也会提供“不一致”的结果

    • 1
  5. Mez
    2009-06-02T12:12:08+08:002009-06-02T12:12:08+08:00

    迁移服务器..多么痛苦。

    幸运的是,您在同一个数据中心拥有一切。

    但是,这实际上取决于您拥有的应用程序等,并确保您已在新盒子上配置了所有这些应用程序。

    通常,在我的工作场所中,我们不会在配置中使用 IP 地址,而是使用 DNS 名称。但是这些 DNS 名称只在 /etc/hosts 中被引用过

    这意味着如果我们需要更改某个 IP 地址,我们只需更改 hosts 文件,所有内容都指向新位置。

    不过,这实际上取决于您希望如何进行切换——渐进与否。您至少需要确保两台机器上的数据源等完全相同,因此,为数据库等创建一个复制的从属设备等。基本上,当您在一台机器上拔下插头时,另一台机器应该是能够立即接管,并处于相同的状态。这是保持服务器独立的一个很好的理由。所以不要让一台服务器运行所有的邮件、数据库、网络应用程序等。确保没有单点故障。

    这是我们最近进行服务器迁移的方式(从一个数据中心到另一个数据中心)

    1. 几周前,更改域的 DNS 上的 TTL
    2. 设置新服务器,确保它具有完全相同的代码
    3. 设置 Master<->Master 在新数据中心复制从机
    4. 在测试时将所有东西都指向旧数据中心(SSH 隧道是你的朋友!)
    5. “翻转开关” - 运行一个脚本,将所有服务器(新旧)上的所有内容更改为指向新服务器(确保您同时执行所有操作,否则您可能会遇到复制问题!)
    6. 迁移 DNS 记录 - 将 DNS 指向新服务器
    7. 监控 - 观察旧服务器,直到流量减少。
    8. 退役旧服务器

    虽然这并不完全是我们所做的一切的“一击一击”。它提供了一个很好的概述。

    • 1
  6. Jonathan
    2009-06-02T12:53:07+08:002009-06-02T12:53:07+08:00

    我在博客上写了关于如何将 Web 服务器移动到另一个服务器。包括很多,包括数据库问题。

    http://mysqlbarbeque.blogspot.com/2009/03/how-to-move-your-web-server-with-no.html

    • 1
  7. Sergio
    2009-06-02T11:49:11+08:002009-06-02T11:49:11+08:00

    如果您拥有相关域,您可以让您的 DNS 管理员将该 DNS 条目的 TTL 更改为较低的值(例如 3-5 分钟)。让这个新设置在 Internet 上传播几天,然后再进行实际的 DNS IP 更改。这应该确保任何缓存的 DNS 条目在您更改后快速更新。

    • 0
  8. chaos
    2009-06-02T11:55:39+08:002009-06-02T11:55:39+08:00

    你说得对,DNS 转换是完全不可靠的。我更喜欢做的是,在更改 DNS 的同时,切换旧站点的数据库配置,使其连接到新服务器的数据库。Ta-da,你所有的更新都集中在一个地方。

    当然,对于连接到旧服务器的人来说,该站点可能会运行得更慢,但这只会持续到他们同步为止。

    • 0
  9. miHost
    2009-06-02T11:52:15+08:002009-06-02T11:52:15+08:00

    在您的数据库服务器上使用复制。这将解决您在中间时间在两台服务器上更新数据库的问题。

    • -1
  10. squillman
    2009-06-02T11:54:21+08:002009-06-02T11:54:21+08:00

    理想情况下,您将 DNS 主机记录的 TTL 设置得比预定时间提前几天,但如果您无法控制(或无法与某人合作),那就没办法了。

    如果没有,唯一要做的就是构建新服务器,直到它准备好投入生产,然后在你关闭机器时安排几分钟的停机时间......

    • -1

相关问题

  • 如何将 VirtualBox 2 虚拟机迁移到 VmWare server2?

  • 如何迁移、转储或恢复 VirtualBox 系统?

  • 如何在 Windows 2003 Server 中获取激活密钥

  • 如何从 SQL Server 2005 迁移到 2008

  • 将 Bugzilla 迁移到 Team Foundation Server (TFS) 的方法或工具

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve