Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | http://vearne.cc

前言

我们公司的很多服务都是完全部署在阿里云上,甚至包括很多数据库。比如Redis和MySQL

事件的经过

阿里云的Redis为了方便内网访问(其实也只能在内网访问)使用的域名形如
xxxx.redis.rds.aliyuncs.com
时间 在20xx-xx-xx 23:00 ~ 24:00
症状 发现某个服务无法访问
继而排查日志发现,我们的服务会访问Redis,但是Redis的这个域名无法解析了;在没有做任何操作的情况下,域名在24点后可以正常解析了,服务也就自然的恢复了。

排查

对比这台机器和其它机器,发现他们的DNS的配置文件风格不大像
故障机器

[root@hostA ~]$ cat /etc/resolv.conf
nameserver 119.29.29.29
nameserver 223.5.5.5
nameserver 114.114.114.114

其它阿里云机器

[root@hostB ~]#cat /etc/resolv.conf
options timeout:1 attempts:1 rotate
nameserver 10.143.22.116
nameserver 10.143.22.118

hostA的DNS文件显然是有运维兄弟修改过了,在正常情况下,hostA这样配置不会有什么问题

但是在某些特定情况下,可能会引发灾难

极端情况

此处输入图片的描述
参考资料1,描述了DNS解析的整个过程
比如我们使用119.29.29.29(DNSPOD,其实DNSPOD早就被腾讯收购了)作为Local DNS,图中的Name Server其实是域名的权威服务器,aliyuncs.com的权威服务假定是ns4.aliyun.com,明显这是阿里云的机器

极端情况1

我是假定步骤8的网络出现了异常(DNSPOD -> aliyun)
显然在这种情况下,在hostA已经不可能成功解析域名

获得域名权威服务器信息可用以下方法
AUTHORITY SECTION 即为域名的权威服务器信息

╰─$ dig aliyuncs.com

; <<>> DiG 9.9.3 <<>> aliyuncs.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64838
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 7

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;aliyuncs.com.          IN  A

;; ANSWER SECTION:
aliyuncs.com.       300 IN  A   140.205.32.8

;; AUTHORITY SECTION:
aliyuncs.com.       99637   IN  NS  ns4.aliyun.com.
aliyuncs.com.       99637   IN  NS  ns3.aliyun.com.
aliyuncs.com.       99637   IN  NS  ns5.aliyun.com.

极端情况2

如果阿里云主机到DNSPod(119.29.29.29) 出现网络故障,显然域名也就无法解析了

总结

建议如果使用了阿里云的数据库(包括Redis,MySQL),且使用了阿里云的主机的话,最好还是不要修改DNS配置文件,或者为确保万一,还是添加一下阿里的公共DNS,毕竟同一个服务商(Local DNS和域名权威服务器),网络出现风险的概率还是小一点

参考资料

  1. DNS域名解析过程

如果我的文章对你有帮助,你可以给我打赏以促使我拿出更多的时间和精力来分享我的经验和思考总结。

微信支付码

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据