JAVA程序日志提示202.106.199.xx IP报错的解决方法

在本次故障检查中,发现有部分tomcat实例在重启后会报 202.106.199.38:4099 IP绑定失败的错误,如图所示


然后网上搜索了下IP相关信息,发现类似的情况比较多,集中在202.106.199.34 202.106.199.35 202.106.199.36 202.106.199.37 202.106.199.38 这几个IP上,各类端口都不相同,PING这些IP主机均在线,在尝试对IP做反向解析时定位到了 bta.net.cn 相关的域名,后经过查询域名归属为中国联通北京分公司的网址导航网站。

 
继续分析,在以往这类运营商网址通常是出现在用户输错网址的情况下会出现提示,和开发沟通,确认4099是tomcat集群session共享使用到的接收端口,那么很可能tomcat在启动过程中是对不存在的域名做了解析,导致解析到了错误的IP和端口上,导致绑定失败,无法启动,在尝试使用example.com 解析时却发现并不存在问题,而在后续的尝试中只输了个www,却发现出现了以下情况

 在2次解析测试中,www 主机名居然会有一定的概率被解析到202.106.199.37上,也可能是相邻的IP,可确定有DNS负载均衡,继续测试发现bbs,master 这类英文单词,非完整域名也会出现类似的劫持现象,继续

 

在这里可以看到,用curl 测试会返回网页代码跳转到北京DNS错误页面,可以看到北京联通的DNS对错误的域名做了纠正提示。

至此,已确定问题所在了,在tomcat参数配置中,开发使用了默认的主机名标识,服务在启动过程中进行了域名解析,正好北京联通DNS有纠错提示,将对应的关键词解析出错误的IP,tomcat在获取到的IP和本机不一致提示绑定失败,无法启动,因为不是每次都能成功解析,所以才出现了部分实例正常,部分实例不正常的现象,同理,在其它应用如hadoop,nginx,php这些如果未正确配置主机名参数,也会出现类似现象。

问题的解决办法
1. 更换服务器的DNS,北京联通默认的202.106.196.115 DNS均存在此问题,改为为202.106.46.152后问题解决(这个DNS的IP反向记录有vipdns标识,看来还有区别对待)
2. 和开发商议,在以后的变更或修改软件配置时,需注意默认主机头参数的正确配置.
3. 对于部分应用,做好本地hosts文件解析,如hadoop部署通常就要求写本地hosts记录.