记一次使用阿里云Redis出现的故障
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | 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和域名权威服务器),网络出现风险的概率还是小一点