【故障公告】週五下午的一次突發故障

部落格園團隊發表於2022-02-18

非常抱歉,今天下午 16:30-17:15 期間,由於出現突發故障,造成園子無法正常訪問,由此給您帶來麻煩,請您諒解。

故障經過如下:

16:30 開始,Kubernetes 叢集上部落格站點的部分 pod 出現請求執行時間慢(5-10秒)的問題。

16:43 開始,請求執行時間慢的問題更加嚴重,開始出現執行時間超過10秒的請求。

16:50 開始,出現大量資料庫連線超時的日誌:

System.Data.SqlClient.SqlException (0x80131904): Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

同時資料庫伺服器的 CPU 從正常時期的 30% 以下飆升至 45% 多。

這時我們判斷資料庫伺服器可能會超載,於是做了一個艱難的決定——按下“高速中換輪胎”的緊急按鈕,啟動了資料庫的主備切換。

16:55 左右完成主備切換,但資料庫的主備切換會造成 pod 因健康檢查失敗而重啟,在訪問高峰的高併發請求下,重啟後的 pod 很容易出現不堪重負的無奈情況。

直到 17:10 左右才基本恢復。

最後剩下一款體質較差的 pod,重啟後一接入負載總是不堪重負,落到它上面的請求就響應緩慢,拿它一點辦法沒有。

後來,急中生笨方法,既然體質弱的現實無法改變,那就接受這個現實,不讓它幹活就行,怎麼讓它不幹活呢?在舊 pod 被刪除之後與新 pod 啟動完成健康檢查之前,這個階段 pod 是不幹活的,只要讓它一直處在這個階段就行。於是盯著這款 pod,一等它完成健康檢查有負載進來就刪除它,用這個笨方法熬過訪問高峰,體質弱的 pod 就能繼續幹活了。

(故障完)

相關文章