一个由于网络问题导致的服务无法使用——调试过程总结
欢迎和大家交流技术相关问题:
- 邮箱: jiangxinnju@163.com
- 博客园地址: http://www.cnblogs.com/jiangxinnju
- GitHub地址: https://github.com/jiangxincode
- 知乎地址: https://www.zhihu.com/people/jiangxinnju
最近测试经常让我处理一个问题,就是网站服务无法使用,通过Windows跳转机,使用Chrome浏览器访问服务首页,页面什么也没有展示,使用Chrome的F12调试窗口,发现并没有和服务端SLB的任何交互请求。查看后台门户的相关进程,均正常运行。查看后台日志,没有发现明显的错误。访问SLB的页面管理系统,发现所需服务均正常注册。定位无果后所以尝试重启,不定次数重启之后,清除浏览器缓存,继续登录,发现服务又能够正常访问。但是再次重启后,问题复现。
各个服务节点,包括双机SLB节点均是混合网卡,同时绑定大网地址(10开头)和小网地址(192开头),SLB的浮动IP地址为小网地址。考虑到可能是网络问题,但是跳转机只有一台,无法通过更换跳转机的方式,查看服务是否正常,同时因为在该组网中所有服务均使用SLB进行控制,无法通过在该跳转机中访问其他服务地址确定是否是跳转机问题。
使用ping命令,发现各个服务节点与SLB节点均能正常通信,跳转机与SLB也能正常通信,但是考虑到ping命令无法指定端口,仍无法确定跳转机与SLB之间的网络正常。于是想到了古老的telnet。首先使用ifconfig查看浮动IP绑定到哪台SLB节点上,两台均没有绑定,很奇怪,通过下面的文章了解到浮动IP无法使用ifconfig命令查出,然后按照文章中的说明使用ip addr命令找到浮动IP属于两台SLB中的A节点。
从ip addr add和ifconfig的区别看linux网卡ip地址的结构:http://blog.csdn.net/dog250/article/details/5303542/
尝试在跳转机通过telnet命令(telnet 192.XXX.XXX.XXX YYYY
)登陆SLB节点的A节点(为方便叙述,今后指到的SLB节点均是指其中的A节点),发现无法连接,查看SLB节点发现telnet服务未正常开启,于是根据下面的文章,开启了telnet服务。
如何启动linux的telnet服务:http://www.cnblogs.com/liuyou/archive/2011/10/17/2214498.html
之后继续尝试使用跳转机通过telnet命令登陆SLB节点,发现仍然无法连接,于是尝试使用某个服务节点用telnet去连接SLB节点,这回有提示信息,要求输入用户名,说明SLB节点的telent服务正常启动。在SLB节点尝试使用tcpdump命令进行抓包(tcpdump -i eth1 -nn port XXXX
),也发现当使用服务节点telent登陆时发现有请求包,使用跳转机节点登陆时未发现请求包。由此确定是跳转机和SLB节点之间通信异常。
但是问题仍然没有彻底解决,仍然存在下面的问题:
- 安装方式按理说能够保证各个小网见的机器的正常网路连接,为什么会出现访问异常的情况?
- 如果是网路异常,为什么重启几次后可能恢复正常?
- 指定端口,SLB节点和跳转机节点无法正常访问,为什么ping的时候可以正常ping通?而且可以双向ping通?
这些问题需要慢慢分析了。
注:为保护公司信息,文中的部分内容与实际情况有差异。
额外的参考链接:
- Linux tcpdump命令详解: http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html
- 超级详细Tcpdump 的用法: http://www.cnblogs.com/maifengqiang/p/3863168.html