A
客户端通过连接域名地址来连接到服务器www.example.com:4444
,域名地址www.example.com
解析为服务器的IP地址A
。
问题:为了提供无缝服务器升级,客户端必须不间断地从一台服务器转移A
到另一台服务器B
。以下 iptables 规则允许客户端B
通过 间接与服务器通信A
。
iptables -t nat -A PREROUTING -p tcp --dport 4444 --to-destination 123.123.123.123 -j DNAT
iptables -t nat -A POSTROUTING -p tcp -d 123.123.123.123 --dport 4444 -j MASQUERADE
但是客户端仍然需要服务器A
才能访问服务器B
。有没有办法告诉客户端他们应该与之通信的新服务器是B
具有 IP 地址的服务器123.123.123.123
,并且他们应该直接转到该服务器 IP 地址,而不再通过该服务器进行连接A
?
我假设更改A
DNS 中的记录并等待更改传播到客户端将需要客户端重新启动(这是我们必须避免的)。
服务器和客户端通过 TCP 上的 JSON 消息进行通信,而不是 HTTP。
答案1
您需要更新 DNS 的 A 记录。
通常,您会在更改之前降低记录的 TTL,以减少其他 DNS 服务器缓存“旧”地址的时间。您至少应该在实际更改为新服务器之前降低 TTL。
例如,如果您的 TTL 正常为 24 小时,那么您可以在实际想要更改的 24 小时前将 TTL 缩短为 5 到 30 秒。然后更改 A 记录,一旦您确认一切正常(即您不需要恢复到旧服务器),您就可以将 TTL 恢复正常。