閱讀993 返回首頁    go 技術社區[雲棲]


當當網資深DBA:DB運維四大現代化的實現

本文根據DBAplus社群第84期線上分享整理而成

 

講師介紹20161212100610428.jpg

趙鋼

當當網資深DBA

 

  • OCP 9i認證專家,十年以上Oracle及Linux/HP-UX技術經驗。

  • 曾負責管理電信通訊話單數據庫、中國移動短信營銷數據庫、足彩福彩支付數據庫、多語種博客社區數據庫。

 

各位好,今天我的主題是 《DB運維的四個現代化》 ,看標題就能明白,是關於DBA自動化運維平台的事情。

 

主要是分享下我在當當想到做到的一些事情,很多都是兄弟們一起努力的結果, 這篇文章也是對我們工作進行一次總結,整個平台的實現方法並沒有用到什麼高大上的框架,有亮點的地方我會著重說明,當然,有興趣了解的同學,直接提問就好。

 

本次分享將分為以下三部分進行:

  1. 解密DB管理四大現代化

  2. 實例分析實踐痛點

  3. 從信息展現開始一步步解決

 

DB管理四大現代化

 

首先先聊下DB在項目中的地位:

 

20161212100623553.jpg

 

  • 99%的軟件,處理的數據最終是需要落地

  • 從人員結構來說,DBA支持公司多項目

  • 數據要安全,數據要及時,權限要收口

 

於是,DBA的工作經常成為項目進展的瓶頸。

 

然而,在錯綜複雜的電商環境中, 數據庫又獨具特色。一提到電商: 自然想到,雙11,秒殺,大促等等,   於是下麵3個特點也就不言而喻。

 

20161212100634902.jpg

 

在當當網,我們的DB規模是這樣的,數據截止到2016年3月,而現在又在增長……T_T

 

20161212100645415.jpg

 

因此就會有這樣的工作需求:

  • 商品單品項目組、新來的開發同學,需要了解單品項目的表設計結構;

  • 購物車項目管理的同學需要同步最新數據,檢查項目運行效果;

  • 訂單項目的同學需要檢查實時數據,監控訂單量(授權給radar監控數據源);

  • 測試的同學需要檢查回歸測試的數據效果。

 

實例分析實踐痛點

 

商品分類項目程序出現了bug,導致分類錯誤, 最有效的辦法莫過於:DB中需要修改幾條數據。

 

  • 項目擴容,需要部署從庫,項目遷移,需要切換到從庫;

  • 硬件故障,需要切換;

  • 所有項目大大小小 500+個DB實例   (ノ゚⊿゚)ノ  So,不理想的狀態下, 以上工作×500倍;

  • DBA負責按工單導出數據,工單多了就放開查詢權限,

  • 人員流動(←_←),於是一堆不明權限,數據安全無法保證。

 

於是,DBA們也在思考,和開發項目拚人肉數目,肯定不切實際,我們需要自動化的平台。

 

根據以上問題,我們做了幾個選擇:

  • 哪些信息是可以共享給開發部門的。

  • 哪些操作DBA可以自動,符合標準的進行。

  • 用什麼方法盡可能保證數據的實時準確性

 

用下圖來回答:

 

20161212100659568.jpg

 

平台主要分為:信息收集展現,DBA管理工具兩大部分。

 

數據庫的元數據可以被全體技術部乃至業務部訪問。但數據細節,隻能有限訪問(權限申請需要經過審批)這些隻讀的訪問,一次授權,即可自助進行。

 

對於數據庫管理(部署,備份,恢複),DBA也要編寫腳本,按標準進行。後麵會盡量詳細介紹。

 

從信息展現開始一步步解決

 

1、信息收集展現

 

先說明下,關於數據庫元數據的展現:

 

20161212100729487.jpg

 

上圖可見,借用phpmyadmin工具(右圖),對於元數據的展現還是很完美的。完全可以替代左圖的命令行模式。

 

當然,這裏的phpmyadmin是經過修剪功能的版本,去掉了諸多管理,展示數據細節的部分。

 

對於申請過權限的用戶,才可以訪問到受限的數據細節。

 

同時對於數據本身,也進行了限製性修改 ,僅能訪問 500行的數據:

 

20161212100808652.png

 

對於元數據也進行了抓取和歸檔(主要用shell+python定時執行 實現),這樣做有幾個好處:

 

1、便於在整個公司項目範圍內,宏觀的、快速的、模煳的查找想要的元數據。

2、基於元數據的定期歸檔,可得出數據空間變化的規律。

 

例如我們平台的如下功能:

 

20161212100852724.png

 

20161212100937377.png

 

20161212100959799.jpg

 

3、還可以對元數據進行統計,迅速得出那些是我們急需調優的目標(需水平拆分的大表,需垂直拆分的寬表,需要刪除的重複索引,需要擴容的autoid等等)。

 

例如,我們平台的如下功能:

 

