我正在为我的 postgres 数据库使用热备用服务器。我已为该服务器分配了一个虚拟 IP 地址。如果发生故障,我会将虚拟 IP 从主服务器切换到热备用服务器。问题是,访问数据库的客户端在其 ARP 缓存中仍然有到主服务器的旧路由。热备用服务器无法直接访问。有没有办法强制客户端清除其 ARP 缓存?
答案1
并非每个主机/IP 实现都会缓存来自免费ARP(你可以使用 arping 发送)。
为此,您应该使用一个守护进程,该守护进程不仅使用虚拟 IP,还使用虚拟 MAC 地址。心跳/加州大学研究生院/越南盾构机是实现此类功能的软件项目的名称。
答案2
如果客户端的 IP 列表易于处理,那么新服务器在探测虚拟 IP 地址后就可以 ping 所有客户端。每个客户端的 IP 代码在看到来自新 MAC 地址的 IP 后应更新其 ARP 表。
您可能能够 ping 到广播地址——我从未在任何情况下尝试过这样做,更不用说尝试触发其他系统来更新 ARP。但是,这将消除备用系统甚至需要知道要 ping 谁的情况。您也可以让备用系统在探测到虚拟 IP 后 ping 其本地网络中的每个地址。