共計 3378 個字符,預(yù)計需要花費(fèi) 9 分鐘才能閱讀完成。
這篇文章主要介紹了常見的 MySQL 高可用方案有哪些的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇常見的 MySQL 高可用方案有哪些文章都會有所收獲,下面我們一起來看看吧。
1. 概述
我們在考慮 MySQL 數(shù)據(jù)庫的高可用的架構(gòu)時,主要要考慮如下幾方面:
如果數(shù)據(jù)庫發(fā)生了宕機(jī)或者意外中斷等故障,能盡快恢復(fù)數(shù)據(jù)庫的可用性,盡可能的減少停機(jī)時間,保證業(yè)務(wù)不會因?yàn)閿?shù)據(jù)庫的故障而中斷。
用作備份、只讀副本等功能的非主節(jié)點(diǎn)的數(shù)據(jù)應(yīng)該和主節(jié)點(diǎn)的數(shù)據(jù)實(shí)時或者最終保持一致。
當(dāng)業(yè)務(wù)發(fā)生數(shù)據(jù)庫切換時,切換前后的數(shù)據(jù)庫內(nèi)容應(yīng)當(dāng)一致,不會因?yàn)閿?shù)據(jù)缺失或者數(shù)據(jù)不一致而影響業(yè)務(wù)。
關(guān)于對高可用的分級在這里我們不做詳細(xì)的討論,這里只討論常用高可用方案的優(yōu)缺點(diǎn)以及高可用方案的選型。
2. 高可用方案 2.1. 主從或主主半同步復(fù)制
使用雙節(jié)點(diǎn)數(shù)據(jù)庫,搭建單向或者雙向的半同步復(fù)制。在 5.7 以后的版本中,由于 lossless replication、logical 多線程復(fù)制等一些列新特性的引入,使得 MySQL 原生半同步復(fù)制更加可靠。
常見架構(gòu)如下:
通常會和 proxy、keepalived 等第三方軟件同時使用,即可以用來監(jiān)控數(shù)據(jù)庫的健康,又可以執(zhí)行一系列管理命令。如果主庫發(fā)生故障,切換到備庫后仍然可以繼續(xù)使用數(shù)據(jù)庫。
優(yōu)點(diǎn):
架構(gòu)比較簡單,使用原生半同步復(fù)制作為數(shù)據(jù)同步的依據(jù);
雙節(jié)點(diǎn),沒有主機(jī)宕機(jī)后的選主問題,直接切換即可;
雙節(jié)點(diǎn),需求資源少,部署簡單;
缺點(diǎn):
完全依賴于半同步復(fù)制,如果半同步復(fù)制退化為異步復(fù)制,數(shù)據(jù)一致性無法得到保證;
需要額外考慮 haproxy、keepalived 的高可用機(jī)制。
2.2. 半同步復(fù)制優(yōu)化
半同步復(fù)制機(jī)制是可靠的。如果半同步復(fù)制一直是生效的,那么便可以認(rèn)為數(shù)據(jù)是一致的。但是由于網(wǎng)絡(luò)波動等一些客觀原因,導(dǎo)致半同步復(fù)制發(fā)生超時而切換為異步復(fù)制,那么這時便不能保證數(shù)據(jù)的一致性。所以盡可能的保證半同步復(fù)制,便可提高數(shù)據(jù)的一致性。
該方案同樣使用雙節(jié)點(diǎn)架構(gòu),但是在原有半同復(fù)制的基礎(chǔ)上做了功能上的優(yōu)化,使半同步復(fù)制的機(jī)制變得更加可靠。
可參考的優(yōu)化方案如下:
2.2.1. 雙通道復(fù)制
半同步復(fù)制由于發(fā)生超時后,復(fù)制斷開,當(dāng)再次建立起復(fù)制時,同時建立兩條通道,其中一條半同步復(fù)制通道從當(dāng)前位置開始復(fù)制,保證從機(jī)知道當(dāng)前主機(jī)執(zhí)行的進(jìn)度。另外一條異步復(fù)制通道開始追補(bǔ)從機(jī)落后的數(shù)據(jù)。當(dāng)異步復(fù)制通道追趕到半同步復(fù)制的起始位置時,恢復(fù)半同步復(fù)制。
2.2.2. binlog 文件服務(wù)器
搭建兩條半同步復(fù)制通道,其中連接文件服務(wù)器的半同步通道正常情況下不啟用,當(dāng)主從的半同步復(fù)制發(fā)生網(wǎng)絡(luò)問題退化后,啟動與文件服務(wù)器的半同步復(fù)制通道。當(dāng)主從半同步復(fù)制恢復(fù)后,關(guān)閉與文件服務(wù)器的半同步復(fù)制通道。
優(yōu)點(diǎn):
雙節(jié)點(diǎn),需求資源少,部署簡單;
架構(gòu)簡單,沒有選主的問題,直接切換即可;
相比于原生復(fù)制,優(yōu)化后的半同步復(fù)制更能保證數(shù)據(jù)的一致性。
缺點(diǎn):
需要修改內(nèi)核源碼或者使用 mysql 通信協(xié)議。需要對源碼有一定的了解,并能做一定程度的二次開發(fā)。
依舊依賴于半同步復(fù)制,沒有從根本上解決數(shù)據(jù)一致性問題。
2.3. 高可用架構(gòu)優(yōu)化
將雙節(jié)點(diǎn)數(shù)據(jù)庫擴(kuò)展到多節(jié)點(diǎn)數(shù)據(jù)庫,或者多節(jié)點(diǎn)數(shù)據(jù)庫集群。可以根據(jù)自己的需要選擇一主兩從、一主多從或者多主多從的集群。
由于半同步復(fù)制,存在接收到一個從機(jī)的成功應(yīng)答即認(rèn)為半同步復(fù)制成功的特性,所以多從半同步復(fù)制的可靠性要優(yōu)于單從半同步復(fù)制的可靠性。并且多節(jié)點(diǎn)同時宕機(jī)的幾率也要小于單節(jié)點(diǎn)宕機(jī)的幾率,所以多節(jié)點(diǎn)架構(gòu)在一定程度上可以認(rèn)為高可用性是好于雙節(jié)點(diǎn)架構(gòu)。
但是由于數(shù)據(jù)庫數(shù)量較多,所以需要數(shù)據(jù)庫管理軟件來保證數(shù)據(jù)庫的可維護(hù)性。可以選擇 MMM、MHA 或者各個版本的 proxy 等等。常見方案如下:
2.3.1. MHA+ 多節(jié)點(diǎn)集群
MHA Manager 會定時探測集群中的 master 節(jié)點(diǎn),當(dāng) master 出現(xiàn)故障時,它可以自動將最新數(shù)據(jù)的 slave 提升為新的 master,然后將所有其他的 slave 重新指向新的 master,整個故障轉(zhuǎn)移過程對應(yīng)用程序完全透明。
MHA Node 運(yùn)行在每臺 MySQL 服務(wù)器上,主要作用是切換時處理二進(jìn)制日志,確保切換盡量少丟數(shù)據(jù)。
MHA 也可以擴(kuò)展到如下的多節(jié)點(diǎn)集群:
優(yōu)點(diǎn):
可以進(jìn)行故障的自動檢測和轉(zhuǎn)移;
可擴(kuò)展性較好,可以根據(jù)需要擴(kuò)展 MySQL 的節(jié)點(diǎn)數(shù)量和結(jié)構(gòu);
相比于雙節(jié)點(diǎn)的 MySQL 復(fù)制,三節(jié)點(diǎn) / 多節(jié)點(diǎn)的 MySQL 發(fā)生不可用的概率更低
缺點(diǎn):
至少需要三節(jié)點(diǎn),相對于雙節(jié)點(diǎn)需要更多的資源;
邏輯較為復(fù)雜,發(fā)生故障后排查問題,定位問題更加困難;
數(shù)據(jù)一致性仍然靠原生半同步復(fù)制保證,仍然存在數(shù)據(jù)不一致的風(fēng)險;
可能因?yàn)榫W(wǎng)絡(luò)分區(qū)發(fā)生腦裂現(xiàn)象;
2.3.2. zookeeper+proxy
Zookeeper 使用分布式算法保證集群數(shù)據(jù)的一致性,使用 zookeeper 可以有效的保證 proxy 的高可用性,可以較好的避免網(wǎng)絡(luò)分區(qū)現(xiàn)象的產(chǎn)生。
優(yōu)點(diǎn):
較好的保證了整個系統(tǒng)的高可用性,包括 proxy、MySQL;
擴(kuò)展性較好,可以擴(kuò)展為大規(guī)模集群;
缺點(diǎn):
數(shù)據(jù)一致性仍然依賴于原生的 mysql 半同步復(fù)制;
引入 zk,整個系統(tǒng)的邏輯變得更加復(fù)雜;
2.4. 共享存儲
共享存儲實(shí)現(xiàn)了數(shù)據(jù)庫服務(wù)器和存儲設(shè)備的解耦,不同數(shù)據(jù)庫之間的數(shù)據(jù)同步不再依賴于 MySQL 的原生復(fù)制功能,而是通過磁盤數(shù)據(jù)同步的手段,來保證數(shù)據(jù)的一致性。
2.4.1. SAN 共享儲存
SAN 的概念是允許存儲設(shè)備和處理器(服務(wù)器)之間建立直接的高速網(wǎng)絡(luò)(與 LAN 相比)連接,通過這種連接實(shí)現(xiàn)數(shù)據(jù)的集中式存儲。常用架構(gòu)如下:
使用共享存儲時,MySQL 服務(wù)器能夠正常掛載文件系統(tǒng)并操作,如果主庫發(fā)生宕機(jī),備庫可以掛載相同的文件系統(tǒng),保證主庫和備庫使用相同的數(shù)據(jù)。
優(yōu)點(diǎn):
兩節(jié)點(diǎn)即可,部署簡單,切換邏輯簡單;
很好的保證數(shù)據(jù)的強(qiáng)一致性;
不會因?yàn)?MySQL 的邏輯錯誤發(fā)生數(shù)據(jù)不一致的情況;
缺點(diǎn):
需要考慮共享存儲的高可用;
價格昂貴;
2.4.2. DRBD 磁盤復(fù)制
DRBD 是一種基于軟件、基于網(wǎng)絡(luò)的塊復(fù)制存儲解決方案,主要用于對服務(wù)器之間的磁盤、分區(qū)、邏輯卷等進(jìn)行數(shù)據(jù)鏡像,當(dāng)用戶將數(shù)據(jù)寫入本地磁盤時,還會將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)中另一臺主機(jī)的磁盤上,這樣的本地主機(jī) (主節(jié)點(diǎn)) 與遠(yuǎn)程主機(jī) (備節(jié)點(diǎn)) 的數(shù)據(jù)就可以保證實(shí)時同步。常用架構(gòu)如下:
當(dāng)本地主機(jī)出現(xiàn)問題,遠(yuǎn)程主機(jī)上還保留著一份相同的數(shù)據(jù),可以繼續(xù)使用,保證了數(shù)據(jù)的安全。
DRBD 是 linux 內(nèi)核模塊實(shí)現(xiàn)的快級別的同步復(fù)制技術(shù),可以與 SAN 達(dá)到相同的共享存儲效果。
優(yōu)點(diǎn):
兩節(jié)點(diǎn)即可,部署簡單,切換邏輯簡單;
相比于 SAN 儲存網(wǎng)絡(luò),價格低廉;
保證數(shù)據(jù)的強(qiáng)一致性;
缺點(diǎn):
對 io 性能影響較大;
從庫不提供讀操作;
2.5. 分布式協(xié)議
分布式協(xié)議可以很好解決數(shù)據(jù)一致性問題。比較常見的方案如下:
2.5.1. MySQL cluster
MySQL cluster 是官方集群的部署方案,通過使用 NDB 存儲引擎實(shí)時備份冗余數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)庫的高可用性和數(shù)據(jù)一致性。
優(yōu)點(diǎn):
全部使用官方組件,不依賴于第三方軟件;
可以實(shí)現(xiàn)數(shù)據(jù)的強(qiáng)一致性;
缺點(diǎn):
國內(nèi)使用的較少;
配置較復(fù)雜,需要使用 NDB 儲存引擎,與 MySQL 常規(guī)引擎存在一定差異;
至少三節(jié)點(diǎn);
2.5.2. Galera
基于 Galera 的 MySQL 高可用集群,是多主數(shù)據(jù)同步的 MySQL 集群解決方案,使用簡單,沒有單點(diǎn)故障,可用性高。常見架構(gòu)如下:
優(yōu)點(diǎn):
多主寫入,無延遲復(fù)制,能保證數(shù)據(jù)強(qiáng)一致性;
有成熟的社區(qū),有互聯(lián)網(wǎng)公司在大規(guī)模的使用;
自動故障轉(zhuǎn)移,自動添加、剔除節(jié)點(diǎn);
缺點(diǎn):
需要為原生 MySQL 節(jié)點(diǎn)打 wsrep 補(bǔ)丁
只支持 innodb 儲存引擎
至少三節(jié)點(diǎn);
2.5.3. POAXS
Paxos 算法解決的問題是一個分布式系統(tǒng)如何就某個值(決議)達(dá)成一致。這個算法被認(rèn)為是同類算法中最有效的。Paxos 與 MySQL 相結(jié)合可以實(shí)現(xiàn)在分布式的 MySQL 數(shù)據(jù)的強(qiáng)一致性。常見架構(gòu)如下:
優(yōu)點(diǎn):
多主寫入,無延遲復(fù)制,能保證數(shù)據(jù)強(qiáng)一致性;
有成熟理論基礎(chǔ);
自動故障轉(zhuǎn)移,自動添加、剔除節(jié)點(diǎn);
缺點(diǎn):
只支持 innodb 儲存引擎
至少三節(jié)點(diǎn)。
關(guān)于“常見的 MySQL 高可用方案有哪些”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“常見的 MySQL 高可用方案有哪些”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。