一,问题描述
公司一个服务正常更新,最后启动失败,日志提示mybatis连接错误,重新发布后也是同样错误。
二,排查过程
在确定数据库正常后,请开发一起排查。开发说这个是个链接库的问题,之前遇到过,多试几次就可,然后重启3次后,还是不行;然后开发再次看日志,说这个服务重启过程中要访问一个我们存放在七牛的文件,并加载到带内存中,以便修复mybatis错误,然后给了一个地址,我在这个机器上wget了下,确认无法下载这个文件。
测试了其中两台服务器都无法访问这个文件;服务器访问ping telnet其他公网服务器都正常;就是七牛这个地址异常;由于之前修改dns,所以把dns配置换默认配置,结果还是无法访问;但是dns可以正常解析,只是telnet 和ping 无法成功。

三,第三方介入
把问题现象上报给ISP和七牛;ISP反馈可以在我们服务器网关(服务器配置公网IP)正常访问到这个地址;七牛反馈说数据请求返回已经到达ISP内网了。

四,再次排查dns
然后ISP建议修改dns 为 114.114.114.114 ,修改后服务器访问正常了!!!但是我们我们内部服务是使用的内部dns进行域名解析的,因此修改这个地址不行(配置3个dns,第三个dns为 114这个也出现解析成功,但是无法访问的问)。
难道是我们内部dns问题? 不应该啊,之前测试ping的时候,确认可以正常解析,只是ping不同,应该是网络问题;登录到配置同样dns的其他服务器,发现可以正常访问,确认dns服务器是OK的。

五,问题确认
该服务部署了3台服务器,前2台都异常,于是看看剩下一台是不是也有异常,结果剩下1台服务器是正常的!!! 再一次说明dns是正常的。于是比较三台服务器网络配置:1,网关一样;2,网卡配置一样。但是route -n 发现路由不一样。
正常情况下是:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 72.111.111.177 0.0.0.0 UG 100 0 0 em2
72.111.111.176 0.0.0.0 255.255.255.240 U 0 0 0 em2
异常情况下是:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 72.111.111.177 0.0.0.0 UG 100 0 0 em2
72.0.0.0 0.0.0.0 255.255.255.240 U 0 0 0 em2

同时dns服务器解析出来的七牛的域名都是 72 开头的。确认是路由配置错误(72.111.111.176 为网络号),于是手动删除错误路由,添加正确路由,服务访问正常。

五,原因分析
由于七牛根据用户来源,返回一个里用户最近的一个地址给用户,因此返回了一个和我们服务器在一个大网段 72开头的 72.xxx.xxx.xxx的地址。由于我们路由配置问,系统认为 72.xxx.xxx.xxx 属于 72.0.0.0 这个网络,并且和我们服务器在一个网络内,因此采用广播进行访问,而没有通过网关去访问,因此出现了网络无法访问的情况。