DBA線上操作要知道的那些事
根據莫非定律1:「凡是可能出錯的事必定會出錯,任何一個事件,只要具有大于零的機率,就不能夠確定它不會發生。」這句看似箴言的話,想必每個運維從業人員感觸非常深刻。本文從 DBA 線上操作的角度,談談自己的看法。
工作日,DBA 會處理大批工單;非工作日,DBA 在時刻準備著救急。亦即,DBA 每時每刻都有線上操作的需要。那么問題來了,個人的狀態是不定的,包括心理狀態、身體狀態。時刻保證臨危不亂,這是 DBA 重要的素質之一。線上故障,分秒必爭,不及時的處理、不善的操作都很有可能給公司帶來不同程度的損失。線上操作需要求穩,本文給出筆者的點滴思考。
© Pierre Puvis de Chavannes/The Poor Fisherman, 1881/Wikipedia2
第一,處理工單、凌晨維護、處理緊急故障之前,梳理流程,準備必要的資料。一個優秀的 DBA,不是求速度,不是求效率,而是求穩。出錯的概率低,你給別人的感覺就會比較靠譜。有經驗的 DBA,線上操作就是復制粘貼,寧愿相信 0 和 1,也不愿相信自己和別人。每次處理工單、凌晨維護,筆者都會養成一個習慣,梳理流程,準備線上服務器 IP 列表、需要的腳本、有可能使用到的命令、相關的文檔等等。這樣的好處是,心里有譜,不至于慌亂。即使遇到突發狀況,也會相對從容。當然,緊急故障沒有這么多時間給你準備,但至少也要準備常用的命令。這里有個小建議,使用 Evernote 保存常用的命令,當然,涉及公司敏感信息的,不能留。臨場發揮,盡可能地避免手動輸入,因為高度緊張的狀態下,輸入錯誤的概率比日常要高。于 DBA 而言,輸入錯誤,帶來的災難將是毀滅性的。已經有很多類似的案例,在此不做展開。
第二,處理故障之前分析最重要。通常某個故障是不是單點的,是一個面,是一個鏈條。線上故障,直接受影響的就是用戶,究其原因,用戶層、接入層、邏輯層和數據層每一層都有可能有問題。處理故障之前,不是無謂的試錯,一次不行,下次依然如故的概率相當高,然后時間就這樣不知不覺地浪費了。此時應該冷靜下來,思維不能單獨盯在數據層,從整個技術鏈條考慮,這樣獲得的信息才是最全方位的。那么問題來了,互聯網行業工作細分,DBA 很大可能沒有操作數據層之外的權限,怎樣做到信息相對完善,接下來就是下一個話題。
第三,學會溝通,盡可能地達到信息對稱。第二點提到,DBA 更多關注的是數據層,達到整個技術鏈條信息的流通是相當重要的。這一點其實不是技術問題,而是一個人的軟實力。關于提問的智慧3,可以參考之前筆者的文章。我們都知道,提好問題比答案本身更重要。DBA 在處理故障時,跟監控、研發、測試、產品、運維等都有可能打交道。監控會反饋受影響的范圍、延時情況等等,這屬于用戶層;研發、測試、產品會反饋業務故障、程序日志等,這屬于用戶層和邏輯層;運維會反饋網絡情況、流量狀況、Web 服務器異常等等,這屬于接入層。最后 DBA 會關注數據層,包括持久層和緩存層,然后結合不同鏈條的信息,綜合分析,再進行相應的操作。線上操作,我們不能容忍低效甚至無效的溝通。
第四,任何操作三思而后行。DBA 應該把「備份重于一切4」銘記于心,修改任何配置文件之前先備份,慎用甚至不用 rm。對于有 DROP 和 TRUNCATE 的工單,再三審核和確認,避免無效操作。如果確實存在此類需求,應該首先確認是否有備份,備份是否可用。DBA 應該對高危操作有明確的認識,除此之外,所有的恢復操作也需要了記于心,防患于未然。
第五,事后 Review、反思、總結,形成知識庫。故障是不可控的,可能是人為,可能是程序有 Bug,可能是網絡故障,總之發生故障的原因千奇百怪。但故障事后的 Review、反思和總結我們可以控制。針對某個特定的故障,反思處理的流程是否有優化的地方,反思基礎設施是否還有不完善的地方,反思團隊出現的問題,反思和其他部門的合作是否有問題等等,然后形成會議記錄、故障報告、故障總結,形成知識庫,定期再次 Review,避免下次出現類似的問題。再者,還可以給新入職的員工參考,從真實案例中學習,這樣進步會更快。
做好一個優秀的 DBA,技術是一方面,更重要的是個人素質。比如,你需要有良好的習慣、需要有優秀的心理素質、需要有責任心和道德、需要有良好的溝通能力……這些軟實力是基石,在此基礎上,拓展技術的廣度和深度,這樣才會有更良好的發展。
借此文章,嘮嗑下最近的想法。筆者經常反思為什么會這樣堅持更新博客,最近有了比較理想的答案。第一是督促自己思考,第二是為別人提供價值。先說第一點,堅持更新博客,就是在提醒自己不斷思考,這樣就會比別人獲得更多技術之外的能力。然而,這些能力,是在枯燥的工作之作學不來的。世間的道理都很簡單,大家也懂,然而真正去行動并且持之以恒的少之又少。你看了一千篇文章,讀了一百本書,不去行動都是枉然。然后說說第二點,博客很重要的一點就是給讀者提供價值。讀者覺得你的文章能給他帶來啟發,這就是正向輸出;讀者評論你的文章、和你發郵件交流、加微信和你聊天,這就是正向反饋。你給讀者提供了價值,說不定讀者哪天就會給你帶來意想不到的驚喜。一個長期保持高質量更新的博客,于己于他,個人認為都是瑰寶。即使現在沒有兌現,將來的某個時刻會。
回到這篇文章本身,筆者時刻都在強調軟實力。軟實力靠的是長期的積累,需要自控力不斷提高。歸根結底,任何管理本質上都是對自我的管理。