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

MySQL 樂視 NoSQL 開源軟件 中國統計網 中國統計網 2017-09-03

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

講師介紹

陶會祥

樂視雲數據庫負責人

  • 先後任職於人人網、新浪、多點等公司。 期間任高級DBA,數據庫架構師等職。

  • 擁有豐富的數據運維管理、自動化平臺建設經驗。

分享大綱:

  1. 樂視數據庫介紹

  2. 揭祕私有云RDS架構及實踐

一、樂視數據庫概述

1、數據庫平臺介紹

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

2、數據庫產品現狀

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

  • MySQL版本較多,有官方MySQL5.5、MariaDB10、PXC5.6等;

  • 架構有1主多從、1主多層、PXC(Percona-XtraDB-Cluster)等結構;

  • 硬件有SAS盤、SATA SSD,主要使用SATA SSD。

3、數據庫架構

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

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規模,天兔監控就夠用,也挺好用,可省去大量開發成本。

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

(2)Prometheus

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

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

(3)Open-Falcon

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

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

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

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

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

5、數據庫備份

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

實時從庫

  • 大存儲機器 單機多實例佈署(20-30+)

  • 重要業務 異地機房從庫

  • 多源複製從庫

說明:

  1. 我們找了一些大磁盤存儲10T+,在具佈署了30+左右的MySQL數據庫,不提供線上服務。 這樣相當於在一臺機器上有30個DB的熱備份。

  2. 對重要業務,進行異地跨機房從庫製作。可避免單一IDC異常,引發故障。

  3. 樂視有一些統計分析數據庫,使用MariaDB多源複製,一個實例同時同步多個主庫。某些情況也可以使用分析庫來恢復數據。

冷備份

  • xtrabackup 物理熱備份

  • 全備+增備

  • Mount 掛載大存儲

  • 定期清理歷史備份

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

二、私有云RDS實踐

1、私有云RDS項目背景

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

但是最真實原因:忙!

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

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)架構圖

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

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

  1. Docker:樂視雲RDS是跑在Docker容器內部

  2. Database:為具體的數據庫。可以是MySQL,也可以是PostgreSQL等任何數據庫

  3. Matrix:負責前端數據庫創建、管理、監控、維護和相關資源調度

  4. BeeHive:負責資源的調度管理,BeeHive類似Kubernete

  5. Data Analysis:負責數據庫日誌的分析還有用戶行為分析

(2)RDS架構圖2

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

普通用戶登錄私有云平臺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審核)

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

RDS界面——管理後臺

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

  • 用戶、宿主機資源管理

  • RDS日常管理 申請審核,RDS信息查詢,人員變更等

  • Docker 容器管理

  • RDS備份

  • RDS監控 RDS運行狀態監控

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

DockerFile

DockerFilek完成的工作:

  1. 安裝及配置MySQL

  2. 安裝相關軟件

  3. 啟動mcluter-manager

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

Mcluster-Manager

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

Mclustre-Manager功能:

  • tornado的web服務

  • 啟動、停止初始化MySQL

  • 監控、管理MySQL

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

揭祕樂視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的可能。

End.

運行人員:中國統計網小編(微信號:itongjilove)

微博ID:中國統計網

中國統計網,是國內最早的大數據學習網站,公眾號:中國統計網

http://www.itongji.cn

相關推薦

推薦中...