更改服务器 - 重定向到新 IP = 没有停机时间?

Den*_*nov 13 domain-name-system hosting redirect isp

我正在更改我网站的服务器。旧服务器的IP不能移到新的。为了没有停机时间,我打算执行以下操作,请有人确认它会起作用:

  1. 设置新服务器并监听新 IP
  2. 旧服务器将所有流量重定向到新 IP
  3. 更改 DNS 记录以指向新 IP

我的逻辑告诉我,当我从旧盒子重定向到新 IP 时,用户不会在浏览器中看到域名,但会看到新 IP。有没有办法重定向到新 IP 并随 HOSTNAME 一起发送,以便用户在浏览器中看到域名?

我这样做是因为该站点一直在使用中,并且仅更改 DNS 设置是行不通的,因为在传播过程中,数据库不会在新旧服务器之间同步。

小智 19

这是对我有用的方法:

  1. 将文件和数据库与新服务器同步。
  2. 在切断之前执行重新同步。
  3. 更改 DNS 以指向新服务器。
  4. 将来自旧 IP 的请求转发到新服务器,直到 DNS 传播完成。

这是我将如何执行第 4 步:

我们将在 Linux 服务器上配置 IPTables,将所有来自端口 80(这是默认 Web 服务器端口)的流量重定向到具有 IP 的服务器122.164.34.240。第一步是设置您的 Linux 机器以允许进行这种转发。打开终端窗口,以 root 用户身份登录并运行以下命令:

# echo 1 >/proc/sys/net/ipv4/ip_forward
Run Code Online (Sandbox Code Playgroud)

下一步是告诉 IPTables 将流量重定向到新服务器:

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 122.164.34.240
Run Code Online (Sandbox Code Playgroud)

这就是 IPTables 魔法发生的地方。在第三步也是最后一步,我们告诉 IPTables 将连接的来源重写为新服务器的端口 80,使其看起来来自旧服务器。

# iptables -t nat -A POSTROUTING -p tcp -d 122.164.34.240 --dport 80 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)

最后一步是必需的,因为如果我们不告诉新服务器的 Web 服务器连接来自客户端机器,它会认为它们来自旧服务器。

您可能还想对数据库和电子邮件服务器端口重复此操作。


Jap*_*oge 5

您还可以考虑添加多个 A 记录。例如,谷歌使用这个,检查他们的 nslookup 输出:

Name:       google.com
Addresses:  209.85.148.101
            209.85.148.102
            209.85.148.113
            209.85.148.138
            209.85.148.100
            209.85.148.139
Run Code Online (Sandbox Code Playgroud)

如果您向一个域添加多个 A 记录,访问者将收到多个 IP 并按该顺序尝试它们。如果一个失败,客户端会移动到下一个尝试。

提前 24 小时将新 IP 设置为额外的 A 记录,启动新服务器,关闭旧服务器,删除 IP。