暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DNS解析不稳定原因排查

loulou分享 2017-11-09
1341

DNS解析不稳定原因排查

一、现象

 

日常系统巡检时,发现oracle client的sqlnet.log中出现TNS-12545: Connect failed because target host or object does not exist, 该错误为client访问错误的oracle-server地址造成。在此之前,该部分由IP调整为了DNS。

二、工具以及命令

 Nohup tcpdump -i eth0 -nt -s 500 port domain -w 81dns.cap &

 Wireshark

 Strace ping

      

三、分析

1. 为啥DNS解析结果会不稳定?

  1. 通过对报错信息分析,确认oracle-client读取到错误的server主机地址,由于client输出的sqlne.log中错误信息有限,无法明确真实的server地址返回结果。(sqlnet.log的详细日志分析)

  2. 基于以上分析,决定对dns解析过程进行抓包,定位当时dns主机返回的信息。通过校对sqlnet.log的报错与网络抓包结果。发现在网络抖动时,dns的解析会出现超时,3次超时后,db.ics.jc会变成db.ics.jc.localdomain进行IP转换,此时由于dns对该域名没有配置,会返回错误信息。(oracle-clinet对DNS超时可以容错,但对错误返回没有容错机制


  3. Oracle的client端,收到错误信息后,会把错误返回作为IP地址,进行通信,造成TNS-12545错误。

2. 为啥会出现db.ics.jc会变成db.ics.jc.localdomain?

  1. 在测试环境中, /etc/resolve.conf  /etc/host.conf模拟标准DNS配置,调整resolve.conf的配置,将 172.168.71.207改为一个172.168.72.207(无该DNS地址,模拟网络访问错误)。

     

  2. 异常重现:再次通过网络抓包发现,72.207和我想的一样,会有超时(71的地址还在生效,说明有缓存,需要重启

  3.  定位localdomain来源:借助ping的解析过程,判断localdomain的来源,执行命令nohup  strace ping db.ics.jc &,通过跟踪发现node名称会影响dns的解析过程,造成在二次重试失败后,马上拼装localdomain进行后二次尝试。

     

     

  4. 验证:通过临时的hostname修改主机名,修改后,再次通过

    tcpdump -i eth0 -nt -s 500 port domain  //域名解析抓包

    strace ping db.ics.jc  //跟踪ping过程逻辑

    发现没有localdomain错误产生,hostname再次恢复localhost.localdomain时,域名解析错误再现,至此定位是hostname影响到域名解析。

四、更新步骤

1. hostname临时修改

登录root,直接执行hostname修改主机名,如下:

Hostname 新主机名

Hostname   //验证修改结果

2. hostname永久修改

   cat etc/sysconfig/network

   cp /etc/sysconfig/network /etc/sysconfig/network20171109

   Vi /etc/sysconfig/network

   

   Cat /etc/hosts

   Cp /etc/hosts  /etc/hosts20171109

   Vi /etc/hosts

   

   Reboot   //重启生效

 

五、总括:

构建好的底层机制,规范超时等异常情况下的错误处理。

构建好的应用容错处理,对于不规范的错误进行规范化处理。

 

 

 


文章转载自loulou分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论