本文参考资源:
全局负载均衡(GSLB)的实现方案运维奔向云计算的笨鸟的专栏-CSDN博客
每天进步一点点——负载均衡之DNS域名解析_运维_Cynric 的博客-CSDN博客
现在网站的数目非常多,如果全部用 IP 地址进行访问,恐怕很难记住。许多应用层软件经常直接使用域名系统(DNS, Domain Name System),但计算机的用户只是间接而不是直接使用域名系统。
域名系统DNS
任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。
互联网采用了层次树状结构的命名方法,域名的结构由标号序列组成,各标号之间用点隔开:
….三级域名.二级域名.顶级域名
对于我的博客 https://www.codetool.top ,top就是顶级域名,codetool是二级域名。
最左边的是主机名,通常用来表明主机的用途,比如“www”表示提供万维网服务、“mail”表示提供邮件服务,不过这也不是绝对的,名字的关键是要让我们容易记忆。
域名只是个逻辑概念,并不代表计算机所在的物理地点。
常见顶级域名
- 国家顶级域名 nTLD
.cn
表示中国,.us
表示美国,.uk
表示英国,等等。
- 通用顶级域名 gTLD
最早的顶级域名是:.com
(公司和企业).net
(网络服务机构.org
(非赢利性组织).edu
(美国专用的教育机构).gov
(美国专用的政府部门).mil
(美国专用的军事部门).int
(国际组织)
- 基础结构域名 (infrastructure domain):这种顶级域名只有一个,即
arpa
,用于反向域名解析,因此又称为反向域名。
随着互联网的发展,出现了很多新增的顶级域名,这里不谈。
注意事项
- 域名已经支持中文,不过不被广泛使用
- 域名的总长度限制在253个字符以内,而每一级域名长度不能超过63个字符。
- 域名是大小写无关的,但通常都使用小写的形式。
- 过长的域名或者过多的层次关系也会导致与IP 地址同样难于记忆的问题,所以常见的域名大多是两级或三级,四级以上的很少见。
DNS服务器
域名到 IP 地址的解析是由若干个域名服务器程序完成的。域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器。
一个服务器所负责管辖的(或有权限的)范围叫做区 (zone)。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射。DNS 服务器的管辖范围不是以“域”为单位,而是以“区”为单位。

域名服务器有以下四种类型:
- 根域名服务器:返回顶级域 DNS 服务器的 IP 地址
- 顶级域名服务器:返回权威 DNS 服务器的 IP 地址
- 权限(权威)域名服务器:返回相应主机的 IP 地址
- 本地域名服务器

根域名服务器
根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。
不管是哪一个本地域名服务器,若要对互联网上任何一个域名进行解析,只要自己无法解析,就首先求助于根域名服务器。
在互联网上共有 13 个不同 IP 地址的根域名服务器,它们的名字是用一个英文字母命名,从a一直到m(前 13 个字母),它们又有数百台的镜像,保证一定能够被访问到。
根域名服务器共有 13 套装置,不是 13 个机器。这些根域名服务器相应的域名分别是:
a.rootservers.net
b.rootservers.net
…
m.rootservers.net
到2016年2月,全世界已经在 588 个地点安装了根域名服务器,使世界上大部分 DNS 域名服务器都能就近找到一个根域名服务器。
顶级域名服务器
顶级域名服务器(即 TLD 服务器)负责管理在该顶级域名服务器注册的所有二级域名。
当收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的 IP 地址)。
权限域名服务器
负责一个区的域名服务器。
当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的 DNS 客户,下一步应当找哪一个权限域名服务器。
本地域名服务器
本地域名服务器对域名系统非常重要。
当一个主机发出 DNS 查询请求时,这个查询请求报文就发送给本地域名服务器。
每一个互联网服务提供者 ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器。
域名的解析过程
主机向本地域名服务器的查询一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。

本地域名服务器向根域名服务器的查询通常是采用迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。

