MySQL集群采用了Share-Nothing架構(gòu),如圖3-24所示。每臺數(shù)據(jù)庫服務(wù)器都是完全獨立的計算機系統(tǒng),通過網(wǎng)絡(luò)相連,不共享任何資源。這是一個具有較高可擴展性的架構(gòu),當數(shù)據(jù)庫處理能力不足時,可以通過增加服務(wù)器托管數(shù)量來提高處理能力,同時多個服務(wù)器也增加了數(shù)據(jù)庫并發(fā)訪問的能力。

集群MySQL通過表單劃分(Sharding)的方式將一張大表劃分為若干個小表,分別存儲在不同的數(shù)據(jù)庫服務(wù)器上,這樣就從邏輯上保證了數(shù)據(jù)庫的可擴展性。但是表單的劃分沒有固定的方式,主要根據(jù)業(yè)務(wù)的需要進行針對性的劃分,這就對數(shù)據(jù)庫的管理人員提出了非常高的要求,如果劃分得不科學(xué),則查詢經(jīng)常會跨表單和服務(wù)器,性能就會嚴重下降。
集群MySQL通過主從備份和讀副本技術(shù)提高可靠性和數(shù)據(jù)處理能力,如圖3-25所示。Master A為主數(shù)據(jù)庫,Master B為從數(shù)據(jù)庫,組成主從備份。如果Master B檢測到Master A癱瘓,則立刻接替Master A的位置,成為主服務(wù)器,并會重新創(chuàng)建一臺從服務(wù)器。在數(shù)據(jù)庫升級時,先對從數(shù)據(jù)庫進行升級,然后將從數(shù)據(jù)庫轉(zhuǎn)變?yōu)橹鲾?shù)據(jù)庫,再對新的從數(shù)據(jù)庫進行升級,這樣就可以實現(xiàn)數(shù)據(jù)庫的實時升級,保證業(yè)務(wù)的連續(xù)性;為了提高數(shù)據(jù)庫的并發(fā)處理能力,集群MySQL設(shè)置了若干個讀副本(Slave),顧名思義,讀副本中的數(shù)據(jù)只能讀,不能寫,寫操作只能由主數(shù)據(jù)庫來完成。
