![主链路中断时的故障转移默认路由](https://linux22.com/image/91072/%E4%B8%BB%E9%93%BE%E8%B7%AF%E4%B8%AD%E6%96%AD%E6%97%B6%E7%9A%84%E6%95%85%E9%9A%9C%E8%BD%AC%E7%A7%BB%E9%BB%98%E8%AE%A4%E8%B7%AF%E7%94%B1.png)
我有 2 个 ISP,以及一个有两个 IP 地址的服务器,如下所示:
eth0: 161.0.0.2
eth1: 171.0.0.2
我设置了www.example.com
两条A记录,这样我就有了DNS LB。
应用程序以这种方式工作正常,并且 Linux 盒子设置了基于策略的路由,以避免连接的不对称路由。传出数据包通过建立传入连接的同一接口离开。
现在,剩下的唯一问题是我设置了一个默认网关,161.0.0.1
.我也想实现 LB 或至少对传出连接进行故障转移。
我可以做到的一种方法是使用 cronjob 来 ping 某些主机,如果 ping 失败,则将默认路由更改为171.0.0.1
,但这种方法似乎太不可靠了。
关于如何故障转移默认路由有什么建议吗?
答案1
如果您不想了解真正的路由协议,最好的建议是连续运行程序,定期 ping 前两个跃点(使用您编造的地址,即 161.0.0.1 和 171.0.0.1)并安装其中的一个作为默认路由进行响应。您可能可以使用您选择的脚本语言来完成此操作,尽管我自己可能会使用 C 语言来完成此操作。事实上,我有(但不再能找到该代码)。它非常简单且正确,并且用 C 语言实现可以大大降低对服务器的影响。
答案2
我有一个答案,尽管你不会喜欢它。 DNS 中的多个 RR A 不会为您带来高可用性。答案很大程度上取决于客户端/他们的 DNS 服务器。
如果客户端解析了已关闭的 ISP 的 IP 地址,它会将其保留在缓存中,并且不会尝试其他客户端,因此您将拥有一组可以访问的客户端,而其他客户端则抱怨该站点已关闭。
低 TTL 也无济于事,因为一些 DNS 客户端/大型 ISP 以忽略低 TTL 而闻名,因此即使 DNS 中的 TTL 较低,您也会有一组无法访问的客户端。
可能的解决方案之一是使用 CND 的服务,例如云耀,并在那里配置两个 IP 地址。
另一种获得外部路由冗余的更复杂方法是请求 AS 编号,为两个网络使用提供商独立的 IP 地址空间,并与提供商进行 BGP 对等。
至于离开时的路由,为了利用两个ISP的流量,我建议制定策略以使用相应的网关、基于源的路由。http://www.novell.com/support/kb/doc.php?id=7008874