溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

MySQL高可用性方案分析

發(fā)布時(shí)間:2021-12-04 14:57:21 來(lái)源:億速云 閱讀:127 作者:iii 欄目:云計(jì)算

本篇內(nèi)容主要講解“MySQL高可用性方案分析”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“MySQL高可用性方案分析”吧!

MySQL數(shù)據(jù)庫(kù)是目前開(kāi)源應(yīng)用最大的關(guān)系型數(shù)據(jù)庫(kù),有海量的應(yīng)用將數(shù)據(jù)存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)中。存儲(chǔ)數(shù)據(jù)的安全性和可靠性是生產(chǎn)數(shù)據(jù)庫(kù)的關(guān)注重點(diǎn)。

MySQL Replication

MySQL Replication是MySQL官方提供的主從同步方案,用于將一個(gè)MySQL實(shí)例的數(shù)據(jù),同步到另一個(gè)實(shí)例中。Replication為保證數(shù)據(jù)安全做了重要的保證,也是現(xiàn)在運(yùn)用最廣的MySQL容災(zāi)方案。Replication用兩個(gè)或以上的實(shí)例搭建了MySQL主從復(fù)制集群,提供單點(diǎn)寫(xiě)入,多點(diǎn)讀取的服務(wù),實(shí)現(xiàn)了讀的scale out。

圖1. MySQL Replication主從復(fù)制集群

如圖一所示,一個(gè)主實(shí)例(M),三個(gè)從實(shí)例(S),通過(guò)replication,Master生成event的binlog,然后發(fā)給slave,Slave將event寫(xiě)入relaylog,然后將其提交到自身數(shù)據(jù)庫(kù)中,實(shí)現(xiàn)主從數(shù)據(jù)同步。對(duì)于數(shù)據(jù)庫(kù)之上的業(yè)務(wù)層來(lái)說(shuō),基于MySQL的主從復(fù)制集群,單點(diǎn)寫(xiě)入Master,在event同步到Slave后,讀邏輯可以從任何一個(gè)Slave讀取數(shù)據(jù),以讀寫(xiě)分離的方式,大大降低Master的運(yùn)行負(fù)載,同時(shí)提升了Slave的資源利用。

對(duì)于高可用來(lái)說(shuō),MySQL Replication有個(gè)重要的缺陷:數(shù)據(jù)復(fù)制的時(shí)延。在通常情況下,MySQL Replication數(shù)據(jù)復(fù)制是異步的,即是MySQL寫(xiě)binlog后,發(fā)送給Slave并不等待Slave返回確認(rèn)收到,本地事務(wù)就提交了。一旦出現(xiàn)網(wǎng)絡(luò)延遲或中斷,數(shù)據(jù)延遲發(fā)送到Slave側(cè),主從數(shù)據(jù)就會(huì)出現(xiàn)不一致。在這個(gè)階段中,Master一旦宕機(jī),未發(fā)送到Slave的數(shù)據(jù)就丟失了,無(wú)法做到數(shù)據(jù)的高可用。

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

基于半同步和同步復(fù)制,MySQL Replication的高可用得到了質(zhì)的提升,特別是同步復(fù)制?;谕綇?fù)制的MySQL Replication集群,每個(gè)實(shí)例讀取的數(shù)據(jù)都是一致的,不會(huì)存在Slave幻讀。同時(shí),Master宕機(jī)后,應(yīng)用程序切換到任何一個(gè)Slave都可以保證讀寫(xiě)數(shù)據(jù)的一致性。但是,同步復(fù)制帶來(lái)了重大的性能下降,這里需要做一個(gè)折衷。另外,MySQL Replication的主從切換需要人工介入判斷,同時(shí)需要Slave的replaylog提交完畢,故障恢復(fù)時(shí)間會(huì)比較長(zhǎng)。

MySQL Fabric

MySQL Fabric是MySQL社區(qū)提供的管理多個(gè)MySQL服務(wù)的擴(kuò)展。高可用是它設(shè)計(jì)的主要特性之一。

Fabric將兩個(gè)及以上的MySQL實(shí)例劃分為一個(gè)HA Group。其中的一個(gè)是主,其余的都是從。HA Group保證訪問(wèn)指定HA Group的數(shù)據(jù)總是可用的。其基礎(chǔ)的數(shù)據(jù)復(fù)制是基于MySQL Replication,然后,F(xiàn)abric提供了更多的特性:

失效檢測(cè)和恢復(fù):Fabric監(jiān)控HA Group中的主實(shí)例,一旦發(fā)現(xiàn)主實(shí)例失效,F(xiàn)abric會(huì)從HA Group中剩余的從實(shí)例中選擇一個(gè),并將其提升為主實(shí)例。

讀寫(xiě)均衡:Fabric可以自動(dòng)的處理一個(gè)HA Group的讀寫(xiě)操作,將寫(xiě)操作發(fā)送給主實(shí)例,而讀請(qǐng)求在多個(gè)從實(shí)例之間做負(fù)載均衡

圖2. Fabric

MHA

MHA(MySQL-master-ha)是目前廣泛使用的MySQL主從復(fù)制的高可用方案。MHA設(shè)計(jì)目標(biāo)是自動(dòng)實(shí)現(xiàn)主實(shí)例宕機(jī)后,從機(jī)切換為主,并盡量降低切換時(shí)延(通常在10-30s內(nèi)切換完成)。同時(shí),由MHA保證在切換過(guò)程中的數(shù)據(jù)一致性。MHA對(duì)MySQL的主從復(fù)制集群非常友好,沒(méi)有對(duì)集群做任何侵入性的修改。

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

MySQL Cluster

MySQL Cluster是一個(gè)高度可擴(kuò)展的,兼容ACID事務(wù)的實(shí)時(shí)數(shù)據(jù)庫(kù),基于分布式架構(gòu)不存在單點(diǎn)故障,MySQL Cluster支持自動(dòng)水平擴(kuò)容,并能做自動(dòng)的讀寫(xiě)負(fù)載均衡。

MySQL Cluster使用了一個(gè)叫NDB的內(nèi)存存儲(chǔ)引擎來(lái)整合多個(gè)MySQL實(shí)例,提供一個(gè)統(tǒng)一的服務(wù)集群。如圖三所示。

圖3. MySQL Cluster組成

MySQL Cluster由SQL Nodes,DataNodes,和NDB Management Server組成。SQL Nodes是應(yīng)用程序的接口,像普通的mysqld服務(wù)一樣,接受用戶(hù)的SQL輸入,執(zhí)行并返回結(jié)果。Data Nodes是數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),NDB Management Server用來(lái)管理集群中的每個(gè)node。

MySQL Cluster采用了新的數(shù)據(jù)分片和容錯(cuò)的方式來(lái)實(shí)現(xiàn)數(shù)據(jù)安全和高可用。其由Partition,Replica,Data Node,Node Group構(gòu)成。

Partition:NDB一張表的一個(gè)數(shù)據(jù)分片,包含一張表的一部分?jǐn)?shù)據(jù)。

Replica:一個(gè)Partition的拷貝。一個(gè)Partition可以有一個(gè)或多個(gè)Replica,一個(gè)Partition的所有Replica數(shù)據(jù)都是一致的。

Data Node:Replica的存儲(chǔ)載體,每個(gè)Node存儲(chǔ)一個(gè)或多個(gè)Replica。

Node Group:一個(gè)Data Node的集合。

圖4. MySQL Cluster數(shù)據(jù)高可用

一個(gè)MySQL Cluster有4個(gè)Node,被分為了兩個(gè)Grou。Node1和2歸屬于Group0,Node3和4歸屬于Group1,。有一張表被分為4個(gè)Partition,并分別有兩個(gè)Replica。Partition0和Partition2的兩個(gè)Replica,分別存儲(chǔ)在Node1和Node2上,Pratition1和Partition3的兩個(gè)Replica分別存在Node3和Node4上。這樣,對(duì)于一張表的一個(gè)Partition來(lái)說(shuō),在整個(gè)集群有兩份數(shù)據(jù),并分布在兩個(gè)獨(dú)立的Node上,實(shí)現(xiàn)了數(shù)據(jù)容災(zāi)。同時(shí),每次對(duì)一個(gè)Partition的寫(xiě)操作,都會(huì)在兩個(gè)Replica上呈現(xiàn),如果Primary Replica異常,那么Backup Replica可以立即提供服務(wù),實(shí)現(xiàn)數(shù)據(jù)的高可用。

到此,相信大家對(duì)“MySQL高可用性方案分析”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI