1. 程式人生 > >【故障公告】升級阿里雲 RDS SQL Server 例項故障經過

【故障公告】升級阿里雲 RDS SQL Server 例項故障經過

昨天晚上,我們使用的阿里雲 RDS SQL Server 2008 R2 例項突然出現持續 CPU 100% 問題,後來我們通過重啟例項恢復了正常(詳見故障公告)。但是在恢復正常後發現了新問題,這臺 RDS 例項 IOPS 不夠用,必須要進行升級,而且當時過了 0 點也是升級的好時間,再加上我們對升級到更高版本的 SQL Server 垂涎已久 —— 因為最新的 EF Core 3.0 不支援生成 SQL Server 2008 的分頁 SQL (UseRowNumberForPaging),只是我們還沒有確定新版 SQL Server 是自己搭建還是繼續使用阿里雲 RDS ,加上現在的 RDS 例項是包年買的,所以近期沒有安排升級計劃。現在迫不得已+順水推舟,再加上阿里雲 RDS 支援直接從 SQL Server 2008 R2 升級到 SQL Server 2016,於是我們臨時決定進行升級操作。

升級操作本身很簡單,點幾下按鈕,支付一下費用,整個升級過程由阿里雲 RDS 自動完成,而且升級期間不影響現已例項的正常訪問。我們唯一擔心的是升級後新 SQL Server 例項要重新編譯大量 SQL 語句,預熱時間比較長,但是我們當時升級的話,有一夜時間進行預熱,問題應該不大。於是,在 00:22 啟動了升級,啟動升級後,從阿里雲那得知由於我們的資料庫比較大,升級時間比較長,建議我們早上再來看升級是否成功。我們又多了一份擔心,假如到明天早上也完成不了升級,到訪問高峰時舊例項支撐不住怎麼辦,阿里雲說如果到時真的完成不了升級,他們會想辦法讓就例項支撐住,於是就安心去睡覺了。

今天一大早上起床一看,升級已經完成了,而且比預想的快很多,只用了3個小時多一點。

這時發現有些不對勁,開啟很多頁面速度慢,應用日誌中很多超時錯誤,升級後的 RDS 例項 CPU 佔用居高不下。

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

對於這個異常情況,我們當即採取了主備切換的操作,操作後發現主備切換一直停在“臨時備份任務 25%”,切換無法完成,例項狀態一直處於“主備庫切換中”。

這時資料庫超時問題變得越來越嚴重,部落格後臺儲存操作多數會超時。

向阿里雲反饋,阿里雲排查後發現升級後備庫的映象沒有搭建好,無法進行主備切換,阿里雲建議我們重啟例項。

根據阿里雲的建議,我們嘗試進行了重啟例項的操作,但由於例項處於“主備庫切換中”狀態,根本不允許我們進行這個操作。

於是授權給阿里雲重啟,但重啟就好了一會,接著又出現大量資料庫操作超時問題。

8:49 從阿里雲那得知 DBA 正在重建備庫,主備切換要等備庫重建完成才能進行。

這時已經別無選擇,只剩下最後一招——升級 RDS 例項配置,悲劇的是,由於例項處於“主備庫切換中”狀態,也根本不允許變更配置操作。從阿里雲得到進一步確認,升級配置是主備一起升,也必需要等到備庫重建完成。

此時進入了最無奈無助的局面,眼睜睜地看著整個園子全面故障,卻一點辦法沒有,只能沒有任何耐心地“耐心”等待備庫重建,更讓人心碎的是這一等就等到 10:40 左右。

備庫重建完成後,我們立即嘗試升級配置,結果發現升級配置的計費有問題,配置沒有任何變動的情況下,竟然會產生1萬多的費用,似乎升級不是按我們已有的 SQL Server 2016 配置進行計算,而且按照之前 SQL Server 2008 的配置進行計算。這時,我們想到之前想嘗試的主備切換還沒做,於是,改為先進行主備切換。

11:05 進行了主備切換,11:10 主備切換完成後,全部恢復了正常,飛快的速度終於又回來了。

主備切換後,想眼看一下備庫的 CPU 佔用情況,結果發現 RDS 控制檯針對備庫的監控資料一片空白,阿里雲的監控功能偏偏在這個時候出問題了。雖然恢復了正常,看不到監控資料,我們還是有些忐忑不安。

下午 13:30 之後開始進入下午的訪問高峰時,訪問速度又開始變慢了,問題又開始出現了。看來是當前的 RDS 例項配置不堪重負,必須要升級配置,雖然現在升級計費有問題,先升級再說,但是接下來出現的問題讓我們傻眼了,在升級購買時卻提示“詢價失敗,請聯絡客服同學”,屋漏偏逢連夜雨,升級配置也無法進行,只能提交工單,乾等阿里雲解決。

14:40 左右,阿里雲解決了監控問題,備庫的 CPU 也是居高不下,的確是升級後的 RDS 例項配置不夠,唯有升級配置,但是升級配置的功能也出了問題。

現在唯有等阿里雲解決無法升級 RDS 例項配置的問題。

非常非常抱歉,沒想到這次資料庫升級也是我們搬上阿里雲到目前唯一一次資料庫升級,竟然引發如此大的故障,給大家帶來這麼大的麻煩,非常愧