DNS+Anycast 均衡负载实战(IPV4)

DNS+Anycast 均衡负载实战(IPV4)

我们都知道google的公共DNS为:8.8.8.8,甚至我们可以在全球任何地方都能ping通这个IP或者通过dig能解析域名,例如如下操作:

通过强制使用8.8.8.8的dns服务器我们可以解析任何域名,这里就涉及到dns+anycast全局均衡负载的技术了。

anycast是什么

anycast准确的说是一种通信方式,其中文名叫:任播,最早在rfc1546中提出,只不过rfc1546只是一个概念,并没有实质性的实践,最终是在rfc3513才真正的提出任播地址的格式以及使用方式。但任播地址仅仅使用到了IPV6上,而对于IPV4并没有任播,IPV4只有组播以及单播。而今天讲的则是IPV4的任播方式,虽然没有按照rfc1513的格式实现,但是凭借IPV4这么多年的沉淀,早已利用各种骚操作使用任何场景,下面我们就来解开这IPV4的dns+anycast部署模式。

实战

DNS+Anycast 均衡负载实战(IPV4)

软件准备

配置之前我们先测试一下互通性,我们现在R1上ping 10.211.66.254(R2的eth1 IP),可以看到此时是不通的。

DNS+Anycast 均衡负载实战(IPV4)

DNS+Anycast 均衡负载实战(IPV4)
此时显示了10.211.55.18,表示ospf邻居关系已经建立成功。
同理R2上输入也能看到如下信息:
DNS+Anycast 均衡负载实战(IPV4)
在R2上也执行:
DNS+Anycast 均衡负载实战(IPV4)
既然我们已经能ping通10.211.66.254,那此时是否能ping通PC端呢br> 在R1上执行,显示如下信息,表示成功对接。
DNS+Anycast 均衡负载实战(IPV4)
同理我们在PC端执行:,显示如下信息,完美互通!
DNS+Anycast 均衡负载实战(IPV4)
观察状态

在DNS1上进入,然后执行:,显示如下信息:

DNS+Anycast 均衡负载实战(IPV4)
此时我们已经可以看到DNS1、DNS2、DNS3都在一个邻居网络上,表示我们的所有网络已经连接成功。此时我们再次测试联通性,在DNS1上执行:(PC的IP),可以看到也是通的。
DNS+Anycast 均衡负载实战(IPV4)
DNS+Anycast 均衡负载实战(IPV4)
此时我们再通过PC端来ping 6.6.6.6,看看效果:
DNS+Anycast 均衡负载实战(IPV4)
此时我们在PC端执行:
DNS+Anycast 均衡负载实战(IPV4)
我们在DNS1上分别关掉eth0、eth1以及删掉6.6.6.6/32,此时可以看到DNS1已经是断网的状态,也ping不通任何服务器。
而此时的DNS2以及DNS3的状态如下,都已经开启了DNS服务。
DNS+Anycast 均衡负载实战(IPV4)
可以看到DNS2已经收到了PC端的A记录解析请求。同时PC端也收到了响应:
DNS+Anycast 均衡负载实战(IPV4)
如此一来,DNS的均衡负载就能正常运转,同样的道理如果我们把DNS1再次启动,此时的PC端的请求会回到DNS1上。这样就可以水平拓展DNS服务器以达到均衡负载的目的。

原理

以上就是DNS+Anycast搭建均衡负载的实战,这其中比较关键的点就是ospf协议以及在lo环网上添加6.6.6.6/32作为均衡负载IP。我们在刚才的实验中可以看到,当DNS1断开以后,请求能自动达到了DNS2上,这一步其实就是ospf协议做的工作。我们在搭建的时候将DNS1、DNS2、DNS3以及R1一起通过ospf建立了邻居关系。
此时的DNS1、DNS2、DNS3就是R1路由器的邻居,同时DNS三台服务器上的所有网段都能被R1路由器学习到,因此在三台DNS服务器上添加了6.6.6.6/32也能被R1路由器学习到。而我们都知道ospf协议是开放最短路径最优协议,也就是在邻居里面会计算出最近的邻居,一般这个路径是根据路由跳数计算,而三台DNS处于一个路由内网中,因此就只需要记录谁最先响应hello组播消息,那么谁就是最近的邻居。因此就有了每次请求6.6.6.6的时候,都是DNS1响应。而如果DNS1断开以后则是DNS2响应。这样就通过路由协议以实现一个均衡负载的场景。
在lookback回环网卡上添加6.6.6.6/32是因为lookback网卡的状态永远是up的,即是没有配置地址,他都会存在,这就保证了服务的可用。另外就是将相同的IP添加到lookback上就不会存在IP冲突的情况,因为回环地址只会作为主机解析使用,它不会讲任何数据传输给网络接口。也就是说要访问本机的6.6.6.6/32其实是通过了网卡eth0或者eth1入口,然后解析到回环上的。所以就不存在同一局域网内IP冲突的情况。

缺点

讲了这么多anycast的部署以及优点,但它有一个致命的弱点,那就是因为它本身就是通过IP协议逐跳寻址的特性,讲数据包导向不通的目的地,但由于逐跳的路由收敛和端到端的五元组连接互相没有同步,导致anycast不能用于TCP长链接。例如在请求的过程中,数据还没返回,但DNS服务器断开,此时路由会收敛计算到其他路径,这就会导致返回路径不一致,从而造成TCP主机之间会出现断开的情况,因此anycast只适合例如UDP这样一问一答的情景,例如DNS,而且google的公共DNS就是利用了这个特性进行搭建的,只不过google搭建的是一个全球性的公共DNS,利用的是BGP边界路由协议,实现的是不通路由之间的宣告,而本例只是利用了ospf协议搭建的内网的DNS,仅仅是google公共DNS的一个很小的单元罢了。
但管中窥豹,我们通过小型的内网anycast场景的搭建也能窥视全球DNS的布局模式,这也不为一种学习方式。

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24906 人正在系统学习中

来源:水番丘山

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年2月23日
下一篇 2021年2月23日

相关推荐