詳解數(shù)據(jù)庫(kù)高可用架構(gòu)之路
數(shù)據(jù)庫(kù)高可用架構(gòu)對(duì)于我們這些應(yīng)用端開(kāi)發(fā)的人來(lái)說(shuō)是一個(gè)比較陌生的領(lǐng)域,是在具體的數(shù)據(jù)庫(kù)產(chǎn)品之上搭建的環(huán)境,需要像DBA這樣對(duì)數(shù)據(jù)庫(kù)產(chǎn)品有足夠的了解才能有所涉及,雖然不能深入其中,但可以通過(guò)一些經(jīng)典的高可用架構(gòu)學(xué)習(xí)其中的思想。就我所了解到的有以下幾種:
◆MySQL Replication
◆MySQL Cluster
◆Oracle RAC
◆IBM HACMP
◆Oracle ASM
MySQL Replication
MySQL Replication就是通過(guò)異步復(fù)制多個(gè)copy以達(dá)到提高可用性的目的,常規(guī)的復(fù)制架構(gòu)有以下幾種:
◆Master-Slaves
◆Master-Master
◆Master-Master-Salves
1)Master-Slaves
Master-Slaves是最常用的提高可用的方法,特別是在互聯(lián)網(wǎng)應(yīng)用中,讀遠(yuǎn)遠(yuǎn)大于寫(xiě),因此提高讀的可用性是首當(dāng)其中的,Master- Slaves就是讓寫(xiě)的操作集中在一臺(tái)數(shù)據(jù)庫(kù)Master上,然后這個(gè)Master會(huì)把更新的操作復(fù)制到其他數(shù)據(jù)庫(kù)Slaves上,讀的操作都發(fā)生在 Slaves上,架構(gòu)圖如下所示:
如上圖在SlaveC不可用時(shí),讀和寫(xiě)都不會(huì)中斷,等SlaveC恢復(fù)后會(huì)自動(dòng)同步丟失的數(shù)據(jù),又能重新投入運(yùn)轉(zhuǎn),可維護(hù)性非常好。但如果 Master有問(wèn)題就麻煩了,因此它只解決了讀的高可用性,但不保證寫(xiě)的高可用性。關(guān)于Master-Slaves的實(shí)戰(zhàn)可參考以前的一篇博文構(gòu)建高性能web之路------mysql讀寫(xiě)分離實(shí)戰(zhàn)
2)Master-Master
為解決上面談的寫(xiě)的高可用性,MySQL提供了Master-Master的復(fù)制架構(gòu),如下所示:
一般說(shuō)來(lái)都向MasterA寫(xiě),MasterA同步數(shù)據(jù)到MasterB,當(dāng)MasterA有問(wèn)題時(shí),會(huì)自動(dòng)切換到MasterB,等MasterA恢復(fù)時(shí),MasterB同步數(shù)據(jù)到MasterA
3)Master-Master-Salves
Master-Master-Salves是結(jié)合上面兩種方案,是一種同時(shí)提供讀和寫(xiě)高可用的復(fù)制架構(gòu),如下圖所示:
MySQL Cluster
MySQL Cluster主要由三個(gè)部分組成:
◆SQL服務(wù)器節(jié)點(diǎn)
◆NDB數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)
◆監(jiān)控和管理節(jié)點(diǎn)
三個(gè)部門(mén)的組成結(jié)構(gòu)如下圖所示:
這樣的分層也是由MySQL本身把SQL處理和存儲(chǔ)分開(kāi)的架構(gòu)相關(guān)系的,關(guān)于MySQL的架構(gòu)可見(jiàn)以前的博文設(shè)計(jì)與開(kāi)發(fā)應(yīng)用服務(wù)器(一)------常見(jiàn)模式
這樣一來(lái)MySQL Cluster就可以分別在SQL處理和存儲(chǔ)兩個(gè)層次上做高可用的復(fù)制策略。在SQL處理層次上,比較容易做集群,因?yàn)檫@些SQL處理是無(wú)狀態(tài)性的,完全可以通過(guò)增加機(jī)器的方式增強(qiáng)可用性。在存儲(chǔ)層次上,通過(guò)對(duì)每個(gè)節(jié)點(diǎn)進(jìn)行備份的形式增加存儲(chǔ)的可用性,這類(lèi)似與MySQL Replication,結(jié)構(gòu)圖如下所示:
Oracle RAC
Oracle RAC和MySQL Cluster有些相似,但主要集中在SQL處理層的高可用性,而在存儲(chǔ)上體現(xiàn)不多,結(jié)構(gòu)圖如下所示:
它的主要優(yōu)點(diǎn)就是對(duì)應(yīng)用透明,并且通過(guò)Heartbeat檢測(cè)可用性非常高,主要缺點(diǎn)就是存儲(chǔ)是共享的,存儲(chǔ)上可擴(kuò)展能力不足。
IBM HACMP
IBM HACMP與Oracle RAC也是類(lèi)似,主要用于雙機(jī)互備,運(yùn)行流程如下所示:
1)作為雙機(jī)系統(tǒng)的兩臺(tái)服務(wù)器(主機(jī)A和B)同時(shí)運(yùn)行在Hacmp環(huán)境中;
2)服務(wù)器除正常運(yùn)行自機(jī)的應(yīng)用外,同時(shí)又作為對(duì)方的備份主機(jī);
3)兩臺(tái)主機(jī)系統(tǒng)(A和B)在整個(gè)運(yùn)行過(guò)程中,通過(guò) “心跳線”相互監(jiān)測(cè)對(duì)方的運(yùn)行情況(包括系統(tǒng)的軟硬件運(yùn)行、網(wǎng)絡(luò)通訊和應(yīng)用運(yùn)行情況等);
4)一旦發(fā)現(xiàn)對(duì)方主機(jī)的運(yùn)行不正常(出故障)時(shí),故障機(jī)上的應(yīng)用就會(huì)立即停止運(yùn)行,本機(jī)(故障機(jī)的備份機(jī))就會(huì)立即在自己的機(jī)器上啟動(dòng)故障機(jī)上的應(yīng)用,把故障機(jī)的應(yīng)用及其資源(包括用到的IP地址和磁盤(pán)空間等)接管過(guò)來(lái),使故障機(jī)上的應(yīng)用在本機(jī)繼續(xù)運(yùn)行;
5)應(yīng)用和資源的接管過(guò)程由Ha軟件自動(dòng)完成,無(wú)需人工干預(yù);
6)當(dāng)兩臺(tái)主機(jī)正常工作時(shí),也可以根據(jù)需要將其中一臺(tái)機(jī)上的應(yīng)用人為切換到另一臺(tái)機(jī)(備份機(jī))上運(yùn)行。
Oracle ASM
Oracle ASM主要提供存儲(chǔ)的可擴(kuò)展性,通過(guò)自動(dòng)化的存儲(chǔ)管理加上后端可擴(kuò)展性的存儲(chǔ)陣列達(dá)到高可用性,結(jié)構(gòu)圖如下所示:
原文鏈接:http://blog.csdn.net/cutesource/archive/2010/08/26/5841783.aspx
【編輯推薦】