内网集群 无法通信_记一次集群内无可用http服务问题排查
記一次集群內無可用http服務問題排查
1.摘要
前一陣子發現服務會有偶發的服務不可用的情況,記錄一下這個問題的排查過程。
現象是這樣的:每天到了某個時間點,就會出現服務不穩定的情況,偶發接口調不通。
線上業務使用了lvs-nginx-tomcat三層結構,首先查看tomcat監控,沒有什么特別異常的情況,響應時間和錯誤碼沒發現有什么異常,CPU、IO等等指標也都正常。
再查看nginx上的監控,發現在某個時刻這個服務的5xx報錯突增,大概7、8秒之后又恢復了。
繼續在nginx服務器上找線索,發現Nginx在那個時間點會出現報錯:
1
2
2015/12/24 10:30:38 [error] 13433#0: check time out with peer: 10.79.40.1xx:80
線上nginx會每秒探測后端所有服務器的某個uri,如果返回的http狀態碼是200則認為正常,連續3次探測失敗則摘除探測失敗的服務器,直到探測成功再恢復。
從日志中可以發現nginx在出問題的時間點對于后端所有tomcat的探測請求都出現了問題,導致摘除了所有后端服務器,在這段時間里請求會報502異常。
從nginx上的日志可以看到探測請求沒有返回,那么請求實際發到tomcat了沒有?線上業務中的探測頻率是1s/次,于是到tomcat的訪問日志里查找線索,過濾一個nginx對tomcat的所有探測請求:
可用看出從7:00:10-7:00:40左右的探測請求是有丟失的。
前端機的負載并不高,于是我們第一時間認為這可能是nginx到tomcat服務器的網絡有問題。統計了一下線上日志,出問題的機器集中在某個網段,并且集中在一天之內的某幾個時間點,這似乎也進一步印證了我們的猜測。
但到此為止僅僅是懷疑,為了證明我們的猜測,我們嘗試去復現問題。我們在nginx上部署了一個簡單的腳本,用curl命令對同樣的tomcat發起每秒一次的請求,但結果比較詭異:
監測方式
監測地址
http版本
頻率
所在服務器
目的服務器
問題
nginx
/
1.0
1s
nginx
tomcat
有
curl
/
1.0
1s
nginx
tomcat
無
這跟我們之前的猜測不一致,沒辦法,嘗試在兩端抓包查看網絡狀況,
tomcat抓包:
nginx抓包:
tomcat服務器在7:00:10已經接收了請求并且回復了ACK,7:00:13 nginx超時主動斷開連接,7:00:15時tomcat才返回數據,網絡的問題被排除了。
http://www.kuqin.com/shuoit/20160201/350382.html
http://chenpipi.blog.51cto.com/8563610/1682450
本文轉自Tenderrain 51CTO博客,原文鏈接:http://blog.51cto.com/tenderrain/1901963,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的内网集群 无法通信_记一次集群内无可用http服务问题排查的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python简易版成绩管理系统_Pyth
- 下一篇: flag在java怎么用_JAVA fl