转 当当网资深DBA:DB运维四大现代化的实现
位好,今天我的主題是 《DB運(yùn)維的四個(gè)現(xiàn)代化》 ,看標(biāo)題就能明白,是關(guān)于DBA自動(dòng)化運(yùn)維平臺(tái)的事情。
http://dbaplus.cn/news-21-855-1.html
?
主要是分享下我在當(dāng)當(dāng)想到做到的一些事情,很多都是兄弟們一起努力的結(jié)果, 這篇文章也是對(duì)我們工作進(jìn)行一次總結(jié),整個(gè)平臺(tái)的實(shí)現(xiàn)方法并沒有用到什么高大上的框架,有亮點(diǎn)的地方我會(huì)著重說明,當(dāng)然,有興趣了解的同學(xué),直接提問就好。
?
本次分享將分為以下三部分進(jìn)行:
??? 解密DB管理四大現(xiàn)代化
??? 實(shí)例分析實(shí)踐痛點(diǎn)
??? 從信息展現(xiàn)開始一步步解決
?
一DB管理四大現(xiàn)代化
?
首先先聊下DB在項(xiàng)目中的地位:
?
?
??? 99%的軟件,處理的數(shù)據(jù)最終是需要落地
??? 從人員結(jié)構(gòu)來說,DBA支持公司多項(xiàng)目
??? 數(shù)據(jù)要安全,數(shù)據(jù)要及時(shí),權(quán)限要收口
?
于是,DBA的工作經(jīng)常成為項(xiàng)目進(jìn)展的瓶頸。
?
然而,在錯(cuò)綜復(fù)雜的電商環(huán)境中, 數(shù)據(jù)庫(kù)又獨(dú)具特色。一提到電商: 自然想到,雙11,秒殺,大促等等,?? 于是下面3個(gè)特點(diǎn)也就不言而喻。
?
?
在當(dāng)當(dāng)網(wǎng),我們的DB規(guī)模是這樣的,數(shù)據(jù)截止到2016年3月,而現(xiàn)在又在增長(zhǎng)……T_T
?
?
因此就會(huì)有這樣的工作需求:
??? 商品單品項(xiàng)目組、新來的開發(fā)同學(xué),需要了解單品項(xiàng)目的表設(shè)計(jì)結(jié)構(gòu);
??? 購(gòu)物車項(xiàng)目管理的同學(xué)需要同步最新數(shù)據(jù),檢查項(xiàng)目運(yùn)行效果;
??? 訂單項(xiàng)目的同學(xué)需要檢查實(shí)時(shí)數(shù)據(jù),監(jiān)控訂單量(授權(quán)給radar監(jiān)控?cái)?shù)據(jù)源);
??? 測(cè)試的同學(xué)需要檢查回歸測(cè)試的數(shù)據(jù)效果。
?
二實(shí)例分析實(shí)踐痛點(diǎn)
?
商品分類項(xiàng)目程序出現(xiàn)了bug,導(dǎo)致分類錯(cuò)誤, 最有效的辦法莫過于:DB中需要修改幾條數(shù)據(jù)。
?
??? 項(xiàng)目擴(kuò)容,需要部署從庫(kù),項(xiàng)目遷移,需要切換到從庫(kù);
??? 硬件故障,需要切換;
??? 所有項(xiàng)目大大小小 500+個(gè)DB實(shí)例?? (ノ゚⊿゚)ノ? So,不理想的狀態(tài)下, 以上工作×500倍;
??? DBA負(fù)責(zé)按工單導(dǎo)出數(shù)據(jù),工單多了就放開查詢權(quán)限,
??? 人員流動(dòng)(←_←),于是一堆不明權(quán)限,數(shù)據(jù)安全無法保證。
?
于是,DBA們也在思考,和開發(fā)項(xiàng)目拼人肉數(shù)目,肯定不切實(shí)際,我們需要自動(dòng)化的平臺(tái)。
?
根據(jù)以上問題,我們做了幾個(gè)選擇:
??? 哪些信息是可以共享給開發(fā)部門的。
??? 哪些操作DBA可以自動(dòng),符合標(biāo)準(zhǔn)的進(jìn)行。
??? 用什么方法盡可能保證數(shù)據(jù)的實(shí)時(shí)準(zhǔn)確性
?
用下圖來回答:
?
?
平臺(tái)主要分為:信息收集展現(xiàn),DBA管理工具兩大部分。
?
數(shù)據(jù)庫(kù)的元數(shù)據(jù)可以被全體技術(shù)部乃至業(yè)務(wù)部訪問。但數(shù)據(jù)細(xì)節(jié),只能有限訪問(權(quán)限申請(qǐng)需要經(jīng)過審批)這些只讀的訪問,一次授權(quán),即可自助進(jìn)行。
?
對(duì)于數(shù)據(jù)庫(kù)管理(部署,備份,恢復(fù)),DBA也要編寫腳本,按標(biāo)準(zhǔn)進(jìn)行。后面會(huì)盡量詳細(xì)介紹。
?
三從信息展現(xiàn)開始一步步解決
?
1、信息收集展現(xiàn)
?
先說明下,關(guān)于數(shù)據(jù)庫(kù)元數(shù)據(jù)的展現(xiàn):
?
?
上圖可見,借用phpmyadmin工具(右圖),對(duì)于元數(shù)據(jù)的展現(xiàn)還是很完美的。完全可以替代左圖的命令行模式。
?
當(dāng)然,這里的phpmyadmin是經(jīng)過修剪功能的版本,去掉了諸多管理,展示數(shù)據(jù)細(xì)節(jié)的部分。
?
對(duì)于申請(qǐng)過權(quán)限的用戶,才可以訪問到受限的數(shù)據(jù)細(xì)節(jié)。
?
同時(shí)對(duì)于數(shù)據(jù)本身,也進(jìn)行了限制性修改 ,僅能訪問 500行的數(shù)據(jù):
?
?
對(duì)于元數(shù)據(jù)也進(jìn)行了抓取和歸檔(主要用shell+python定時(shí)執(zhí)行 實(shí)現(xiàn)),這樣做有幾個(gè)好處:
?
1、便于在整個(gè)公司項(xiàng)目范圍內(nèi),宏觀的、快速的、模糊的查找想要的元數(shù)據(jù)。
2、基于元數(shù)據(jù)的定期歸檔,可得出數(shù)據(jù)空間變化的規(guī)律。
?
例如我們平臺(tái)的如下功能:
?
?
?
?
3、還可以對(duì)元數(shù)據(jù)進(jìn)行統(tǒng)計(jì),迅速得出那些是我們急需調(diào)優(yōu)的目標(biāo)(需水平拆分的大表,需垂直拆分的寬表,需要?jiǎng)h除的重復(fù)索引,需要擴(kuò)容的autoid等等)。
?
例如,我們平臺(tái)的如下功能:
?
? ?
?
展示出來就是這樣(圖表展示我采用highchart,MySQL只負(fù)責(zé)用SQL吐數(shù)據(jù),展示的活,就交給highchart 了):
?
?
?
4、管理服務(wù)器列表,對(duì)于所有服務(wù)器的固定端口(數(shù)據(jù)庫(kù)端口)進(jìn)行掃描,及登陸測(cè)試,獲取庫(kù)名,角色(主or從),等信息。
?
?
對(duì)于性能和監(jiān)控?cái)?shù)據(jù),采用同樣的方法進(jìn)行抓取和分析,(數(shù)據(jù)源取自zabbix監(jiān)控?cái)?shù)據(jù)庫(kù))
?
這樣做的好處是:
??? 看出近期那些性能指標(biāo)頻繁報(bào)警,需要擴(kuò)容,需要調(diào)優(yōu)
??? 那些服務(wù)器是重載,那些卻過分規(guī)劃即使大促也是輕載。
?
?
(上圖屏蔽的主要是一些ip和庫(kù)名信息.)
?
2、DBA管理工具
?
這部分我們也在進(jìn)行中,目前DB的安裝/部署的基本已經(jīng)實(shí)現(xiàn)腳本化,主要包括下面的腳本。
?
?
下面是部分腳本的功能說明:
?
?
該腳本的主要功能:
??? 根據(jù)標(biāo)準(zhǔn)初始化完成的系統(tǒng),自動(dòng)安裝相關(guān)軟件包,備份時(shí)部署在集群的從庫(kù),且無域名的從庫(kù)優(yōu)先,
??? 關(guān)于備份空間的判斷,先根據(jù)數(shù)據(jù)量估算本次備份所需空間,如果備份空間滿足,則備份到該從庫(kù)的本地,如果不滿足則集中備份到大空間服務(wù)器。
?
備份會(huì)保留多個(gè)備份周期的備份集. 如空間吃緊,備份前,則會(huì)優(yōu)先刪除日期靠前的備份集。
?
?
該腳本的主要功能:
??? 初始化MySQL時(shí)候生成環(huán)境檢查
??? 根據(jù)內(nèi)存大小動(dòng)態(tài)計(jì)算buffer pool大小以及隨機(jī)值server-id
??? innoDB_buffer_pool_size=內(nèi)存*80%
??? server-id=[IP點(diǎn)分十進(jìn)的后兩段]+三個(gè)隨機(jī)數(shù)
??? 公共用戶權(quán)限導(dǎo)入以及導(dǎo)入后驗(yàn)證
?
?
該腳本的主要功能:
??? 從備份文件{logical,xtrabackup}恢復(fù)一個(gè)實(shí)例;
??? 從一個(gè)從庫(kù)直接{logical,xtrabackup}建立一個(gè)從庫(kù);
??? 從一個(gè)主庫(kù)直接{logical,xtrabackup}建立一個(gè)從庫(kù)。
?
對(duì)于日常比較頻繁執(zhí)行的DML語句,通常處于開發(fā)部門修改數(shù)據(jù)解決線上bug的問題,我們采用了inception的部分功能,結(jié)合已經(jīng)收集到的服務(wù)器列表.,只需指定將SQL即可,平臺(tái)會(huì)自動(dòng)送到該庫(kù)指向的主庫(kù)上執(zhí)行DML語句。
?
采用inception的功能主要是對(duì)SQL的審核功能,例如,如果該SQL的影響行數(shù)超限,則終止執(zhí)行。
?
平臺(tái)則對(duì)SQL執(zhí)行進(jìn)行歷史記錄。
?
?
DBA管理工具這邊也在逐步完成對(duì)上述管理腳本的平臺(tái)化。
?
我的分享基本就是這些, 關(guān)于平臺(tái)及工具的代碼,我們也在逐步做脫敏工作,爭(zhēng)取形成一個(gè)可以開源出來的產(chǎn)品, 希望對(duì)大家有些啟發(fā),也希望拋磚引玉。
?
Q&A
?
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è)計(jì)MySQL架構(gòu)來滿足如搶購(gòu)類的高并發(fā)的業(yè)務(wù)?
A3:大促、秒殺業(yè)務(wù)這些方面,主要靠提前壓測(cè),并觀察性能瓶頸,擴(kuò)容和回收也是以性能(cpu,網(wǎng)絡(luò)連接,磁盤)為依據(jù)來進(jìn)行。
?
Q4:目前應(yīng)對(duì)大促,秒殺業(yè)務(wù),數(shù)據(jù)庫(kù)層面擴(kuò)容縮容,能否給出一些建議。
A4:這方面需要時(shí)間來改進(jìn),我們目前還很不完善,其實(shí)很多功能也是當(dāng)當(dāng)架構(gòu)特色來設(shè)計(jì)的。即使開源也是為內(nèi)部版本控制考慮。所以還未有這份精力配合。
?
Q5:如果要分庫(kù)分表,推進(jìn)這些東西開發(fā)會(huì)配合嗎?
A5:我們架構(gòu)部有這方面的中間價(jià),叫sharding-JDBC,可以關(guān)注下github上的項(xiàng)目。
?
Q6:MySQL一個(gè)表最多存多少記錄算大數(shù)據(jù)?有哪些合適的分表方式?
A6:存多少不重要,關(guān)鍵要看怎么使用它,是讀多,寫多,還是改多,對(duì)于一般的系統(tǒng),最起碼把讀寫分離開吧。
?
Q7:請(qǐng)問你們?cè)诰€上如何解決DDL和批量delete or update 100萬級(jí)的數(shù)據(jù)的?
A7:DDL是靠pt-online-schema-change工具,百萬級(jí)的delete也是靠這個(gè)工具分配進(jìn)行的。
轉(zhuǎn)載于:https://www.cnblogs.com/feiyun8616/p/6168830.html
總結(jié)
以上是生活随笔為你收集整理的转 当当网资深DBA:DB运维四大现代化的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xampp 下安装mysql-pytho
- 下一篇: 每个人都该懂点的版本管理技能