【博文推薦】探索MySQL高可用架構(gòu)之MHA(概念和架構(gòu)篇)
| 本文出自51CTO博客博主走不完的路,看不完的書! ,如有任何問題請(qǐng)進(jìn)入博主頁面互動(dòng)討論。 |
什么是高可用性?
很多公司的服務(wù)都是24小時(shí)*365天不間斷的。比如Call Center。這就要求高可用性。再比如購物網(wǎng)站,必須隨時(shí)都可以交易。那么當(dāng)購物網(wǎng)的server掛了一個(gè)的時(shí)候,不能對(duì)業(yè)務(wù)產(chǎn)生任何影響。這就是高可用性。
如何處理failover?
解釋failover,意思就是當(dāng)服務(wù)器down掉,或者出現(xiàn)錯(cuò)誤的時(shí)候,可以自動(dòng)的切換到其他待命的服務(wù)器,不影響服務(wù)器上App的運(yùn)行。
以MySQL為例,什么樣的架構(gòu)才能保證其高可用性呢?
MySQL replication with manual failover
同步數(shù)據(jù)是采用MySQL replication的方法,在MySQL分表分塊到主從已經(jīng)解釋。簡(jiǎn)單的說就是從庫根據(jù)主庫的日志來做相應(yīng)的處理,保證數(shù)據(jù)的一致。通常還配合MySQL Proxy或Amoeba等進(jìn)行讀寫分離減少服務(wù)器壓力。
manual failover,顯然當(dāng)Master掛掉時(shí),利用本方式是需要手動(dòng)來處理failover,一般來說是將slave更改為server。
Master-Master with MMM manager(Multi-Master Replication Manager)
同步數(shù)據(jù)的方式是Multi-Master Replication Manager,在MySQL分表分塊到主從解釋,多主多從的設(shè)置,是一個(gè)loop環(huán)形,每個(gè)DB既是前一個(gè)DB的Slave又是后一個(gè)的Master。優(yōu)勢(shì)就在于,一個(gè)Master掛掉,也還可以繼續(xù)DB操作。每個(gè)DB都可以進(jìn)行讀寫,分散壓力。
Heartbeat/SAN
處理failover的方式是Heartbeat,Heartbeat可以看成是一組程序,監(jiān)控管理各個(gè)node間連接的網(wǎng)絡(luò)。當(dāng)node出現(xiàn)錯(cuò)誤時(shí),自動(dòng)啟動(dòng)其他node開始服務(wù)。Heartbeat必須解決的一個(gè)問題就是split brain,在網(wǎng)絡(luò)中的一個(gè)node down掉后,每個(gè)node都會(huì)認(rèn)為其他node down掉并嘗試開始服務(wù),因?yàn)楫a(chǎn)生數(shù)據(jù)沖突。
通過SAN來共享數(shù)據(jù)
SAN:Storage Area Network,是一種LAN來處理大數(shù)據(jù)量的傳輸,提供了計(jì)算機(jī)和存儲(chǔ)系統(tǒng)之間的數(shù)據(jù)傳輸。各個(gè)計(jì)算機(jī)組成的集群可以通過SAN共享存儲(chǔ)。
Heartbeat/DRBD
處理failover的方式依舊是Heartbeat。
同步數(shù)據(jù)使用DRBD:Distributed Replicated Block Device(DRBD)是一個(gè)用軟件實(shí)現(xiàn)的、無共享的、服務(wù)器之間鏡像塊設(shè)備內(nèi)容的存儲(chǔ)復(fù)制解決方案。和SAN網(wǎng)絡(luò)不同,它并不共享存儲(chǔ),而是通過服務(wù)器之間的網(wǎng)絡(luò)復(fù)制數(shù)據(jù)。
MySQL Cluster
MySQL Cluster也是由各個(gè)DB node組成一個(gè)cluster,在這個(gè)cluster中由網(wǎng)絡(luò)連接。可以自由的增減node的個(gè)數(shù)來對(duì)應(yīng)數(shù)據(jù)庫壓力。
MySQL高可用性大殺器之MHA
MHA(Master High Availability)目前在MySQL高可用方面是一個(gè)相對(duì)成熟的解決方案,它由日本DeNA公司youshimaton(現(xiàn)就職于 Facebook公司)開發(fā),是一套優(yōu)秀的作為MySQL高可用性環(huán)境下故障切換和主從提升的高可用軟件。在MySQL故障切換過程中,MHA能做到在 0~30秒之內(nèi)自動(dòng)完成數(shù)據(jù)庫的故障切換操作,并且在進(jìn)行故障切換的過程中,MHA能在最大程度上保證數(shù)據(jù)的一致性,以達(dá)到真正意義上的高可用。
該軟件由兩部分組成:MHA Manager(管理節(jié)點(diǎn))和MHA Node(數(shù)據(jù)節(jié)點(diǎn))。MHA Manager可以單獨(dú)部署在一臺(tái)獨(dú)立的機(jī)器上管理多個(gè)master-slave集群,也可以部署在一臺(tái)slave節(jié)點(diǎn)上。MHA Node運(yùn)行在每臺(tái)MySQL服務(wù)器上,MHA Manager會(huì)定時(shí)探測(cè)集群中的master節(jié)點(diǎn),當(dāng)master出現(xiàn)故障時(shí),它可以自動(dòng)將最新數(shù)據(jù)的slave提升為新的master,然后將所有其 他的slave重新指向新的master。整個(gè)故障轉(zhuǎn)移過程對(duì)應(yīng)用程序完全透明。
在 MHA自動(dòng)故障切換過程中,MHA試圖從宕機(jī)的主服務(wù)器上保存二進(jìn)制日志,最大程度的保證數(shù)據(jù)的不丟失,但這并不總是可行的。例如,如果主服務(wù)器 硬件故障或無法通過ssh訪問,MHA沒法保存二進(jìn)制日志,只進(jìn)行故障轉(zhuǎn)移而丟失了最新的數(shù)據(jù)。使用MySQL 5.5的半同步復(fù)制,可以大大降低數(shù)據(jù)丟失的風(fēng)險(xiǎn)。MHA可以與半同步復(fù)制結(jié)合起來。如果只有一個(gè)slave已經(jīng)收到了最新的二進(jìn)制日志,MHA可以將最 新的二進(jìn)制日志應(yīng)用于其他所有的slave服務(wù)器上,因此可以保證所有節(jié)點(diǎn)的數(shù)據(jù)一致性。
目前MHA主要支持一主多從的架構(gòu),要搭建MHA,要求一個(gè)復(fù)制集群中必須最少有三臺(tái)數(shù)據(jù)庫服務(wù)器,一主二從,即一臺(tái)充當(dāng)master,一臺(tái)充當(dāng)備用 master,另外一臺(tái)充當(dāng)從庫,因?yàn)橹辽傩枰_(tái)服務(wù)器,出于機(jī)器成本的考慮,淘寶也在該基礎(chǔ)上進(jìn)行了改造,目前淘寶TMHA已經(jīng)支持一主一從。
官方介紹:https://code.google.com/p/mysql-master-ha/
#p#
本次架構(gòu)實(shí)現(xiàn)功能
a.一主庫,三個(gè)從庫(其中1個(gè)為備主),實(shí)現(xiàn)ABBB復(fù)制
b.使用Atlas實(shí)現(xiàn)讀寫分離,主庫和備主庫接收寫操作,從庫接收讀操作
c.使用Mha實(shí)現(xiàn)現(xiàn)有架構(gòu)的高可用
d.使用keepalived實(shí)現(xiàn)vip的漂移
e.手工編寫shell,修復(fù)Mha的不足
- e1.修復(fù)當(dāng)AB故障切換一次后,mha-manager會(huì)自動(dòng)退出
- e2.修復(fù)原主庫,出問題后,修復(fù)后不能自動(dòng)加入現(xiàn)有AB集群
- e3.關(guān)于relay log的清除
本次實(shí)現(xiàn)架構(gòu)圖

本次架構(gòu)主機(jī)劃分

軟件版本

安裝路徑





























