【騰云閣】MySQL數據庫的高可用性分析

文章作者:易固武 , 版權歸原作者所有,未經作者同意,請勿轉載
文章來源:騰訊云技術社區——騰云閣:https://www.qcloud.com/community
原文鏈接:https://www.qcloud.com/community/article/203

MySQL數據庫是目前開源應用最大的關系型數據庫,有海量的應用將數據存儲在MySQL數據庫中。存儲數據的安全性和可靠性是生產數據庫的關注重點。本文分析了目前采用較多的保障MySQL可用性方案。

MySQL Replication

MySQL Replication是MySQL官方提供的主從同步方案,用于將一個MySQL實例的數據,同步到另一個實例中。Replication為保證數據安全做了重要的保證,也是現在運用最廣的MySQL容災方案。Replication用兩個或以上的實例搭建了MySQL主從復制集群,提供單點寫入,多點讀取的服務,實現了讀的scale out。



圖1. MySQL Replication主從復制集群

如圖一所示,一個主實例(M),三個從實例(S),通過replication,Master生成event的binlog,然后發給slave,Slave將event寫入relaylog,然后將其提交到自身數據庫中,實現主從數據同步。對于數據庫之上的業務層來說,基于MySQL的主從復制集群,單點寫入Master,在event同步到Slave后,讀邏輯可以從任何一個Slave讀取數據,以讀寫分離的方式,大大降低Master的運行負載,同時提升了Slave的資源利用。

對于高可用來說,MySQL Replication有個重要的缺陷:數據復制的時延。在通常情況下,MySQL Replication數據復制是異步的,即是MySQL寫binlog后,發送給Slave并不等待Slave返回確認收到,本地事務就提交了。一旦出現網絡延遲或中斷,數據延遲發送到Slave側,主從數據就會出現不一致。在這個階段中,Master一旦宕機,未發送到Slave的數據就丟失了,無法做到數據的高可用。

為了解決這個問題,google提供了解決方案:半同步和同步復制。在數據異步復制的基礎之上,做了一點修改。半同步復制是Master等待event寫入Slave的relay后,再提交本地,保證Slave一定收到了需要同步的數據。同步復制不不僅是要求Slave收到數據,還要求Slave將數據commit到數據庫中,從而保證每次的數據寫入,主從數據都是一致的。

基于半同步和同步復制,MySQL Replication的高可用得到了質的提升,特別是同步復制。基于同步復制的MySQL Replication集群,每個實例讀取的數據都是一致的,不會存在Slave幻讀。同時,Master宕機后,應用程序切換到任何一個Slave都可以保證讀寫數據的一致性。但是,同步復制帶來了重大的性能下降,這里需要做一個折衷。另外,MySQL Replication的主從切換需要人工介入判斷,同時需要Slave的replaylog提交完畢,故障恢復時間會比較長。

MySQL Fabric

MySQL Fabric是MySQL社區提供的管理多個MySQL服務的擴展。高可用是它設計的主要特性之一。

Fabric將兩個及以上的MySQL實例劃分為一個HA Group。其中的一個是主,其余的都是從。HA Group保證訪問指定HA Group的數據總是可用的。其基礎的數據復制是基于MySQL Replication,然后,Fabric提供了更多的特性:

失效檢測和恢復:Fabric監控HA Group中的主實例,一旦發現主實例失效,Fabric會從HA Group中剩余的從實例中選擇一個,并將其提升為主實例。

讀寫均衡:Fabric可以自動的處理一個HA Group的讀寫操作,將寫操作發送給主實例,而讀請求在多個從實例之間做負載均衡。



圖2. Fabric

MHA

MHA(MySQL-master-ha)是目前廣泛使用的MySQL主從復制的高可用方案。MHA設計目標是自動實現主實例宕機后,從機切換為主,并盡量降低切換時延(通常在10-30s內切換完成)。同時,由MHA保證在切換過程中的數據一致性。MHA對MySQL的主從復制集群非常友好,沒有對集群做任何侵入性的修改。

