将 Web 服务器迁移到新的数据中心和新 IP

将 Web 服务器迁移到新的数据中心和新 IP

我有一台托管 200 多个域的 Web 服务器,但需要将其移至另一个数据中心并获取新的 IP 地址。但由于所有 DNS 设置都必须手动更新,所以我考虑是否可以在旧 IP 地址上设置某种透明代理,将所有 http/https 流量转发到新 IP。这样访问者就不会发现 DNS 的移动正在被纠正。

我首先想到的是使用 nginx,但认为这会导致域上的 SSL 证书出现问题。 有没有什么好办法可以解决这个问题?

答案1

在这些情况下,我使用以下迁移过程:

  1. 将 DNS TTL 更改为最小值
  2. 等待 DNS TTL 更新
  3. 将密钥/证书复制到新服务器
  4. 将站点置于维护模式
  5. 将文件/数据库同步到新服务器
  6. 设置从旧服务器到新服务器的反向代理
  7. 删除新服务器上的维护模式
  8. 更改 DNS 条目以指向新服务器

第 6 步确保最终用户不会最终转到旧服务器,即使他们的 DNS 已解析到旧服务器 IP。

此后,继续监控旧服务器日志,查看流量何时停止。然后,您就可以拆除旧设置了。

反向代理是使用指令设置的proxy_pass。如果最终用户 IP 地址是重要信息,则需要将其添加到旧服务器 -> 新服务器请求的 HTTP 标头中,并告诉新服务器使用标头值作为 IP 地址。

答案2

您可能首先要决定(或估计)搬家时要牺牲什么:

  1. 过渡的简易性(如果下面的很多要点都很重要,那么过渡将是一个项目而不是一项任务,您可能也不具备所需的专业知识)
  2. 停机时间(是否可以在夜间或用户活动最少时执行整个转换?)
  3. 访问日志的一致性(这可能非常重要,http 或 tcp 代理将掩盖远程 IP 地址)
  4. 向用户显示的数据的一致性(某些用户看到过时的数据是否可以接受?)
  5. 内容更新的可能性
  6. 数据安全(在很多情况下,保证数据绝对安全、不被损坏和/或泄露非常重要,即使这意味着一些停机时间)
  7. 可用时间(您的托管合同即将到期)
  8. 用户会话一致性(这正式包含在第 4 点中,但由于可能采取不同的缓解措施,值得额外考虑)

根据上述内容的组合,您可能需要使用以下一项或多项:

  • TCP 代理(如 socat)
  • HTTP 代理(nginx、squid 等...)
  • 复杂的路由/VPN 解决方案,允许单个服务器响应 2 个 IP 地址上的请求
  • 数据库复制
  • 虚拟机迁移

无论选择哪种策略,您都会想要以下东西:

  1. 降低 DNS TTL(一切准备就绪后,您可以将其重新增加)
  2. 备份 - 是的,在过渡和迁移期间确实会发生不好的事情。
  3. 一个计划
  4. 如果过渡计划失败则返回的计划。

答案3

另一种选择是使用 NAT、VPN 和策略路由的组合。

您在旧位置和新位置的服务器之间设置 VPN,在旧位置的服务器上使用目标 NAT 将传入流量重定向到 VPN。在新位置的服务器上,您使用策略路由来确保对来自 VPN 的流量的回复会返回 VPN。

相关内容