昨天遇到了一个端口转发致使VIP失效的问题,今天记录下当时的排查思路。git
由于要作升级,因此我删除了dokcer老容器,并启动新容器。以后访问VIP, 也就是LVS中的VIP,发现原先能够访问的站点不能访问了。github
以上是故障表现,下面是具体排查过程docker
docker logs containerId
检查docker 中的应用是成功启动的,排除应用没法启动的问题curl
curl localhost:80
由于容器是以-p 80:80
的方式启动的,因此接下来我尝试在物理机上访问本身的80端口,发现能够成功访问应用,排除了forward
没设置的问题工具
接下来,我祭出了瑞士军刀nc -l 80
, 而后在外部以VIP的方式访问,发现没法访问。 这时候怀疑是 iptables
的问题url
先作下备份,service iptables save
, 而后关掉service iptables stop
code
再起nc -l 80
, 发现很快nc进程就结束了,trace nc -l 80
找出来源包IP,发现是LVS
的心跳包。至此VIP恢复访问进程
接下来就是要找iptables里谁在搞鬼了。iptables -L
, 由于怀疑是docker在搞鬼,因此把展现出和docker有关的都删了,可是问题没有解决ip
上面我犯了一个错误,那就是觉得iptables -L
展现的是全部的规则,但其实只展现了filter
, 和转发有关的nat须要iptables -t nat -L
来展现get
把iptables -t nat -L
中和docker有关的删掉。问题解决。问题缘由是docker删除容器后没有把转发规则删除。
又重现了下这个问题,应该是docker的问题,删除实例没有把转发规则和proxy干掉。
此次排查,用到了几个工具,都是以前的积累,因此排查显得顺畅多了。主要时间花在了对iptables的不熟悉。
更多文章 http://kamushin.github.io/