维护之夜,说点故事和经验
這是學(xué)習(xí)筆記的第?2344篇文章
??
??
?人內(nèi)心的默契就是這樣,今天要寫的標(biāo)題和幾年前一模一樣,干脆在原來的基礎(chǔ)上做一些補(bǔ)充。
今晚是一個維護(hù)之夜,出于蓄勢待發(fā)狀態(tài),對于我來說,每到這個時候就會想起自己這些年熬的那些夜,還是蠻難忘的。
舉幾個自己印象深刻的維護(hù)之夜吧。
1)印象最深刻,壓力最大的維護(hù)是多套Oracle數(shù)據(jù)庫從10g升級到11g,在前期做了多輪測試,在實際操作還是碰到了不少ORA-00600的錯誤,不過前期的問題都成功化解,而在最后啟動服務(wù)的關(guān)頭,服務(wù)拋出了一個奇怪的錯誤,記得當(dāng)時情況已經(jīng)很緊急了,如果修復(fù)不了,所有的服務(wù)都要回退,當(dāng)時是滿世界的打電話求救,喚醒了全球的多個技術(shù)專家,有的定位是bug,然后在建議之下打了補(bǔ)丁,但是還是沒有效果,還找了國內(nèi)的一個前輩幫忙分析問題,最后戲劇性的是,修復(fù)的操作竟然是重新清空一下回收站,具體細(xì)節(jié)忘記了,但是這個神一樣的操作讓我們和原廠都感嘆不已,因為在當(dāng)時原廠已經(jīng)緊急開了case。?接下來的第二波壓力是關(guān)于業(yè)務(wù)異常,有些業(yè)務(wù)存在連接異常,導(dǎo)致數(shù)據(jù)庫開啟了5000連接依然連接池溢出,在這種情況下發(fā)揮了我的開發(fā)技能,快速寫了釋放連接的腳本,同時開始了代碼分析,因為我有開發(fā)的代碼權(quán)限,所以我從代碼層面去做一些分析,沒想到竟然很快找到了導(dǎo)致連接異常的代碼片段,當(dāng)發(fā)給泰國的開發(fā)團(tuán)隊時,他們還是很吃驚的。
2)有一次大型維護(hù)的時候,登錄了一套準(zhǔn)生產(chǎn)測試環(huán)境,做了下業(yè)務(wù)變更升級,沒想到線上和測試環(huán)境的模板配置不一樣,結(jié)果就想當(dāng)然在線上環(huán)境點擊了YES開始自動升級,沒想到整個線上環(huán)境開始了一系列的不可控操作,于是乎整個業(yè)務(wù)系統(tǒng)全服回退,這個事情對我們造成了很深刻的教訓(xùn),而我內(nèi)心也是很煎熬的,在幾個月的時間里都心神不寧。
3)在國內(nèi)的一次大型維護(hù),想想都是滿滿的使命感,差不多有13套環(huán)境是在1個多小時內(nèi)完成,有切換的數(shù)據(jù)庫,有做數(shù)據(jù)庫升級的數(shù)據(jù)庫,有做跨平臺遷移的數(shù)據(jù)庫,沒想到預(yù)估的3個半小時結(jié)果在1個小時以內(nèi)就全部完成了。但是戲劇性的一幕發(fā)生了,開服的時候,發(fā)現(xiàn)用戶充值失敗,結(jié)果留給我們的時間就很短了。當(dāng)時記得氣氛很緊張,領(lǐng)導(dǎo)拍板,如果10分鐘內(nèi)解決不了,就全服回退。當(dāng)時看著同事在那里手工敲一些系統(tǒng)命令,帶著壓力還多次敲錯,我趕緊在另一半開始拿出自己準(zhǔn)備的腳本開始快速排查,所幸的是在最后的關(guān)頭,定位到了問題,是一個db link的問題,本質(zhì)上還是多套環(huán)境的關(guān)聯(lián)變更導(dǎo)致,修復(fù)之后大家長舒了一口氣。
4)最無聊的一次維護(hù),就是在某國內(nèi)客戶現(xiàn)場值班,被抓壯丁安排去值班,主要就是過去充人數(shù),記得自己在椅子上擺了各種姿勢睡都不舒服,看著旁邊的外國小哥估計還沒有倒過來時差,他們在那里看《阿凡達(dá)》,后來才知道他們是特派過來的DBA,系統(tǒng)遷移之后,他們負(fù)責(zé)清理數(shù)據(jù)。
5)最帶感的一次維護(hù),是在一次大型遷移中,出現(xiàn)了性能瓶頸,導(dǎo)致服務(wù)回退,后來大家壓力都很大,因為是一套全新的技術(shù)方案,也是在原來方案無法滿足要求的前提下的改進(jìn),當(dāng)然也受到了很多原廠的質(zhì)疑,在壓力中我們開始了地毯式排除測試,記得連續(xù)幾天都是測試到后半夜,而在最后定位到問題之后,自己心里的疙瘩算是解除了,而在第二次升級的時候,記得客戶的大boss也過來了,走進(jìn)作戰(zhàn)室看到一切都很順暢,在第二天還發(fā)了表揚(yáng)信。
6)這一次可能是很有特點的維護(hù),如何擺脫常規(guī)的數(shù)據(jù)庫維護(hù)影響,比如數(shù)據(jù)庫需要重啟,可能重啟的操作需要15秒~1分鐘,如何讓業(yè)務(wù)的影響降低到2秒內(nèi)即可恢復(fù)。看起來很普通的需求如何和業(yè)務(wù)密切配合來改進(jìn),對于運維同學(xué)來說,這種維護(hù)的意義是很特別的。
7)2年前的那次維護(hù)算是在公司內(nèi)的一次練兵,算是MySQL方向的一次核心系統(tǒng)的切換,后端的運維操作是因為數(shù)據(jù)庫bug需要重啟實例,在方案設(shè)計上實現(xiàn)了整個集群的切換控制在5秒之內(nèi),過程都是有條不紊,可以用完滿來解讀。
除此之外,維護(hù)時間網(wǎng)絡(luò)故障,DDL(rename操作)無法變更,業(yè)務(wù)腳本執(zhí)行失敗,服務(wù)啟動失敗,連接池異常等問題,數(shù)不勝數(shù),這些都是平靜表象下的風(fēng)波。
當(dāng)然在這之外也有幾點老司機(jī)的告誡和建議:
1)維護(hù)時打開盡可能少的工作窗口,越是關(guān)鍵的操作,打開的窗口數(shù)量越要謹(jǐn)慎,這么考慮的一些因素主要還是跳轉(zhuǎn)到錯誤的窗口,我一般建議是打開4個以內(nèi)的窗口,而且最好是對稱的模式,方便標(biāo)記和辨別。
2)做好配置文件的備份,備份的工作在這里是重中之重,之前還碰到過一次服務(wù)異常導(dǎo)致中間件文件被刷的情況,所以有了備份才是救命稻草,另外有些備份需要注意不能太過于頻繁,盡量不要提前很多,最好是備份操作和后續(xù)的流程都是一個人能夠銜接起來,要不文件命名和備份細(xì)節(jié)會存在差異,這種差異很要命。?
3)保持體力,在維護(hù)前的夜晚是很平靜的,最好提前做好休息和能量補(bǔ)充,這個時候以能夠休息保持體力為前提,盡量不要干坐在座位等到凌晨。
4)盡可能做到雙人檢查,凌晨的操作,如果很多同學(xué)實踐過,會發(fā)現(xiàn)腦子不夠使,有時候看到自己列的計劃都感覺有些懵,所以計劃內(nèi)容要細(xì),要明確,有些描述信息的描述就要增加的清晰準(zhǔn)確,比如中間件的負(fù)載均衡,有一個操作步驟是把proxy3的服務(wù)做下變更,在這里最好把相應(yīng)的服務(wù)IP端口之類的都給清晰,到了凌晨的時候再去找,去確認(rèn)是很危險的,當(dāng)然最怕的還是自己感覺,憑猜千萬不可取。兩個人能夠做下檢查,至少在關(guān)鍵操作的時候有個照應(yīng)。
5) 對于不確定的操作,不要直接按回車,如果命令行窗口卡住或者是不確定的時候,不要先按回車,因為你不知道上一個命令是不是具有破壞力,或者是屏幕處于鎖屏狀態(tài),良好的職業(yè)習(xí)慣應(yīng)該是先按空格而不是回車。
6)通常維護(hù)操作是比較平穩(wěn)的,但是一旦發(fā)生問題,那就是緊急且重要的,這種情況下一定要沉住氣,同時也要做好最壞的打算和預(yù)案。
7)大維護(hù)變更前不接受額外的變更需求,這個舉一個例子,在一次大維護(hù)前2小時,開發(fā)團(tuán)隊提交了一個緊急修復(fù),當(dāng)時沒有在生產(chǎn)完整的測試就匆匆列入了維護(hù)清單,結(jié)果整個維護(hù)中最讓人頭痛的就是那個新增變更,新增的存儲過程執(zhí)行了2個小時,而在這2個小時內(nèi)我們想了無數(shù)的補(bǔ)救方案,而事后的分析和優(yōu)化方案可以把這個邏輯優(yōu)化到1分鐘以內(nèi)。所以按照維護(hù)流程,我們有足夠多的理由可以拒絕這種加塞需求。
8)儀式感是我認(rèn)為自己在大維護(hù)中最最重要的一個環(huán)節(jié)了,有多重要呢,我覺得準(zhǔn)備工作做到萬事俱備只欠東風(fēng)的狀態(tài),那么剩下的只能靠運氣了。而這個運氣就需要自己的一種儀式感或者默認(rèn)的習(xí)慣規(guī)則。我在大維護(hù)的時候會去買一瓶飲料,哪怕不喝也會備著,這是在早些年維護(hù)中自己的一點潛意識暗示或者說是必備的一種儀式。
當(dāng)然大多數(shù)的維護(hù)都是默默無聞的,一切正常就是最好的回答。我喜歡平靜夜晚后的清晨,陽光照進(jìn)來,感覺一切都敞亮了。
各大平臺都可以找到我
微信公眾號:楊建榮的學(xué)習(xí)筆記
Github:@jeanron100
CSDN:@jeanron100
知乎:@jeanron100
頭條號:@楊建榮的學(xué)習(xí)筆記
網(wǎng)易號:@楊建榮的數(shù)據(jù)庫筆記
大魚號:@楊建榮的數(shù)據(jù)庫筆記
騰訊云+社區(qū):@楊建榮的學(xué)習(xí)筆記
近期熱文:
我們?yōu)槭裁丛贛ySQL中幾乎不使用分區(qū)表
新年大吉 總結(jié)了如下的感想
《大江大河2》最觸動我的一段經(jīng)典對話
MySQL 8.0給開發(fā)方向帶來的一些困擾
遷移到MySQL的業(yè)務(wù)架構(gòu)演進(jìn)實戰(zhàn)
MySQL業(yè)務(wù)雙活的初步設(shè)計方案
如何優(yōu)化MySQL千萬級大表,我寫了6000字的解讀
一道經(jīng)典的MySQL面試題,答案出現(xiàn)三次反轉(zhuǎn)
小白學(xué)MySQL要多久?我整理了10多個問題的答案
轉(zhuǎn)載熱文:
2020年度20多款主流數(shù)據(jù)庫重大更新及技術(shù)要點回顧
工行“去O”數(shù)據(jù)庫選型與分布式架構(gòu)設(shè)計
MySQL 實戰(zhàn)筆記 第01期:MySQL 角色管理
MGR用哪個版本?5.7 vs 8.0
SQLcl這個可愛的小工具,來了解一下呀~
CPU占用又爆了?MySQL到底在干什么
這個MySQL優(yōu)化原理剖析,比照X光還清楚
自己動手寫SQL執(zhí)行引擎
最受歡迎的微服務(wù)框架概覽
程序員,保住你的錢袋子!
QQ群號:763628645
QQ群二維碼如下,?添加請注明:姓名+地區(qū)+職位,否則不予通過
點在看,讓更多人看到
總結(jié)
以上是生活随笔為你收集整理的维护之夜,说点故事和经验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第1章计算机系统概述__计算机系统性能评
- 下一篇: 渣画质视频秒变清晰,“达芬奇”工具集帮你