域名的高速缓存
每个域名服务器都维护一个高速缓存,存放最近用过的名字以及从何处获得名字映射信息的记录。可大大减轻根域名服务器的负荷,使互联网上的 DNS 查询请求和回答报文的数量大为减少。
为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器,并处理超过合理时间的项(例如,每个项目只存放两天)。
当权限域名服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。
另外,操作系统里也会对 DNS 解析结果做缓存,如果你之前访问过“www.apple.com”,那么下一次在浏览器里再输入这个网址的时候就不会再跑到 DNS 那里去问了,直接在操作系统里就可以拿到 IP 地址。
在Windows下可以在命令行模式下执行ipconfig /flushdns
命令来刷新缓存,在Linux下可以通过/etc/init.d/nscd restart
来清除缓存,
hosts文件
操作系统里还有一个特殊的“主机映射”文件,通常是一个可编辑的文本,在 Linux 里是“/etc/hosts”
,在 Windows 里是“C:\WINDOWS\system32\drivers\etc\hosts”
,如果操作系统在缓存里找不到 DNS 记录,就会找这个文件。
几种域名解析类型
A记录
最简单最常用,添加记录时候填写IP地址即可。A记录(Address)是用来指定主机名(或域名)对应的IP地址记录。通过A记录您可以将该域名指向到自己的网站服务器IP地址,同时也可以设置您域名的二级域名。
MX记录
是Mail Exchanger
的缩写,意思是邮件交换记录。它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。例如,当Internet上的某用户要发一封信给 user@vipiis.com时,该用户的邮件系统通过DNS查找vipiis.com这个域名的MX记录,如果MX记录存在, 用户计算机就将邮件发送到MX记录所指定的邮件服务器上。
CNAME记录
也被称为别名记录,是双线智能解析和使用CDN加速必须用到的解析方法。CNAME解析通常是一个三级域名地址,您可以在主机管理后台"绑定域名"位置看到cname解析地址的信息提示,不同服务器会使用不同的cname解析地址。通过cname解析,可以让域名捆绑到多个服务器IP地址,需要注意的是cname解析地址后面有个英文“.”符号。
通常来说,别名解析可以提供更大的灵活性,便于统一管理。举个例子来说,当主机因各种因素的影响需要更换IP时,如果域名做了CNAME记录,就可以同时更新别名的解析指向,不用需要进行新的解析操作,也就是说可以做到无缝更换IP,这对实际中IP的维护是很实用的。而且对于双线主机来说,电信和联通有不同的接口对应不同的IP,由于A记录只能指向一个IP,这时采用别名解析就可以很好的解决这个问题。当然了CNAME记录也存在一定的不足,很多人认为不同的IP会对网站优化产生一定的影响,当搜索引擎爬虫每次爬行的时候,IP变化容易让爬虫产生网站不稳定的误解。不过见仁见智,到底好不好还需要自己去判断。
NS记录
是域名DNS服务器记录,全称Name Server记录,用来指定该域名由哪个DNS服务器来对您的域名进行解析。您注册域名时,总有默认的DNS服务器,每个注册的域名都是由一组DNS域名服务器来解析的。
TXT记录
一种文本记录,仅用于对主机名或者域名的记录信息,对解析无实质影响。
TTL值
全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上缓存时间。默认即可。
基于DNS的负载均衡
这里先谈谈什么是内部负载均衡(SLB)和全局负载均衡(GSLB)?
SLB(Server load balancing)是对集群内物理主机的负载均衡,而GSLB是对物理集群的负载均衡。这里的负载均衡可能不只是简单的流量均匀分配,而是会根据策略的不同实现不同场景的应用交付。
GSLB是依赖于用户和实际部署环境的互联网资源分发技术,不同的目的对应着一系列不同的技术实现。
内部负载均衡
使用DNS实现内部负载均衡较简单,直接将域名解析到多个IP地址,下面是利用DNS工作原理处理负载均衡的工作原理图:

由上图可以看出,在DNS服务器中应该配置了多个A记录,如:
www.apusapp.com IN A 114.100.20.201;
www.apusapp.com IN A 114.100.20.202;
www.apusapp.com IN A 114.100.20.203;
全局负载均衡
为了保证我们的应用高可用,往往会部署在多个机房,每个地方都会有自己的 IP 地址。当用户访问某个域名的时候,这个 IP 地址可以轮询访问多个数据中心。如果一个数据中心因为某种原因挂了,只要在 DNS 服务器里面,将这个数据中心对应的 IP 地址删除,就可以实现一定的高可用。
另外,我们肯定希望北京的用户访问北京的数据中心,上海的用户访问上海的数据中心(就近访问),这样,客户体验就会非常好,访问速度就会超快。
使用DNS实现全局负载均衡是在DNS服务器关联GSLB设备,它通过自定义的策略根据客户IP地理位置、运营商、可用集群等信息为客户分配合适的主机。

DNS劫持
域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的IP地址从而实现用户无法访问目标网站的目的或者蓄意或恶意要求用户访问指定IP地址(网站)的目的。
如何解决?使用可靠的DNS服务。
原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/%e8%ae%a1%e7%bd%91%e5%a4%8d%e4%b9%a006-%e5%ba%94%e7%94%a8%e5%b1%82%e4%b9%8b%e5%9f%9f%e5%90%8d%e7%b3%bb%e7%bb%9fdns/