目前,各行各業已經認識到數據庫以及數據分析的重要性。對于互聯網行業而言,就更加依賴對海量數據的分析結果。在這樣的環境下,身為一名互聯網DBA,你到底需要做哪些事情呢?
眾所周知,互聯網DBA與傳統行業DBA有很大的不同,那就是管理的機器多,新技術更新快,面對的開發多、網絡環境復雜、要求7*24待機;這樣就 導致互聯網dba的工作在傳統DBA工作之上,增加了更多的復雜性,我們必須考慮如何大批量部署,如何集中化監控、如何解決單點故障而保障7*24,而為 了做到這些,不是靠堆人力,我們必須有一個完整的平臺作為支撐,那么數據庫平臺到底要建成什么樣子呢?
1、強有力的監控系統(監+控)
監控是我們的眼睛,我們不可能7*24個小時盯著我們的db,所以,我們需要監控系統來幫我們盯著,一旦異常,監控不僅僅通知我們,而必須要有控 制,例如:mysql 從庫宕機了我們通過監控自動讓其下線;從庫同步狀態失效了,可以自動修復同步等;并且,隨著機器的增加、實例daemon的增加,我們會發現我們的手機報 警會急劇增加,為了我們自己晚上能睡一個安穩覺,我們怎么去降低我們的報警,例如:哪些該短信,哪些該郵件;所有機器的磁盤空間報警是否可以整合后在報 呢?這就是我們監控系統必須考慮的,
2、自動審核系統
開發很多,項目很多,但是開發的習慣都不一致,可能會導致我們審核表結構的時頭都看大了,為了保證線上的統一,為了保證不被開發的神奇sql搞傷, 不被n多的項目審核壓垮,我們必須有一個自動建表審核系統,我們定義一些規則,如:不能用預留字段、主鍵必須為int,bigint等,然后開發填寫準備 上線的表結構,通過系統自動審核,審核通過的,自動上線,審核不通過的,給出建議;
3、慢日志分析系統
隨著自動審核系統的上線,我們可能會漏掉一些索引使用不太好的sql,那么我們就需要慢日志分系統幫助我們,在設計該系統時候,我們需要考慮是實時 抓取慢日志,還是每天定期推送慢日志、慢日志抓取后是立即推送給開發還是自動分析完以后給出建議給開發、慢日志還要考慮一些sql是否需要過濾,因為他可 能是每天的統計,當然這些都是自動的,設計完后,不需要人工介入;
4、統計系統
我們必須清晰的知道線上DB的整體運行情況,訪問量的變化、寫入量的變化、圖是死的,他不會欺騙任何人;我們能通過訪問統計知道是否有惡意訪問、是否需要優化,是否需要增加節點抗住更大的壓力;
5、備份系統
不管你信不信,我是信了,冷備份總是我們的救命草,不管我們做的多么好,故障總會有,drop database也會發生,所以,一個完整的備份系統,勢在必行,我們的備份是否正常,備份的數據是否能恢復,恢復需要多少時間,都是我們備份系統需要考慮的;
6、管理系統
我們機器少則上百臺,多則可能好幾千,如何清晰知道每臺機器跑了多少daemon,db proxy下面有哪些機器,如何能對主庫機器、從庫機器進行腳本分別分發等;都需要管理系統來幫我們完成;
7、中間層
是把雙刃劍,他能給我們帶來好的擴展,例如:動態添加從庫、主庫失效檢測等;但是他帶來了dba管理的復雜性、帶來了更多的故障點、帶來了更多的 bug、如果db proxy性能不好的話,那就更糟了,并且為了解決client透明,我們必須考慮很多,例如:連接保持,如:字符集、last_insert_id、 use dbname等;如果我們有人力開發維護,那么我相信proxy會帶給我們歡樂;
以上各個系統都是為我們管理db提供支持,如果沒有這些系統支持,那么數據庫管理就談不上平臺,談不上批量管理,談不上承載百億訪問量,百t數據量 的數據庫;當然在涉及這樣的系統時候,我們也要考慮新技術的引進,例如:如果能快速的打造nosql 平臺等;當然在部署這些模塊的時候,我們時時刻刻記得,所有的模塊都是會變的,我們需要不停的學習,不停的改進,才會打造宕機時間更低的數據庫服務。