揭秘樂視MySQL數據庫架構與運維實踐

传奇霸业腾讯版微端 www.jogex.icu 為促進社區發展,運維派尋求戰略合作、贊助、投資,請聯系微信:helloywp

講師介紹
陶會祥
樂視云數據庫負責人
  • 先后任職于人人網、新浪、多點等公司。 期間任高級DBA,數據庫架構師等職。
  • 擁有豐富的數據運維管理、自動化平臺建設經驗。
分享大綱:
  1. 樂視數據庫介紹
  2. 揭秘私有云RDS架構及實踐

一、樂視數據庫概述

1、數據庫平臺介紹

我們數據庫部門的數據庫種類較多:有MySQL、Oracle、MongoDB、Redis等。從另一角度,可分為傳統的DB (MySQL、MongoDB..) 及云數據庫RDS。其中,MySQL在公司內部廣泛使用,今天將就樂視MySQL的運維情況進行分享。

2、數據庫產品現狀

數據庫

 

  • MySQL版本較多,有官方MySQL5.5、MariaDB10、PXC5.6等;
  • 架構有1主多從、1主多層、PXC(Percona-XtraDB-Cluster)等結構;
  • 硬件有SAS盤、SATA SSD,主要使用SATA SSD。

 

3、數據庫架構

架構

Master-Slave 結構有:

  • 1主N從
  • 1主N從+MB (master-backup)
  • 1主N從+Relay

提個問題,圖中1主N從+Relay結構,引入relay有什么優缺點?

  • 優點:在跨機房高可用時,布署一臺同步用的relay 在異地機房可減少跨機房同步帶寬。
  • 缺點: ?增加了架構復雜度,主從關系變成多層樹結構。若是使用不當,比較亂,易出錯。我見過超過4層的主從,梳理關系就很麻煩,建議不超過3層。

4、數據庫監控

我們的數據庫監控以開源軟件為主,有天兔Lepus、Prometheus、Open-Falcon等。

(1)天兔

  • Lepus是一個由Python+PHP開發的數據庫企業級監控系統
  • 支持MySQL/Oracle/MongoDB/Redis等數據庫的監控

對于不是特別大的DB規模,天兔監控就夠用,也挺好用,可省去大量開發成本。

監控

(2)Prometheus

Prometheus是一個開源的服務監控系統,它通過HTTP協議從遠程的機器收集數據并存儲在本地的時序數據庫上。它提供簡單的網頁界面、一個功能強大的查詢語言以及HTTP接口等。

Prometheus

(3)Open-Falcon

我們用Open-Falcon來做服務器基礎監控。對Open-Falcon進行了一些2次開發,如增加電話報警功能、IDC 的概念。

(4)作為補充還有Zabbix、微信告警等

此外,公司監控平臺提供email報警,短信報警,電話語音報警。

作為補充,數據庫平臺增加了微信告警。 優點是方便,成本低。 重要性大于郵件的,不到電話或短信級別的可以用微信。

5、數據庫備份

數據備份是非常重要的,我們的DBA也非常重視數據庫的備份工作。在這我把備份概念略微擴展,我認為數據庫實時從庫也是一種備份。

實時從庫

  • 大存儲機器 單機多實例布署(20-30+)
  • 重要業務 異地機房從庫
  • 多源復制從庫

說明:?

  1. 我們找了一些大磁盤存儲10T+,在具布署了30+左右的MySQL數據庫,不提供線上服務。 這樣相當于在一臺機器上有30個DB的熱備份。
  2. 對重要業務,進行異地跨機房從庫制作??殺苊獾ヒ籌DC異常,引發故障。
  3. 樂視有一些統計分析數據庫,使用MariaDB多源復制,一個實例同時同步多個主庫。某些情況也可以使用分析庫來恢復數據。

冷備份

  • xtrabackup 物理熱備份
  • 全備+增備
  • Mount 掛載大存儲
  • 定期清理歷史備份

主要使用xtrabackup來物理備份MySQL。使用了全備+增備,每周至少一次全備,多個增備。為了簡便,增備只做基于全備份的增備,并沒有使用增備的增備。利用Mount 掛載大的存儲 30T,做為備份存儲。為避免存儲容量滿,會有腳本定期壓縮,清理歷史備份。

二、私有云RDS實踐

1、私有云RDS項目背景

為什么做私有云RDS? 有各種理由: PaaS平臺的流行,老板提出需要把數據庫服務化、容器技術興起、成本優化(硬件成本+管理成本)、用戶體驗等。

但是最真實原因:忙!

私有云

2、RDS介紹

樂視云RDS基于Docker + Mcluster 開發的一種高可用、可彈性伸縮的在線數據庫服務(Relational Database Service,簡稱RDS)。

其中,Mcluster(MySQL Server Cluster)是MySQL數據庫集群。

  • Mcluster是我們開發出的一種私有云MySQL集群
  • 基于PXC (Percona Xtradb Cluster)封裝和調優
  • 真正的多主架構沒有單點故障,高可用性
  • 是RDS的根基
  • 良好的擴展性

PXC官方的鏈接: https://www.percona.com/doc/percona-xtradb-cluster/5.6/index.html

3、私有云RDS架構

(1)架構圖

私有云

RDS整體架構主要分為以下幾大部分:

  1. Docker:樂視云RDS是跑在Docker容器內部
  2. Database:為具體的數據庫??梢允荕ySQL,也可以是PostgreSQL等任何數據庫
  3. Matrix:負責前端數據庫創建、管理、監控、維護和相關資源調度
  4. BeeHive:負責資源的調度管理,BeeHive類似Kubernete
  5. Data Analysis:負責數據庫日志的分析還有用戶行為分析

(2)RDS架構圖2

