某局點升級(nginx變ats,同時去掉前端的nginx負載層),升級之後服務就不正常,硬生生的看着十幾萬連接,沒有流量,各種排錯,可謂是把心提到嗓子眼驚心動魄的半小時,雖然做了很好的業務機制,服務不正常用戶可以直接回源,不過對於我們的流量而言肯定是個鋸齒了,回顧一下排查過程。
升級過程不說了,升完後對業務配置、健康心跳、磁盤設置、本地回源DNS簡單做了檢查,沒發現問題。接下來就是切流量過來,前端的DNS按照域名哈希將請求分發過來,流量迅速到了100M還在上升,連接數到了幾萬(域名質量不好,很多動態的,所以也算正常),但過了幾分鐘流量驟降,一直降到了幾M,觀察連接數沒降反升,內存幾乎吃滿。
(當前連接數)
(進出流量及cpu、內存、tcp重傳1秒刷新動態監控圖,內存越跑越滿,tcp重傳越來越高)
神經馬上緊張起來了,先檢查DNS是否正常,因爲本地回源DNS如果壞掉,會出現這種攢了大量連接無法服務的情況,然而測試發現本地回源DNS服務正常,看來不是簡單問題,crt打開多個窗口,開始監測:
tailf /var/log/messages |grep kernel 沒有報錯,系統層面應該沒什麼問題。
tailf /opt/ats/var/log/trafficserver/diags.log 沒有明顯報錯,只是過一段時間會提示連接太多,丟棄連接,說明業務肯定是不正常了,不過定位不了是哪裏的錯誤。
tstop打開後查看整體的情況,發現正常刷新,但是每次刷新有些數據不能正常顯示,內存緩存和硬盤緩存的容量都沒有顯示,爲什麼沒有顯示呢,是設置錯誤了麼,然後再去檢查磁盤設置,發現records.config內存緩存設置爲內存的一半12G,storge.config設置也沒問題,繼續檢查。
tsar –l 1 監測,磁盤IO都爲0,所有的盤都不寫盤,於是想到底是因爲沒有流量導致不寫盤的,還是寫不了盤導致沒有流量的呢,先假設不寫盤纔沒流量的吧,不寫盤有兩種情況一是盤壞了二是磁盤的權限不對,馬上檢查,發現所有的數據盤擁有者所有組均爲tserver,而且檢查了全爲裸盤,貌似沒有問題。
(權限查看後發現沒問題)
tsar –n 1 繼續檢查下歷史數據,發現ats啓動的瞬間是有流量的,緊接着流量驟降,而且磁盤剛開始是有IO的,越來越懷疑是硬盤問題但沒有證據。後來想,做個測試,乾脆不用硬盤,直接上內存,竟然有流量了,而且相對穩定,終於定位出問題了。
(將盤全部註釋掉)
繼續想,難道所有的硬盤都壞了麼,加入一個硬盤試試吧,依舊不行,繼續想下去,爲什麼tstop計算不出緩存呢,於是列出所有磁盤的大小,發現這個局點的每塊磁盤居然有將近2T左右,圖如下:
(只有一個盤是186.5G,其餘的盤都在2T)
繼續想可能是磁盤太大了,ats無法加入進來吧,於是更改使用磁盤的大小(300G),重啓ats,問題解決,鬆了一口氣,驚心動魄半小時。
(磁盤大小配置更改,直接指定大小)
(更改重啓後,業務恢復正常)
自建個人原創站運維網咖社(www.net-add.com),新的博文會在網咖社更新,歡迎瀏覽。