DNS解析的原理及其案例实际
转载自博客:DNS 解析一个地址的时候会返回多个 IP 吗?
字节二面:DNS 解析一个地址的时候会返回多个 IP 吗?
答案是不会。
本题的考察点其实就是 DNS 负载均衡。
一个域名对应多个 IP
从理论上讲,一个域名是可以对应多个 IP 的,在这种情况下,当不同的用户访问该域名时,就会访问到不同的 IP 地址。
要实现一个域名对应多个 IP 地址的效果,只需要在 DNS 解析操作平台,添加一条解析记录,将网站的域名指向服务器的 IP 地址。一般情况下,一个域名对应一个 IP 地址,也就只需添加一条解析记录即可。
如我们想要将 www.itmtx.cn
这个域名分别指向 1.1.1.1(北京电信)、2.2.2.2(上海移动)、3.3.3.3(深圳联通)三个 IP。
那么我们就可以在 DNS 服务器中配置三个 A 记录,分别为:
- www.itmtx.cn IN A 114.100.20.201;
- www.itmtx.cn IN A 114.100.20.202;
- www.itmtx.cn IN A 114.100.20.203
如果现在北京用户访问 itmtx.cn
这个域名,上海用户也在访问,两个用户虽然都访问同一个域名,但访问的 IP 地址并不相同,而是会根据 DNS 事先配置的「解析策略」将解析得到的那个 IP 地址返回给对应的访客。
每次域名解析请求都会解析出一个不同的 IP 地址返回给访客,这样就构成了一个服务器集群,并实现负载均衡的效果。不同用户就近访问不同的服务器 IP 地址,访问速度大大提升,同时也减轻了单个服务器的访问压力。同时,由于有多个备选 IP,当其中一个出现问题时,可以通过宕机切换,提高业务可用性。腾讯的DNSPOD就支持上述功能。
DNS 解析策略
常见的 DNS 解析策略包括:
- 轮询(Round Robin):DNS 服务器按顺序返回多个IP地址,实现请求的轮流分发到不同的服务器上。
- 权重(Weighted):为每个 IP 地址分配不同的权重,权重越高的服务器被选中的概率越大。
- 响应时间(Response Time):DNS 服务器可以通过测量服务器的响应时间来选择最快的服务器,将域名解析为对应的 IP 地址。
各个 DNS 解析产品可能采用的解析策略不一样,以 DNSPod 解析为例,它采用的就是权重 + 随机的策略:
基于 DNS 实现负载均衡的优缺点
基于 DNS 实现负载均衡是十分简单和有效的技术手段,它主要有以下几点优势:
- 将负载均衡工作交给 DNS,省去了网站管理维护负载均衡服务器的麻烦;
- 技术实现比较灵活,操作简单,成本低,适用于大多数 TCP/IP 应用;
- 对于部署在服务器上的应用来说,不需要修改任何代码就能实现不同机器上的应用访问;
- 很多 DNS 系统还支持基于地理位置的域名解析,可以将域名解析成距离用户地理位置最近的服务器地址,加快用户访问速度。
但基于 DNS 的负载均衡同样也存在一些弊端:
- 目前的 DNS 系统是需要经过递归服务器、顶级服务器、权威服务器以及众多缓存等多级解析的,在每一个环节都可能存在解析记录缓存。如果服务器 IP 发生变动,即使修改了 A 记录,也需要各级缓存失效后才能生效。而在解析生效前的这段时间,用户可能就会根据缓存记录访问到已经被更换过的服务器上,从而导致访问失败。
- 为了本地 DNS 服务器能够及时同步权威服务器上的最新记录,所以一般将 DNS 缓存刷新时间设置得比较小,这就会导致 DNS 频繁发起解析请求,从而造成额外的网络问题。
- DNS 本身并不具备主动监测服务器负载情况或动态调整权重的能力,不能区分不同服务器之间的性能和负载差异,不能反映服务器当前的运行状态,所以一些大型网站总是使用 DNS 域名解析作为第一级负载均衡手段,然后再通过负载均衡服务器提供更高级的负载均衡算法(比如最少连接:将请求发送到拥有最少开放连接的服务器),从而完成最终请求。
接下来我们重点讲解下一些大型网站总是使用 DNS 域名解析作为第一级负载均衡手段,然后再通过负载均衡服务器提供更高级的负载均衡算法(比如最少连接:将请求发送到拥有最少开放连接的服务器),从而完成最终请求。
这种案例
转载自博客:超级流量负载方案ospf+lvs
2. 双活负载均衡架构
2.1 方案一、利用DNS轮训
配置两套主备模式的负载均衡器,分别配置VIP A和VIP B。在DNS server测针对同一域名,同时注册VIP A和VIP B。然后在请求域名的时候,dns通过轮训返回VIP A或者 VIP B。在服务端,需要通过memcached集群来共享不同节点的内存数据。从而保证session的持久性
这里使用使用keepalived+nginx搭建一个准备切换的系统,为了给负载均衡器提供高可用,一般利用主备或者主主模式实现。主备模式即只有主负载均衡器提供负载均衡功能,当主负载均衡器出现异常时,自动切换到备负载均衡器,继续提供负载均衡功能。主主模式(也称之为双活负载均衡),两个负载均衡器同时提供负载均衡服务,全部为主模式,流量均摊到两个负载均衡设备。本文基于LVS+OSPF+Keepalived搭建了一套多活负载均衡。
keepalived会提供一个需求的VIPA出去比如:10.8.5.6,这个10.8.5.6是VIP地址,后面会路由到两个真实的nginx的地址10.8.5.7和10.8.5.8这两个地址,keepalived能够具备探活功能
当10.8.5.7的ngin后端的应用不可用了,会切换到10.8.5.8
然后dns这边配置的地址就是10.8.5.6这个地址
VIPA就是A机房的地址10.8.5.6,VIPB的地址就是B机房的地址10.8.5.66
同一个域名 www.xx.com 后面配置两个A地址解析10.8.5.6 10.8.5.66
当用户在成都访问在www.xx.com ,因为IP地址离10.8.5.6距离近,DNS服务器就将转发路由到10.8.5.6
案例2:使用DNS事项F5的负载均衡探活功能
我们现在有一个A应用分别部署在两套k8s集群中,k8s集群1的F5的IP地址是10.1.2.5 ,k8s集群2的F5的IP地址是10.2.3.5
A应用分别在在k8s集群中的service的域名是www.alertmanger.com
然后再DNS服务器中配置两条规则 www.alertmanger.com 10.1.2.5和www.alertmanger.com 10.2.3.5
A应用提供了一个健康探测是否监控的接口health
DNS服务器有类似健康探测的功能:配置探活的接口为www.alertmanger.com/health
我们来分析上,假如DNS采用轮询的策略,第一次访问www.alertmanger.com/health,解析返回的地址是10.1.2.5,这个时候DNS会范围k8s1集群,
访问的地址就是www.alertmanger.com/health ,k8s1集群的F5收到请求之后,k8s集群会把请求转发给后端的nginx或者ingerss,ingerss会对请求的域名做转发到后端的service,现在请求携带的域名是
www.alertmanger.com,有转发到后端service域名为www.alertmanger.com的应用,现在A应用在部署的时候指定service的域名未www.alertmanger.com,接下来nginx就会转发到后端的A应用
如果k81集群的A应用不可用了,访问该应用的heahlh肯定不能用,DNS就会切换到k8s2集群,通过DNS就实现了类似F5的探测功能
前提就是DNS配置的域名地址和应用部署在k8s集群中的service的域名地址要保持一致。
posted on 2023-09-14 15:41 luzhouxiaoshuai 阅读(339) 评论(0) 编辑 收藏 举报