MHA的一個重點特性是:在主實例宕機后,MHA可以自動的判斷主從復制集群中哪個從實例的relaylog是最新的,并將最新從實例的差異log“應用”到其余的從實例中,從而保證每個實例的數據一致。通常情況下,MHA需要10s左右檢測主實例異常,并將主實例關閉從而避免腦裂。然后再用10s左右將差異的log event同步,并啟用新的Master。整個MHA的RTO時間大約在30s。

MySQL Cluster

MySQL Cluster是一個高度可擴展的,兼容ACID事務的實時數據庫,基于分布式架構不存在單點故障,MySQL Cluster支持自動水平擴容,并能做自動的讀寫負載均衡。

MySQL Cluster使用了一個叫NDB的內存存儲引擎來整合多個MySQL實例,提供一個統一的服務集群。如圖三所示。



圖3. MySQL Cluster組成

MySQL Cluster由SQL Nodes,DataNodes,和NDB Management Server組成。SQL Nodes是應用程序的接口,像普通的mysqld服務一樣,接受用戶的SQL輸入,執行并返回結果。Data Nodes是數據存儲節點,NDB Management Server用來管理集群中的每個node。

MySQL Cluster采用了新的數據分片和容錯的方式來實現數據安全和高可用。其由Partition,Replica,Data Node,Node Group構成。

Partition:NDB一張表的一個數據分片,包含一張表的一部分數據。

Replica:一個Partition的拷貝。一個Partition可以有一個或多個Replica,一個Partition的所有Replica數據都是一致的。

Data Node:Replica的存儲載體,每個Node存儲一個或多個Replica。

Node Group:一個Data Node的集合。



圖4. MySQL Cluster數據高可用

一個MySQL Cluster有4個Node,被分為了兩個Grou。Node1和2歸屬于Group0,Node3和4歸屬于Group1,。有一張表被分為4個Partition,并分別有兩個Replica。Partition0和Partition2的兩個Replica,分別存儲在Node1和Node2上,Pratition1和Partition3的兩個Replica分別存在Node3和Node4上。這樣,對于一張表的一個Partition來說,在整個集群有兩份數據,并分布在兩個獨立的Node上,實現了數據容災。同時,每次對一個Partition的寫操作,都會在兩個Replica上呈現,如果Primary Replica異常,那么Backup Replica可以立即提供服務,實現數據的高可用。

小結

本文分析了目前MySQL使用較多的幾種MySQL數據復制和高可用方案,從使用來看,MySQL Replication是使用最為廣泛的數據復制方案,因為是MySQL原生支持,針對其在不同場景下的一些缺陷,衍生出了半同步復制,強同步復制等數據高可用的方案。在此基礎之上,為了運維方便,MySQL Fabric和MHA應運而生,從不同的方向解決了主從切換時數據一致性問題和流程自動化的問題。此外,隨著分布式系統架構和方案的逐步成熟。MySQL Cluster設計了全新的分布式架構,采用多副本,Sharding等特性,支持水平擴展,做到了5個9的數據庫服務質量保證。

歡迎使用騰訊云的MySQL數據庫:https://www.qcloud.com/product/cdb-overview.html

參考文獻
1.http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster.html
2.https://code.google.com/p/mysql-master-ha/
3.https://www.mysql.com/products/enterprise/fabric.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • 文/Bruce.Liu1 文章大綱MHA簡介1.1. mha組件介紹1.2. 背景和目標MHA原理2.1. MHA...
    BruceLiu1閱讀 10,367評論 4 19
  • 你覺得是生活什么樣的? 是光明的嗎? 可能對于有些人是光明的,以前我覺得生活是沒有那么多煩惱,可當我慢慢...
    hch她和他的貓閱讀 236評論 0 0
  • 8月19日,聽完樸樹的好好地‖巡演上海站激動的一夜沒睡著。是我見的太少,不知道世界上還有這樣純粹真實的我...
    是個傻子沒錯了閱讀 165評論 0 0
  • 1. 作為一個不善交際的理科生,往往我自己說出口的話全部都是我自己內心想要說出來的話,自己不想說的很少說,很少是別...
    鮑魚不吃辣閱讀 152評論 0 0