图解 DNS 域名解析与负载均衡

DNS 查询 篇中,主要是根据阮一峰老师的文章所做的学习记录。讲述了通过命令 dig 来跟踪域名的查询过程,也提到了 DNS 服务器的层级结构、DNS 记录、DNS 缓存等。整体都是文字叙述,读起来会稍微有些累。这篇会通过图示来进一步简化 DNS 的解析过程,并会提到 DNS 的另一项重要作用,负载均衡

DNS 服务器层级结构

首先我们来了解一下 DNS 服务器。主要有三种类型的 DNS 服务器:

  • 根 DNS 服务器,它知晓顶级域名 DNS 服务器地址,全球只有 13 台。

  • 顶级 DNS 服务器,它知晓次级域名 DNS 服务器地址,也就是权威服务器。

  • 权威 DNS 服务器,返回主机 ip。

DNS 服务器的层级是树状结构,如下图所示:

Xnip2020-10-25_15-49-46.jpg

DNS 域名解析

假设我们需要在浏览器上访问 https://www.baidu.com 网页,浏览器识别到访问的是个域名而不是 ip 地址时,会开始发起域名解析的过程。用户电脑上运行着 DNS 应用客户端,我们把它叫做本地 DNS 解析器。

首先我们先来回顾一下域名解析的整个过程,稍后会以图示的方式展现。

  1. 首先浏览器会查找缓存中是否有 https://www.baidu.com 对应的 ip 地址。如果有,皆大欢喜,直接返回,就可以进行 http 请求的发送了。如果没有,那么进行下一步。

  2. 委托 DNS 解析器进行解析。DNS 解析器查找操作系统中的缓存,如果有则直接返回,若没有到下一步。

  3. 查找本地 hosts 文件,是否有配置该域名对应的 ip。若有,则返回该 ip。

  4. 如果前 3 步都没获取到,则请求本地 DNS 服务器。它也会先查本地缓存,若没有则向根域名服务器发起查询。

本地 DNS 服务器地址会配置在本机。如果是采用 DHCP 动态获取 IP 地址的方式,那么一般会被配置为网络运营商的 DNS 服务地址;或者可以自己配置为非权威 DNS 服务器地址,比如 google 的 8.8.8.8

那么它如何知道根域名服务器的地址呢?很简单,根域名服务器数量少,其地址会配置在本地 DNS 服务器中。

  1. 接着,本地 DNS 服务器向根域名服务器查询 .com 域名的地址。根域名服务器管理顶级域名服务器的地址,比如 .com/.cn/.net/.org,然后返回对应顶级域名服务器的地址。

  2. 然后,本地 DNS 服务器又会向顶级域名服务器发起查询。Hi,哥们,baidu.com 域名的地址是多少?顶级域名服务器查找一番,返回权威域名服务器的地址。

  3. 本地 DNS 服务器继续像权威服务器发起查询。Hi,小哥哥,www.baidu.com 的 ip 地址是多少?这时,权威域名服务器会返回自己管辖区域内这台主机的 ip 地址。

  4. 本地 DNS 服务器收到返回的 IP 地址,缓存到本地,返回给 DNS 解析器。解析器也会将结果缓存一份,然后返回给浏览器。

  5. 浏览器收到结果,也会进行缓存。至此,就完成了域名查询,拿到了 IP 地址。

整体流程如下图所示,其中白色箭头表示查询方向,绿色箭头表示返回方向。

image.png

负载均衡

DNS 的另一个作用是做负载均衡,Server Load Balance

简单负载均衡

最简单的一种应用情况,在 DNS 服务器上配置某个域名对应的 ip 时,可以配置多个 A 记录,即一个域名对应多个 ip。这里可以配置不同的策略。

  1. 返回全部 ip

当客户端请求域名解析时,DNS 服务器返回全部 ip 地址。客户端拿到多个 ip 后可进行轮询,或者是随机选择一个 ip,或者是按照某种算法选择一个 ip 进行请求。

  1. 轮询返回 ip

