Anycast实现DNS高可用


最近在内网里搭建了一套 DNS 系统,2个节点在本地,2个节点在异地,采用的是 OSPF + Anycast 。

一般来说 Anycast 是搭配 BGP的,路由层面来说 BGP 也比 OSPF 更好控制,但是我们的网络架构 CE 与 PE 之间采用的 OSPF 路由协议(MPLS-VPN),更改起来动作太大。

来康康什么是 Anycast :

先说结论:Anycast 就是不同服务器用了相同的 ip 地址

Anycast 本身是指 IPv6 中一个发送方和最近的一组接收方之间的通信。众所周知,IPv6 中是没有广播的,只有单播(Unicast)、组播(Multicast)和任播(Anycast),Anycast 在 IPv4 中也同样适用。Anycast 本身就是多个主机使用同一个 ip 地址(该地址是这一组主机的共享单播地址)的一种技术,当发送方发送报文给这个共享单播地址时,报文会根据路由协议路由到这一组主机中离发送方最近的一台,所以这个技术也可以用来做负载均衡。

在企业网络环境中,Anycast 不太常见,其主要应用于大范围的 DNS 部署,CDN,数据中心等。

可能会有做企业网的朋友会有疑问,怎么能让互联网的多个主机用同一个 ip,这岂不是 ip 地址冲突了?

回答:

首先,每一个服务器主机处在不同的地理位置,他们之间不在同一个广播域内。所以把所有主机配置成相同的 ip 地址并不会引起我们日常所见的 ip 地址冲突。

其次,光靠配置相同的地址是不够的,我们还需要借助路由协议帮忙。

通过路由协议,各个站点向外宣告相同的 Anycast IP 地址。

举个栗子:

通过配置4个 DNS 节点服务器的 Loopback 地址为相同 IP,例如1.1.1.1/32。然后服务器直接与CE路由器建立 OSPF 邻居,对外宣告1.1.1.0/27网段,这样PE就会学习到1.1.1.0/27。

(注:为什么要宣告/27,而不是/32?那是因为上面有规定,为了减小VPN路由表,PE设备规定了只接受大于/8,小于等于/27的网段宣告进入骨干网。Internet 里也有类似规定)

以上步骤完成后,骨干网里对1.1.1.1/27会有4个不同的出口路由器,客户端使用1.1.1.1作为DNS服务器,根据 OSPF 选择到最优路径。

万一出故障怎么办:

如果 DNS 服务器中某几台出现故障,例如重庆的2台 DNS 服务器宕机,OSPF 协议会立即停止宣告此1.1.1.0/27的网段,路由表中只有异地的 DNS 可供选择,但是客户端是不会感知到,从而达到业务的平滑迁移和服务的高可用性,完全不需要人工干预。

半夜12点,老王正在酣睡。突然一阵清脆的手机铃声响起,把老王从睡梦中拉回现实。

“喂,谁啊?”

“王工,我是监控中心的,公司的XXX服务器挂了,你赶紧看一下吧。”

“不要慌,能自动切换的,该睡觉睡觉,该休息休息,明天上班再来处理!”