昨天晚上,我們使用的阿里云 RDS SQL Server 2008 R2 實(shí)例突然出現(xiàn)持續(xù) CPU 100% 問題,后來我們通過重啟實(shí)例恢復(fù)了正常(詳見
故障公告 <https://www.cnblogs.com/cmt/p/11461524.html>)。但是在恢復(fù)正常后發(fā)現(xiàn)了新問題,這臺(tái) RDS 實(shí)例
IOPS 不夠用,必須要進(jìn)行升級(jí),而且當(dāng)時(shí)過了 0 點(diǎn)也是升級(jí)的好時(shí)間,再加上我們對(duì)升級(jí)到更高版本的 SQL Server 垂涎已久 —— 因?yàn)樽钚碌?EF
Core 3.0 不支持生成 SQL Server 2008 的分頁 SQL (UseRowNumberForPaging
<https://github.com/aspnet/EntityFrameworkCore/issues/16400>),只是我們還沒有確定新版 SQL
Server 是自己搭建還是繼續(xù)使用阿里云 RDS ,加上現(xiàn)在的 RDS 實(shí)例是包年買的,所以近期沒有安排升級(jí)計(jì)劃。現(xiàn)在迫不得已+順?biāo)浦?,再加上阿里?
RDS 支持直接從 SQL Server 2008 R2 升級(jí)到 SQL Server 2016,于是我們臨時(shí)決定進(jìn)行升級(jí)操作。
升級(jí)操作本身很簡單,點(diǎn)幾下按鈕,支付一下費(fèi)用,整個(gè)升級(jí)過程由阿里云 RDS 自動(dòng)完成,而且升級(jí)期間不影響現(xiàn)已實(shí)例的正常訪問。我們唯一擔(dān)心的是升級(jí)后新 SQL
Server 實(shí)例要重新編譯大量 SQL 語句,預(yù)熱時(shí)間比較長,但是我們當(dāng)時(shí)升級(jí)的話,有一夜時(shí)間進(jìn)行預(yù)熱,問題應(yīng)該不大。于是,在 00:22
啟動(dòng)了升級(jí),啟動(dòng)升級(jí)后,從阿里云那得知由于我們的數(shù)據(jù)庫比較大,升級(jí)時(shí)間比較長,建議我們?cè)缟显賮砜瓷?jí)是否成功。我們又多了一份擔(dān)心,假如到明天早上也完成不了升級(jí),到訪問高峰時(shí)舊實(shí)例支撐不住怎么辦,阿里云說如果到時(shí)真的完成不了升級(jí),他們會(huì)想辦法讓就實(shí)例支撐住,于是就安心去睡覺了。
今天一大早上起床一看,升級(jí)已經(jīng)完成了,而且比預(yù)想的快很多,只用了3個(gè)小時(shí)多一點(diǎn)。
這時(shí)發(fā)現(xiàn)有些不對(duì)勁,打開很多頁面速度慢,應(yīng)用日志中很多超時(shí)錯(cuò)誤,升級(jí)后的 RDS 實(shí)例 CPU 占用居高不下。
System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout
period elapsed prior to completion of the operation or the server is not
responding
對(duì)于這個(gè)異常情況,我們當(dāng)即采取了主備切換的操作,操作后發(fā)現(xiàn)主備切換一直停在“臨時(shí)備份任務(wù) 25%”,切換無法完成,實(shí)例狀態(tài)一直處于“主備庫切換中”。
這時(shí)數(shù)據(jù)庫超時(shí)問題變得越來越嚴(yán)重,博客后臺(tái)保存操作多數(shù)會(huì)超時(shí)。
向阿里云反饋,阿里云排查后發(fā)現(xiàn)升級(jí)后備庫的鏡像沒有搭建好,無法進(jìn)行主備切換,阿里云建議我們重啟實(shí)例。
根據(jù)阿里云的建議,我們嘗試進(jìn)行了重啟實(shí)例的操作,但由于實(shí)例處于“主備庫切換中”狀態(tài),根本不允許我們進(jìn)行這個(gè)操作。
于是授權(quán)給阿里云重啟,但重啟就好了一會(huì),接著又出現(xiàn)大量數(shù)據(jù)庫操作超時(shí)問題。
8:49 從阿里云那得知 DBA 正在重建備庫,主備切換要等備庫重建完成才能進(jìn)行。
這時(shí)已經(jīng)別無選擇,只剩下最后一招——升級(jí) RDS
實(shí)例配置,悲劇的是,由于實(shí)例處于“主備庫切換中”狀態(tài),也根本不允許變更配置操作。從阿里云得到進(jìn)一步確認(rèn),升級(jí)配置是主備一起升,也必需要等到備庫重建完成。
此時(shí)進(jìn)入了最無奈無助的局面,眼睜睜地看著整個(gè)園子全面故障,卻一點(diǎn)辦法沒有,只能沒有任何耐心地“耐心”等待備庫重建,更讓人心碎的是這一等就等到 10:40
左右。
備庫重建完成后,我們立即嘗試升級(jí)配置,結(jié)果發(fā)現(xiàn)升級(jí)配置的計(jì)費(fèi)有問題,配置沒有任何變動(dòng)的情況下,竟然會(huì)產(chǎn)生1萬多的費(fèi)用,似乎升級(jí)不是按我們已有的 SQL
Server 2016 配置進(jìn)行計(jì)算,而且按照之前 SQL Server 2008
的配置進(jìn)行計(jì)算。這時(shí),我們想到之前想嘗試的主備切換還沒做,于是,改為先進(jìn)行主備切換。
11:05 進(jìn)行了主備切換,11:10 主備切換完成后,全部恢復(fù)了正常,飛快的速度終于又回來了。
主備切換后,想眼看一下備庫的 CPU 占用情況,結(jié)果發(fā)現(xiàn) RDS
控制臺(tái)針對(duì)備庫的監(jiān)控?cái)?shù)據(jù)一片空白,阿里云的監(jiān)控功能偏偏在這個(gè)時(shí)候出問題了。雖然恢復(fù)了正常,看不到監(jiān)控?cái)?shù)據(jù),我們還是有些忐忑不安。
下午 13:30 之后開始進(jìn)入下午的訪問高峰時(shí),訪問速度又開始變慢了,問題又開始出現(xiàn)了??磥硎钱?dāng)前的 RDS
實(shí)例配置不堪重負(fù),必須要升級(jí)配置,雖然現(xiàn)在升級(jí)計(jì)費(fèi)有問題,先升級(jí)再說,但是接下來出現(xiàn)的問題讓我們傻眼了,在升級(jí)購買時(shí)卻提示“詢價(jià)失敗,請(qǐng)聯(lián)系客服同學(xué)”,屋漏偏逢連夜雨,升級(jí)配置也無法進(jìn)行,只能提交工單,干等阿里云解決。
14:40 左右,阿里云解決了監(jiān)控問題,備庫的 CPU 也是居高不下,的確是升級(jí)后的 RDS 實(shí)例配置不夠,唯有升級(jí)配置,但是升級(jí)配置的功能也出了問題。
現(xiàn)在唯有等阿里云解決無法升級(jí) RDS 實(shí)例配置的問題。
非常非常抱歉,沒想到這次數(shù)據(jù)庫升級(jí)也是我們搬上阿里云到目前唯一一次數(shù)據(jù)庫升級(jí),竟然引發(fā)如此大的故障,給大家?guī)磉@么大的麻煩,非常愧疚。
【更新】
16:30 阿里云解決了升級(jí) RDS 配置的問題,我們完成了購買,RDS 實(shí)例已經(jīng)開始升級(jí)操作。
17:02 升級(jí)全部完成,16:52 開始? CPU 占用大幅下降。
17:10 確認(rèn)升級(jí)后全面恢復(fù)正常。
?
熱門工具 換一換