RDS

普通用戶登錄私有云平臺matrix,申請創建RDS。? BeeHive計算分析機群中的資源情況,選擇合適的3臺機器布署Mcluster DB,同時還會額外布署一個VIP容器來做DB高可用和負戴均衡。

用戶可以通過此VIP來訪問MySQL。RDS管理員可通過matrix后臺對平臺全部的RDS進行管理、監控運行狀態等。

4、Mcluster架構

Mcluster是樂視云基于PXC (Percona XtraDB Cluster)封裝和調優的私有云MySQL集群。因為基于PXC封裝,故Mcluster具有和PXC 相同的特點。

  • 多點讀寫機群中任一DB節點都可以寫入
  • 并行復制可以多個線程復制,以事務為單位,多個事務同時并行推送到所有集群節點
  • 強一致性各節點數據強一致性
  • 高可用性單一節點故障不會影響機群的可用性
  • 兼容傳統MySQL與傳統MySQL幾乎完全兼容,數據可以直接使用不需要任何轉換

Mcluster和主從MySQL對比

MySQL

RDS界面

RDS界面——用戶前端

類似阿里云、AWS的RDS用戶平臺頁面。用戶選擇RDS的配置,主要是磁盤及內存,點下一步,就可以提交RDS申請。(每個用戶可以免費建3個,超出需要DBA審核)

RDS

RDS界面——管理后臺

RDS管理員可登錄管理后臺進行RDS管理,主要功能如下:

  • 用戶、宿主機資源管理
  • RDS日常管理 ??申請審核,RDS信息查詢,人員變更等
  • Docker 容器管理
  • RDS備份
  • RDS監控? RDS運行狀態監控

DockerFile

DockerFilek完成的工作:

  1. 安裝及配置MySQL
  2. 安裝相關軟件
  3. 啟動mcluter-manager

Mcluster-Manager

大家可以看到在DockerFile最后一行,會啟動mcluster-manager。

Mclustre-Manager功能:

  • tornado的web服務
  • 啟動、停止初始化MySQL
  • 監控、管理MySQL

mcluster-manager安裝在Docker容器中,用來管理MySQL。外部系統不直接操作MySQL,而是通過mcluster-manager API 調用。包括啟動、停止、初始化、監控、備份、管理MySQL等功能。

RDS運用

私有云RDS上線后大大減輕了DBA工作量,降低了服務器成本和人力成本。 目前在樂視體系各子公司得到廣范使用。

運維和坑

  • 數據庫規范、流程非常重要
  • 私有云 可節省大量機器成本及人力成本
  • 私有云RDS產品設計、管理該異與公有云
  • RDS用戶在線修改大表,引發故障
  • 多節點同時大量寫,容易引起死鎖
  • 組件較多,相互間依賴太強
  • 運維工具待完善 如宿主機器故障,恢復工作量大

數據庫規范、流程非常重要,因為這是運維自動化的基礎。我們吃過這個虧,數據庫版本眾多,并且安裝目錄不同,帶來很大的麻煩。

使用私有云確實是可節省大量機器成本及人力成本,這個在樂視云是可以確認的經驗,因為我們每臺機器上安裝了20-30個Docker,即跑了20-30個MySQL,較傳統的MySQL布署節省大量成本。若是有個別業務寫入量特別大,因為PXC多份寫的原因,這時我們也可能遷移到傳統的主從DB方式。

私有云RDS產品設計,管理該和公有云有區別。如曾經有RDS用戶在線修改大表,引發故障。在公有云上,DBA不用關心此問題。 但是因為是公司內部用戶,是私有云,故只能是我們DBA來處理,善后 :( ?另私有云?;褂脅肥韉母拍?,而公有云就不用類似的設計。

組件較多,相互間依賴太強。我們的RDS 系統做得還是有點太復雜,未來版本希望可減化。

運維工具待完善,如宿主機器故障,恢復工作量較大。 某一宿主機故障,要恢復20-30+的DB。當前是DBA手動執行腳本,還是有點low。

Q&A
Q1:數據庫備份主要是使用物理備份還是邏輯備份?A1:主要使用xtrabackup物理備份MySQL。

Q2:使用數據庫增量備份,恢復起來很麻煩嗎?

A2:樂視云使用基于全備的增備,并不會進行增備的增備?;指雌鵠床⒉宦櫸?。

Q3:PXC多主架構是否是采用一個節點寫,其余節點讀的架構?

A3:多點大量同時寫數據,有時會有鎖問題,所以我們主要是寫一節點,多節點讀。

Q4:如果寫的節點掛了怎么辦?

A4:我們前面有個架構圖,用戶通過Gblance來訪問RDS。(相當于做了VIP高可用)

Q5:前面講到廣州到北京復制,你們走公網還是專線?

A5:我們使用專線。樂視云在全國有10多個機房。大機房之間走專線。

Q6:樂視云RDS是否存在著licence問題?

A6:不會有licence問題。我們的RDS是基于Docker + MySQL開發,而MySQL、Docker都是開源軟件,沒有licence風險。

Q7:樂視云RDS會開源嗎?會對外提供RDS服務么?

A7:目前暫無開源計劃,只用在集團內部提供私有云服務,但依公司發展戰略,不排除未來提供公有云RDS的可能。

回聽分享,請戳這里:
https://m.qlchat.com/topic/details?topicId=240000551075265&isGuide=Y密碼:159

文章來自微信公眾號:DBAplus社群

網友評論comments

發表評論

電子郵件地址不會被公開。 必填項已用*標注

暫無評論

Copyright ? 2012-2019 www.jogex.icu - 運維派 - 粵ICP備14090526號-3
掃二維碼
掃二維碼
返回頂部