MySQL集群采用了Share-Nothing架構(gòu),如圖3-24所示。每臺(tái)數(shù)據(jù)庫(kù)服務(wù)器都是完全獨(dú)立的計(jì)算機(jī)系統(tǒng),通過(guò)網(wǎng)絡(luò)相連,不共享任何資源。這是一個(gè)具有較高可擴(kuò)展性的架構(gòu),當(dāng)數(shù)據(jù)庫(kù)處理能力不足時(shí),可以通過(guò)增加服務(wù)器托管數(shù)量來(lái)提高處理能力,同時(shí)多個(gè)服務(wù)器也增加了數(shù)據(jù)庫(kù)并發(fā)訪(fǎng)問(wèn)的能力。
集群MySQL通過(guò)表單劃分(Sharding)的方式將一張大表劃分為若干個(gè)小表,分別存儲(chǔ)在不同的數(shù)據(jù)庫(kù)服務(wù)器上,這樣就從邏輯上保證了數(shù)據(jù)庫(kù)的可擴(kuò)展性。但是表單的劃分沒(méi)有固定的方式,主要根據(jù)業(yè)務(wù)的需要進(jìn)行針對(duì)性的劃分,這就對(duì)數(shù)據(jù)庫(kù)的管理人員提出了非常高的要求,如果劃分得不科學(xué),則查詢(xún)經(jīng)常會(huì)跨表單和服務(wù)器,性能就會(huì)嚴(yán)重下降。
集群MySQL通過(guò)主從備份和讀副本技術(shù)提高可靠性和數(shù)據(jù)處理能力,如圖3-25所示。Master A為主數(shù)據(jù)庫(kù),Master B為從數(shù)據(jù)庫(kù),組成主從備份。如果Master B檢測(cè)到Master A癱瘓,則立刻接替Master A的位置,成為主服務(wù)器,并會(huì)重新創(chuàng)建一臺(tái)從服務(wù)器。在數(shù)據(jù)庫(kù)升級(jí)時(shí),先對(duì)從數(shù)據(jù)庫(kù)進(jìn)行升級(jí),然后將從數(shù)據(jù)庫(kù)轉(zhuǎn)變?yōu)橹鲾?shù)據(jù)庫(kù),再對(duì)新的從數(shù)據(jù)庫(kù)進(jìn)行升級(jí),這樣就可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)的實(shí)時(shí)升級(jí),保證業(yè)務(wù)的連續(xù)性;為了提高數(shù)據(jù)庫(kù)的并發(fā)處理能力,集群MySQL設(shè)置了若干個(gè)讀副本(Slave),顧名思義,讀副本中的數(shù)據(jù)只能讀,不能寫(xiě),寫(xiě)操作只能由主數(shù)據(jù)庫(kù)來(lái)完成。