假设配置了 ip1, ip2, ip3 三个地址。第一次请求返回 ip1,第二次请求返回 ip2,以此类推。

  1. 根据设置的权重返回 ip

设定各个 ip 的权重,优先返回权重大的 ip。

全局负载均衡

另外一种复杂的应用情况,做全局的负载均衡,即 GSLB,Global Server Load Balance。全局上可分为运营商和区域,在同一个运营商上进行访问肯定速度更快;同样,请求的服务器距离客户端越近,速度越快。

那全局负载均衡如何实现呢?跟添加中间层的思想差不多,经过中间层 GSLB 来控制负载均衡策略。下面介绍两种方式。

  1. 添加 NS 记录,GSLB 充当权威 DNS 服务器

具体做法是,在权威 DNS 服务器上给目标域名配置一条 NS 记录,A → B,即 A 对应的域名服务器地址为 B,也就是 GSLB 的地址,让 GSLB 来充当权威域名服务器

当 DNS 解析 A 域名时,会返回设置好的 B。这样本地 DNS 服务器就会转到请求 B 也就是 GSLB 去进行域名解析,GSLB 就可按照某种策略进行负载均衡计算,比如根据本地 DNS 服务器的所属运营商和本地 DNS 服务器的位置返回合适的 ip。

假设查询的目标域名为 http://www.company.com,设置一条 NS 记录为 http://www.company.com → http://www.companyOk.com。那么当查询 www.company.com 时,DNS 服务器会返回 www.companyGSLB.com。然后本地 DNS 服务器会去请求 www.companyGSLB.com DNS 服务器,让该权威域名服务器去解析 www.company.com 域名,返回合适的 ip 地址。这样,控制权就交到了 www.companyGSLB.com 手上,具体策略可以由它自己来确定。

但是这种方式只能知道本地 DNS 服务器所属的运营商和 ip 地址,而不是客户端的 ip。

流程如下图所示:

image.png
  1. 添加 CNAME 记录

通过给域名添加别名的方式来实现,有两种不同的方式。

a. 设置别名后,再通过 http 重定向

给目标域名 A 配置别名 CNAME,也就是 GSLB 的域名。这样请求解析 A 域名时会返回 CNAME 记录,之后本地 DNS 服务器会转为请求 GSLB 的域名,最后返回 GSLB 的 ip 地址。

这样,客户端就会跟 GSLB 进行通信,GSLB 可以知道客户端的 ip 地址,进而根据一系列的策略进行调度,然后利用 http 重定向将客户端定向到合适的地址。

流程如下图所示:

image.png

b. 设置别名,通过 NS 记录转到不同的 GSLB 域名服务器

给目标域名设置别名,对别名设置 NS 记录,转到不同的 GSLB 去查询。

举个栗子:比如在 company.com 的权威服务器上给域名 test.company.com 设置别名 hello.test.comany.com。

当本地 DNS 服务器请求解析 test.company.com 时,流程如下:

  1. 经过一系列过程后,company.com 权威 DNS 服务器会返回 hello.test.comany.com,告诉本地 DNS 服务器去解析该域名。

  2. 本地 DNS 服务器进而去请求解析 hello.test.comany.com 的域名。company.com 的权威 DNS 服务器会配置一条 NS 记录,对应 hello.test.comany.comxx.GSLB1.com,告诉本地 DNS 服务器去 xx.GSLB1.com 去解析域名。

  3. 由于 xx.GSLB1.com 就是全局负载均衡服务器,它就可以根据客户端本地 DNS 服务器所在的运营商/位置返回合适的 ip。

流程图如下:

image.png

这里只有一层 GSLB,也可以有多层。假设第一层 GSLB 是用来区分运营商,第二层 GSLB 是区分区域。

比如本地 DNS 服务器所在运营商是移动,那么在 xx.GSLB1.com 就可返回另一个别名 yd.test.comany.comyd.test.comany.com 也对应一条 NS 记录,yd.test.comany.comxx.GSLB2.com,这样就将 yd.test.comany.com 转到第二层 GSLB 去解析。GSLB2 就可根据本地 DNS 服务器的位置返回距离用户较近区域的 ip。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345