Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://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域名解析过程

请我喝瓶饮料

微信支付码

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注