DNS 问题,研究到凌晨 4 点还是没有结论...救救孩子吧

2021-08-02 04:13:43 +08:00
 waibunleung

最近看了 DNS 解析相关的内容,然后就好奇 dig 了一下公司的一些域名,发现自建了好多二级域名服务器。这么多服务器明显是为了容灾+分流,然后我就在想,DNS 服务器的高可用是怎么保证的?

于是我:
1.搜索了相关的 DNS 集群搭建,发现都是介绍 dns 主从服务器搭建的比较多,说一主多从就算是一个集群,但我觉得这点能力是不太够支撑高可用的
2. 找了下有没有相关大厂 DNS 这块的高可用设计,找到阿里的,但是关于一些细节的描述并没有,看完之后似懂非懂 -> https://zhuanlan.zhihu.com/p/115909472
3. 404 网站找了一番,也是多数关于 DNS 主从服务器的搭建,帮助不算太大

无奈的我只能在这里发帖问问大家,希望有相关经验的家人们能够点拨一下~

dns 解析这一层,是怎么保证高可用的?
用集群冗余备份大概率没跑了,但是集群内部是怎么同步数据的?集群中的每一个节点都向外提供服务吗?
一个进群可能不够,那多个集群之间又是怎么同步的呢?

真的感觉自己知道的太少了~

9410 次点击
所在节点    DNS
68 条回复
mytsing520
2021-08-02 04:46:08 +08:00
根据楼主提供的阿里文档,接下来所有都是我个人的推( che )论( dan ),如果讲的不对请指出,我没有做过这个规模的,大佬请轻喷。

回到 DNS 本身。除了提升 DNS 服务器本身的服务质量,为了确保高可用,主要通过负载均衡技术实现。你在互联网上看到的一个 IP 地址,其背后会有 N 台服务器来提供支撑。就算有一台挂了,SLB 也会马上抛弃之,确保无论如何最后至少会有一台服务器依然在提供服务。当然,真遇到了 DNS 服务器本身的故障,运维团队也不是吃素的。
同一个主域名下,多组 DNS 的部署,可确保每组 DNS 在一个较大的数据范围内,其承担的解析工作量接近相等。
至于有些厂商针对子域名单独做了 NS (比如 qq.com ),技术层面上面已经做了回答,我想更多的出于管理层面的考虑,毕竟大厂业务多,域名也多。
希望这能回答清楚你的“dns 解析这一层,是怎么保证高可用的?”这个问题。

至于同步数据,为了安全起见,首先订明管理端与实际提供解析服务的服务器分离。
DNS 管理员配置域名解析后,该结果将会保存到数据库。阿里的文档中,负责存储和下发角色的数据库,通过使用集群和多副本存档等技术手段,确保数据的可靠性。
最后,通过数据库向部署的 DNS 下发域名解析配置。文档中提及“应用机房部署与数据库解耦,可以任意机房部署”,这里的“应用机房”就是我们 dig 时看到的那些,他只需要负责接收配置结果并应用于承担外部流量,所以部署在哪里实际上只有事先会比较重要,后期按客户所在地适当调整即可。

至于文中提及的 anycast 、解析结果正确性、安全防护,则是日常应用阶段的延展了。
mytsing520
2021-08-02 04:51:28 +08:00
至于 DNS 服务本身的架构,你可以是主从架构,也可以是全主。
但在域名委派体系里面,上级域只会给下级域一个主要的服务地址。
mytsing520
2021-08-02 04:56:32 +08:00
更正:2 楼答复中,将“至于 DNS 服务本身的架构”更正为“至于 DNS 服务本身”。读着读着感觉有问题。
wd
2021-08-02 06:44:27 +08:00
没太明白楼主的点.. dns 记录挺小的,一个公司内部自己的 dns 记录一般不会很多,因为一般流量入口就是一个 nginx 之类的 lb 集群,这样比如新建一个域名的时候通过 cname 到 lb 的 dns 就行。这样一般变更其实很少,要就是 lb 加减机器的时候会有变更。
另外一个,dns 会有 ttl 的,现代一般 ttl 都很小,例如 5 分钟,那么即使集群同步有问题,也就几分钟的 cache,不会有太大问题。(当然可能会有长尾效应,但是毕竟没多少)
Ariver
2021-08-02 07:35:06 +08:00
看看网络自顶向下
说的很详细
你找的那些都是针对自己的,不是解释 DNS 整体方案的。
baozhibo
2021-08-02 08:56:30 +08:00
从网络层解决这个问题。可以了解一下 lvs 代理
huangmingyou
2021-08-02 09:26:52 +08:00
dns 主从直接有同步协议的。不过完全可以手工同步 zone 配置文件,通过 git,rsync 等同步。 有些 dns 服务器是用 mysql 做数据存储的。例如 powerdns 。
binsys
2021-08-02 09:43:47 +08:00
DNS 高可用不是用 anycast 保证嘛?
waibunleung
2021-08-02 09:48:15 +08:00
@wd 是外部的自建 DNS,不是内部的,内部的也有,但是我更感兴趣外部的。内部的全部走内部域名 rpc 的
waibunleung
2021-08-02 09:50:09 +08:00
@Ariver 具体是书里面的那一部分?
waibunleung
2021-08-02 09:50:55 +08:00
@binsys 你这个是很全局的,我想问的是自建的 NS,是怎么保证其高可用的?
Ariver
2021-08-02 10:06:26 +08:00
@waibunleung 我只记得在书的前几章,tcp 开始之前,讲到了 dns
mytsing520
2021-08-02 10:12:14 +08:00
@binsys 外面是 anycast,后面是 LB 负载
nuk
2021-08-02 10:13:51 +08:00
二级域名服务器不一定是为了分流和灾容,也可能只是为了有自己的 SOP 而已,又不是提供公共 DNS,要啥高可用,顶了天设两个 ns 地址让 dns 自己同步,你发的那个专栏就是公共 DNS,自建 DNS 根本不能比。
waibunleung
2021-08-02 10:17:40 +08:00
@mytsing520 老哥可以加个微信交流下吗?
waibunleung
2021-08-02 10:22:51 +08:00
@nuk 用户访问规模也不小,1 亿的 pv,为什么 DNS 层不需要高可用呢?我看至少是设置了 6 个 NS 。
Ariver
2021-08-02 10:26:04 +08:00
dns 本地是有缓存的
waibunleung
2021-08-02 10:37:49 +08:00
@Ariver 本地有缓存难道就不需要高可用了吗....你这样说是想说明什么问题呢?就是我知道本地有 DNS 缓存,然后呢....
nuk
2021-08-02 10:56:36 +08:00
@waibunleung 因为用户不会直接设置 DNS 为自建的 DNS 啊,多少 pv 对于自建 DNS 基本上差别不太大,DNS 本身就会流量放大,缓存是一定要的,至于设置 6 个 ns 服务器,我看是吃饱了撑的。
crystom
2021-08-02 12:25:00 +08:00
购买国内这些普通的 dns,好像没有办法做主备同步,例如同时购买 2 个云的 dns,没法兼容

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/793060

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX