昨天遇到了一個端口轉發致使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/