DNS协议
- DNS 是网络世界的地址簿,可以通过域名查地址,因为域名服务器是按照树状结构组织的,因而域名查找是使用递归的方法,并通过缓存的方式增强性能。
- 在域名和 IP 的映射过程中,给了应用基于域名做负载均衡的机会,可以是简单的负载均衡,也可以根据地址和运营商做全局的负载均衡。
DNS服务器:记得住网站的名称,但是很难记住网站的 IP 地址,因而也需要一个地址簿
由此可见,DNS 在日常生活中多么重要。每个人上网,都需要访问它,但是同时,这对它来讲也是非常大的挑战。一旦它出了故障,整个互联网都将瘫痪。另外,上网的人分布在全世界各地,如果大家都去同一个地方访问某一台服务器,时延将会非常大。因而,DNS 服务器,一定要设置成高可用、高并发和分布式的。于是,就有了这样树状的层次结构。
DNS 解析流程
DNS解析域名的过程其实是一个自顶向下的过程
- 电脑客户端会发出一个 DNS 请求,在本地DNS服务器中进行要访问的网址的地址薄的查找。如果是通过 DHCP 配置,本地 DNS 由你的网络服务商(ISP),如电信、移动等自动分配,它通常就在你网络服务商的某个机房。
- 在本地DNS服务器中回有客户端请求域名的相应ip的记录
- 如果有,就直接返回ip地址
- 如果没有,本地 DNS 会去问它的根域名服务器
- 根 DNS 收到来自本地 DNS 的请求,发现后缀是 .com,这个域名是由.com 区域管理,转向顶级域名服务器。
- 本地 DNS 转向问顶级域名服务器,顶级域名服务器比如 .com、.net、 .org 这些一级域名,它负责管理二级域名,比如 163.com,所以它能提供一条更清晰的方向。
- 顶级域名服务器回复 www.163.com 区域的权威 DNS 服务器的地址
- 本地 DNS 转向问权威 DNS 服务器
- 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
- 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。
总结一下就是:本地DNS缓存-》本地DNS服务器(运营商)-》根域名服务器(.com)-》顶级域名服务器(163.com)-》权威域名服务器-》权威服务器回复ip地址给本地DNS-》本地DNS返回ip给客户端
DNS 内部负载均衡
例如,一个应用要访问数据库应该配置域名,因为一旦这个数据库,因为某种原因,换到了另外一台机器上,而如果有多个应用都配置了这台数据库的话,一换 IP 地址,就需要将这些应用全部修改一遍。但是如果配置了域名,则只要在 DNS 服务器里,将域名映射为新的 IP 地址,这个工作就完成了,大大简化了运维。
在这个基础上,我们可以再进一步。例如,某个应用要访问另外一个应用,如果配置另外一个应用的 IP 地址,那么这个访问就是一对一的。但是当被访问的应用撑不住的时候,我们其实可以部署多个。但是,访问它的应用,如何在多个之间进行负载均衡?只要配置成为域名就可以了。在域名解析的时候,我们只要配置策略,这次返回第一个 IP,下次返回第二个 IP,就可以实现负载均衡了。
DNS 全局负载均衡
**全局负载均衡,就是就近访问原则。**为了保证我们的应用高可用,往往会部署在多个机房,每个地方都会有自己的 IP 地址。当用户访问某个域名的时候,这个 IP 地址可以轮询访问多个数据中心。如果一个数据中心因为某种原因挂了,只要在 DNS 服务器里面,将这个数据中心对应的 IP 地址删除,就可以实现一定的高可用。
DNS 访问数据中心中对象存储上的静态资源
- 访问 object.yourcompany.com,需要将域名转换为 IP 地址进行访问,所以它要请求本地 DNS 解析器。
- 本地 DNS 解析器先查看看本地的缓存是否有这个记录。
- 如果本地无缓存,则需要请求本地的 DNS 服务器。
- 本地的 DNS 服务器一般部署在你的数据中心或者你所在的运营商的网络中,本地 DNS 服务器也需要看本地是否有缓存,如果有则返回
- -7. 如果本地没有,本地 DNS 才需要递归地从根 DNS 服务器,查到.com 的顶级域名服务器,最终查到 yourcompany.com 的权威 DNS 服务器,给本地 DNS 服务器,权威 DNS 服务器会返回真实要访问的 IP 地址,返回ip地址时候有两种负载均衡方案。
- 不需要做全局负载均衡
- yourcompany.com 的权威 DNS 服务器可以直接将 object.yourcompany.com 这个域名解析为一个或者多个 IP 地址,然后客户端可以通过多个 IP 地址,进行简单的轮询,实现简单的负载均衡。
- 需要做全局负载均衡 主要针对:跨地域跨运营商的大型应用
- 本地DNS通过层层递归的方式,到权威DNS,权威DNS通过CNAME,返回给本地DNS,让DNS到第一层GSLB去解析CNAME的IP
- 两层GSLB,先找运营商,再找地理位置
- 第一层 GSLB,通过查看请求它的本地 DNS 服务器所在的运营商,就知道用户所在的运营商。假设是移动,通过 CNAME 的方式,通过另一个别名,告诉本地 DNS 服务器去请求第二层的 GSLB。
- 第二层 GSLB,通过查看请求它的本地 DNS 服务器所在的地址,就知道用户所在的地理位置,然后将距离用户位置比较近的 Region 里面,六个内部负载均衡(SLB,Server Load Balancer)的地址,返回给本地 DNS 服务器。
- 本地 DNS 服务器将结果返回给本地 DNS 解析器。
- 本地 DNS 解析器将结果缓存后,返回给客户端。
- 客户端开始访问属于相同运营商的距离较近的 Region 1 中的对象存储,当然客户端得到了六个 IP 地址,它可以通过负载均衡的方式,随机或者轮询选择一个可用区进行访问。对象存储一般会有三个备份,从而可以实现对存储读写的负载均衡。
- 不需要做全局负载均衡