20161212101035574.png   20161212101045863.png

 

展示出來就是這樣(圖表展示我采用highchart,MySQL隻負責用SQL吐數據,展示的活,就交給highchart 了):

 

20161212101126144.png

 

20161212101141843.png

 

4、管理服務器列表,對於所有服務器的固定端口(數據庫端口)進行掃描,及登陸測試,獲取庫名,角色(主or從),等信息。

 

20161212101201116.jpg

 

對於性能和監控數據,采用同樣的方法進行抓取和分析,(數據源取自zabbix監控數據庫)

 

這樣做的好處是:

  1. 看出近期那些性能指標頻繁報警,需要擴容,需要調優

  2. 那些服務器是重載,那些卻過分規劃即使大促也是輕載。

 

20161212101227757.png

 

20161212101236989.png

(上圖屏蔽的主要是一些ip和庫名信息.)

 

2、DBA管理工具

 

這部分我們也在進行中,目前DB的安裝/部署的基本已經實現腳本化,主要包括下麵的腳本。

 

20161212101252412.jpg

 

下麵是部分腳本的功能說明:

 

20161212101453951.png

 

該腳本的主要功能:

  1. 根據標準初始化完成的係統,自動安裝相關軟件包,備份時部署在集群的從庫,且無域名的從庫優先,

  2. 關於備份空間的判斷,先根據數據量估算本次備份所需空間,如果備份空間滿足,則備份到該從庫的本地,如果不滿足則集中備份到大空間服務器。

 

備份會保留多個備份周期的備份集. 如空間吃緊,備份前,則會優先刪除日期靠前的備份集。

 

20161212101342668.png

 

該腳本的主要功能:

  1. 初始化MySQL時候生成環境檢查

  2. 根據內存大小動態計算buffer pool大小以及隨機值server-id

    innoDB_buffer_pool_size=內存*80%

    server-id=[IP點分十進的後兩段]+三個隨機數

  3. 公共用戶權限導入以及導入後驗證

 

20161212101404643.png

 

該腳本的主要功能:

  1. 從備份文件{logical,xtrabackup}恢複一個實例;

  2. 從一個從庫直接{logical,xtrabackup}建立一個從庫;

  3. 從一個主庫直接{logical,xtrabackup}建立一個從庫。

 

對於日常比較頻繁執行的DML語句,通常處於開發部門修改數據解決線上bug的問題,我們采用了inception的部分功能,結合已經收集到的服務器列表.,隻需指定將SQL即可,平台會自動送到該庫指向的主庫上執行DML語句。

 

采用inception的功能主要是對SQL的審核功能,例如,如果該SQL的影響行數超限,則終止執行。

 

平台則對SQL執行進行曆史記錄。

 

20161212101535758.jpg

 

DBA管理工具這邊也在逐步完成對上述管理腳本的平台化。

 

我的分享基本就是這些, 關於平台及工具的代碼,我們也在逐步做脫敏工作,爭取形成一個可以開源出來的產品, 希望對大家有些啟發,也希望拋磚引玉。

 

Q&A

 

Q1:目前的高可用是用什麼方案?

A1:我們預期用MHA,目前還未有這方麵的架構。

 

Q2:你們是如何進行跨機房的管理的?slave的延遲如何保證在業務可忍受的範圍內的?

A2:slave延遲的問題主要從開發方麵分解大事務解決。跨機房方麵我們目前也盡量避免跨機房的主從架構搭建。

 

Q3:如何設計MySQL架構來滿足如搶購類的高並發的業務?

A3:大促、秒殺業務這些方麵,主要靠提前壓測,並觀察性能瓶頸,擴容和回收也是以性能(cpu,網絡連接,磁盤)為依據來進行。

 

Q4:目前應對大促,秒殺業務,數據庫層麵擴容縮容,能否給出一些建議。

A4:這方麵需要時間來改進,我們目前還很不完善,其實很多功能也是當當架構特色來設計的。即使開源也是為內部版本控製考慮。所以還未有這份精力配合。

 

Q5:如果要分庫分表,推進這些東西開發會配合嗎?

A5:我們架構部有這方麵的中間價,叫sharding-JDBC,可以關注下github上的項目。

 

Q6:MySQL一個表最多存多少記錄算大數據?有哪些合適的分表方式?

A6:存多少不重要,關鍵要看怎麼使用它,是讀多,寫多,還是改多,對於一般的係統,最起碼把讀寫分離開吧。

 

Q7:請問你們在線上如何解決DDL和批量delete or update 100萬級的數據的?

A7:DDL是靠pt-online-schema-change工具,百萬級的delete也是靠這個工具分配進行的。

原文發布時間為:2016-12-12

本文來自雲棲社區合作夥伴DBAplus

最後更新:2017-05-11 14:31:38

  上一篇:go  負載均衡(SLB)使用最佳實踐
  下一篇:go  平均提速20倍!Oracle 12c In-Memory最佳實踐