《來自Facebook的一些MySQL運維經驗》要點:
本文介紹了來自Facebook的一些MySQL運維經驗,希望對您有用。如果有疑問,可以聯系我們。
1. 概要
每臺機器都使用多實例的模型. 每個機器放多個實例,每個實例放多個DB.
一些信息可以參考:?https://www.youtube.com/watch?v=UBHcmP2TSvk
多實例之間沒有進行資源隔離,這么做是讓每個實例都能發揮最大性能.
目前大部分核心業務已切換成MyRocks引擎,在機器硬件配置不變的情況,約可節省一半機器.
放在MyRocks上的核心業務主要有:Feed、Post、社交圖譜等讀寫混合業務.
MyRocks項目地址:https://github.com/facebook/mysql-5.6
另外,MariaDB 10.2版本也即將整合MyRocks引擎.
2. 高可用機制
采用基于GTID的一主多從結構,外加一個基于lossless semi-sync機制的mysqlbinlog實現的binlog server(可以理解為MySQL 5.7的loss zero replication).
基于多數派實現自動選主.
基于配置中心實現切換,未使用VIP.
在認為semi-sync復制可保證主從數據一致性的假設前提下,發生故障切換時,利用上述的binlog server中的日志進行補全后再選新主、切換.
若個別情況下由于特殊原因,出現從庫全部掛掉的情況,會將全部請求切到主庫,由它扛起所有的業務服務壓力.
某個從庫掛掉時,可以動態摘除.
3. 備份機制
所有的備份都是基于mysqldump實現,之所以采用mysqldump邏輯備份好處有:
上面提到,因為采用多實例、多DB結構,備份時可以多DB并行備份.當然了,也會控制并行備份的數量,避免影響在線業務性能.
備份放在集中存儲(HDFS)上, 據說已達EB級別容量.
關于備份的作用定位:
4. 如何快速部署從庫
可使用xtrabackup在現有存活的SLAVE實例上備份,也可在主庫上發起備份,再利用WDT(或者是BT)協議傳輸到異地,用于拉起從庫.
關于WDT項目:https://github.com/facebook/wdt
5. 高度自動化
面對大規模的數據庫實例,手工處理完全不現實.目前在facebook主要是利用Python開發內部DB運維平臺,所以Python技能方面要求比較高.
采用他們自已的osc工具執行Online DDL(也是本次DTCC大會上lulu的分享主題),它最早用PHP開發,雖早已開源,但實在不好用,所以幾乎只在內部使用.這個工具不同于pt-osc,相對來說更有優勢,比如可以避免使用pt-osc最常遇到的主從數據延遲問題.
項目地址:https://github.com/facebookincubator/OnlineSchemaChange
6. 團隊結構及技能樹
DBA團隊更多的是負責私有DB云平臺的建設.
Schema設計及DB拆分等由性能優化團隊負責.
在線表結構變更:數據庫資源申請由質量服務團隊負責,做到資源的合理分布、分配,如果某個業務只需要個位數級別的DB實例,可以自行在私有DB云平臺中申請部署,當數量比較大時,需要先經過質量服務團隊評估通過.
數據庫資源申請由質量服務團隊負責,做到資源的合理分布、分配.如果某個業務需要小量DB實例,可以自行在私有DB云平臺中申請部署;當數量比較大時,需要先經過質量服務團隊評估通過才可以.
文章來自微信公眾號:云DB