我正在更换网站的服务器。旧服务器的 IP 无法移至新服务器。为了不停机,我计划执行以下操作,请有人确认它是否可行:
- 设置新服务器并监听新 IP
- 旧服务器将所有流量重定向到新 IP
- 更改 DNS 记录以指向新 IP
我的逻辑告诉我,当我从旧机器重定向到新 IP 时,用户将不会在浏览器中看到域名,但会看到新 IP。有没有办法重定向到新 IP 并随附 HOSTNAME,以便用户在浏览器中看到域名?
我这样做是因为该站点正在不断使用,并且简单地更改 DNS 设置是行不通的,因为在传播期间数据库不会在新旧服务器之间同步。
答案1
以下是对我有用的方法:
- 将文件和数据库与新服务器同步。
- 在截止之前执行重新同步。
- 更改 DNS 以指向新服务器。
- 将来自旧 IP 的请求转发到新服务器,直到 DNS 传播完成。
以下是我执行第 4 步的方法:
我们将在 Linux 服务器上配置 IPTables,将端口 80(默认 Web 服务器端口)上的所有流量重定向到 IP 为 的服务器122.164.34.240
。第一步是设置您的 Linux 机器以允许进行这种转发。打开终端窗口,以 root 用户身份登录并运行以下命令:
# echo 1 >/proc/sys/net/ipv4/ip_forward
下一步是告诉 IPTables 将流量重定向到新服务器:
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 122.164.34.240
这就是 IPTables 的魔力所在。在第三步也是最后一步,我们告诉 IPTables 重写到新服务器端口 80 的连接来源,使其看起来来自旧服务器。
# iptables -t nat -A POSTROUTING -p tcp -d 122.164.34.240 --dport 80 -j MASQUERADE
最后一步是必需的,因为如果我们不告诉新服务器的 Web 服务器这些连接来自客户端机器,它就会认为它们来自旧服务器。
您可能还想对数据库和电子邮件服务器端口重复此操作。
答案2
您还可以考虑添加多个 A 记录。例如,Google 就使用了这种方法,请查看他们的 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
如果您向域名添加多个 A 记录,访问者将收到多个 IP 并按顺序尝试。如果一个失败,客户端将转到下一个进行尝试。
提前 24 小时将新 IP 设置为额外的 A 记录,启动新服务器,关闭旧服务器,删除 IP。
答案3
另一个选择是使用 VIP(虚拟 IP)。因此,您的步骤如下:
- 设置新的服务器并监听新的 IP。
- 为旧服务器添加 VIP。
- 更改 DNS 记录以指向 VIP IP。到目前为止,所有流量仍将发送到旧服务器,但使用 VIP。
- 准备就绪后,将 VIP 移至新服务器。
- 或者,您可以将 DNS 更改为新的服务器 IP,并从 DNS 中删除 VIP(一段时间后)。
答案4
- 设置新服务器并监听新 IP
- 然后配置透明重定向。在旧服务器上安装 rinetd。
在 rinetd.conf 中:
OLD_SERVER_IP 80 NEW_SERVER_IP 80
- 更改 DNS 记录以指向新 IP