《當(dāng)當(dāng)網(wǎng)資深DBA:DB運(yùn)維四大現(xiàn)代化的實(shí)現(xiàn)(有彩蛋)》要點(diǎn):
本文介紹了當(dāng)當(dāng)網(wǎng)資深DBA:DB運(yùn)維四大現(xiàn)代化的實(shí)現(xiàn)(有彩蛋),希望對您有用。如果有疑問,可以聯(lián)系我們。
講師介紹
趙鋼
當(dāng)當(dāng)網(wǎng)資深DBA
各位好,今天我的主題是 《DB運(yùn)維的四個現(xiàn)代化》 ,看標(biāo)題就能明白,是關(guān)于DBA自動化運(yùn)維平臺的事情.
主要是分享下我在當(dāng)當(dāng)想到做到的一些事情,很多都是兄弟們一起努力的結(jié)果, 這篇文章也是對我們工作進(jìn)行一次總結(jié),整個平臺的實(shí)現(xiàn)方法并沒有用到什么高大上的框架,有亮點(diǎn)的地方我會著重說明,當(dāng)然,有興趣了解的同學(xué),直接提問就好.
本次分享將分為以下三部分進(jìn)行:
首先先聊下DB在項目中的地位:
于是,DBA的工作經(jīng)常成為項目進(jìn)展的瓶頸.
然而,在錯綜復(fù)雜的電商環(huán)境中, 數(shù)據(jù)庫又獨(dú)具特色.一提到電商: 自然想到,雙11,秒殺,大促等等,?? 于是下面3個特點(diǎn)也就不言而喻.
在當(dāng)當(dāng)網(wǎng),我們的DB規(guī)模是這樣的,數(shù)據(jù)截止到2016年3月,而現(xiàn)在又在增長……T_T
因此就會有這樣的工作需求:
商品分類項目程序出現(xiàn)了bug,導(dǎo)致分類錯誤, 最有效的辦法莫過于:DB中需要修改幾條數(shù)據(jù).
于是,DBA們也在思考,和開發(fā)項目拼人肉數(shù)目,肯定不切實(shí)際,我們需要自動化的平臺.
根據(jù)以上問題,我們做了幾個選擇:
用下圖來回答:
平臺主要分為:信息收集展現(xiàn),DBA管理工具兩大部分.
數(shù)據(jù)庫的元數(shù)據(jù)可以被全體技術(shù)部乃至業(yè)務(wù)部訪問.但數(shù)據(jù)細(xì)節(jié),只能有限訪問(權(quán)限申請需要經(jīng)過審批)這些只讀的訪問,一次授權(quán),即可自助進(jìn)行.
對于數(shù)據(jù)庫管理(部署,備份,恢復(fù)),DBA也要編寫腳本,按標(biāo)準(zhǔn)進(jìn)行.后面會盡量詳細(xì)介紹.
1、信息收集展現(xiàn)
先說明下,關(guān)于數(shù)據(jù)庫元數(shù)據(jù)的展現(xiàn):
上圖可見,借用phpmyadmin工具(右圖),對于元數(shù)據(jù)的展現(xiàn)還是很完美的.完全可以替代左圖的命令行模式.
當(dāng)然,這里的phpmyadmin是經(jīng)過修剪功能的版本,去掉了諸多管理,展示數(shù)據(jù)細(xì)節(jié)的部分.
對于申請過權(quán)限的用戶,才可以訪問到受限的數(shù)據(jù)細(xì)節(jié).
同時對于數(shù)據(jù)本身,也進(jìn)行了限制性修改 ,僅能訪問 500行的數(shù)據(jù):
對于元數(shù)據(jù)也進(jìn)行了抓取和歸檔(主要用shell+python定時執(zhí)行 實(shí)現(xiàn)),這樣做有幾個好處:
1、便于在整個公司項目范圍內(nèi),宏觀的、快速的、模糊的查找想要的元數(shù)據(jù).
2、基于元數(shù)據(jù)的定期歸檔,可得出數(shù)據(jù)空間變化的規(guī)律.
例如我們平臺的如下功能:
3、還可以對元數(shù)據(jù)進(jìn)行統(tǒng)計,迅速得出那些是我們急需調(diào)優(yōu)的目標(biāo)(需水平拆分的大表,需垂直拆分的寬表,需要刪除的重復(fù)索引,需要擴(kuò)容的autoid等等).
例如,我們平臺的如下功能:
展示出來就是這樣(圖表展示我采用highchart,MySQL只負(fù)責(zé)用SQL吐數(shù)據(jù),展示的活,就交給highchart 了):
4、管理服務(wù)器列表,對于所有服務(wù)器的固定端口(數(shù)據(jù)庫端口)進(jìn)行掃描,及登陸測試,獲取庫名,角色(主or從),等信息.
對于性能和監(jiān)控數(shù)據(jù),采用同樣的方法進(jìn)行抓取和分析,(數(shù)據(jù)源取自zabbix監(jiān)控數(shù)據(jù)庫)
這樣做的好處是:
(上圖屏蔽的主要是一些ip和庫名信息.)
2、DBA管理工具
這部分我們也在進(jìn)行中,目前DB的安裝/部署的基本已經(jīng)實(shí)現(xiàn)腳本化,主要包括下面的腳本.
下面是部分腳本的功能說明:
該腳本的主要功能:
備份會保留多個備份周期的備份集. 如空間吃緊,備份前,則會優(yōu)先刪除日期靠前的備份集.
該腳本的主要功能:
innoDB_buffer_pool_size=內(nèi)存*80%
server-id=[IP點(diǎn)分十進(jìn)的后兩段]+三個隨機(jī)數(shù)
該腳本的主要功能:
對于日常比較頻繁執(zhí)行的DML語句,通常處于開發(fā)部門修改數(shù)據(jù)解決線上bug的問題,我們采用了inception的部分功能,結(jié)合已經(jīng)收集到的服務(wù)器列表.,只需指定將SQL即可,平臺會自動送到該庫指向的主庫上執(zhí)行DML語句.
采用inception的功能主要是對SQL的審核功能,例如,如果該SQL的影響行數(shù)超限,則終止執(zhí)行.
平臺則對SQL執(zhí)行進(jìn)行歷史記錄.
DBA管理工具這邊也在逐步完成對上述管理腳本的平臺化.
我的分享基本就是這些, 關(guān)于平臺及工具的代碼,我們也在逐步做脫敏工作,爭取形成一個可以開源出來的產(chǎn)品, 希望對大家有些啟發(fā),也希望拋磚引玉.
Q1:目前的高可用是用什么方案?
A1:我們預(yù)期用MHA,目前還未有這方面的架構(gòu).
Q2:你們是如何進(jìn)行跨機(jī)房的管理的?slave的延遲如何保證在業(yè)務(wù)可忍受的范圍內(nèi)的?
A2:slave延遲的問題主要從開發(fā)方面分解大事務(wù)解決.跨機(jī)房方面我們目前也盡量避免跨機(jī)房的主從架構(gòu)搭建.
Q3:如何設(shè)計MySQL架構(gòu)來滿足如搶購類的高并發(fā)的業(yè)務(wù)?
A3:大促、秒殺業(yè)務(wù)這些方面,主要靠提前壓測,并觀察性能瓶頸,擴(kuò)容和回收也是以性能(cpu,網(wǎng)絡(luò)連接,磁盤)為依據(jù)來進(jìn)行.
Q4:目前應(yīng)對大促,秒殺業(yè)務(wù),數(shù)據(jù)庫層面擴(kuò)容縮容,能否給出一些建議.
A4:這方面需要時間來改進(jìn),我們目前還很不完善,其實(shí)很多功能也是當(dāng)當(dāng)架構(gòu)特色來設(shè)計的.即使開源也是為內(nèi)部版本控制考慮.所以還未有這份精力配合.
Q5:如果要分庫分表,推進(jìn)這些東西開發(fā)會配合嗎?
A5:我們架構(gòu)部有這方面的中間價,叫sharding-JDBC,可以關(guān)注下github上的項目.
Q6:MySQL一個表最多存多少記錄算大數(shù)據(jù)?有哪些合適的分表方式?
A6:存多少不重要,關(guān)鍵要看怎么使用它,是讀多,寫多,還是改多,對于一般的系統(tǒng),最起碼把讀寫分離開吧.
Q7:請問你們在線上如何解決DDL和批量delete or update 100萬級的數(shù)據(jù)的?
A7:DDL是靠pt-online-schema-change工具,百萬級的delete也是靠這個工具分配進(jìn)行的.
文章出處:DBAplus社群(訂閱號ID:?dbaplus)
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/4378.html