眾所周知,MySql是一種在目前被廣泛使用著開源的免費(fèi)的數(shù)據(jù)庫,在中小型數(shù)據(jù)應(yīng)用中,一般單臺(tái)MySql服務(wù)器就能滿足要求了,但對(duì)于大型WEB或其他應(yīng)用下,巨量的數(shù)據(jù)存儲(chǔ)訪問,單臺(tái)MySql服務(wù)器就不能很好地勝任了,而要使多臺(tái)MySql服務(wù)器協(xié)同工作,不但要考慮MySql服務(wù)器集群結(jié)構(gòu),要考慮MySql服務(wù)器的HA熱備問題,還要考慮各服務(wù)器之間負(fù)載均衡問題。為了解決這方面難題,MySql官方推出了MySql Cluster的構(gòu)架,下面就讓我們從基本情況、成本、優(yōu)缺點(diǎn)和應(yīng)用場(chǎng)合等方面對(duì)5種MySql服務(wù)器集群的可行性方案進(jìn)行詳細(xì)的分析和比較:
1、MySQL Clustering(ndb-cluster stogare)
MySQL公司以存儲(chǔ)引擎方式提供的高可靠性方案,是事務(wù)安全的,實(shí)時(shí)復(fù)制數(shù)據(jù),可用于需要高可靠性及負(fù)載均衡的場(chǎng)合。該方案至少需要三個(gè)節(jié)點(diǎn)服務(wù)器才能達(dá)到較好的效果。
成本:
(1) 節(jié)點(diǎn)服務(wù)器對(duì)RAM的需求很大,與數(shù)據(jù)庫大小呈線性比例;
(2) 最好使用千兆以太網(wǎng)絡(luò);
(3) 還需要使用Dolphin公司提供的昂貴的SCI卡。
優(yōu)點(diǎn):
(1) 可用于負(fù)載均衡場(chǎng)合;
(2) 可用于高可靠性場(chǎng)合;
(3) 高伸縮性;
(4) 真正的數(shù)據(jù)庫冗余;
(5) 容易維護(hù)。
缺點(diǎn):
(1) 隨著數(shù)據(jù)庫的變大,對(duì)RAM的需求變得更大,因此成本很高;
速度:
(1) 幾乎比典型的單獨(dú)服務(wù)器(無千兆以太網(wǎng),無SCI卡,存儲(chǔ)引擎相關(guān)的限制少)慢10倍。
應(yīng)用場(chǎng)合:
(1) 冗余,高可靠性,負(fù)載均衡
2、MySQL / GFS-GNBD/ HA (Active/Passive)
GFS是事務(wù)安全的文件系統(tǒng)。同一時(shí)刻你可以讓一個(gè)MySQL使用共享數(shù)據(jù)。
成本:
(1) 最多n臺(tái)高性能服務(wù)器的成本,其中一個(gè)激活的,其他作為備份服務(wù)器。
優(yōu)點(diǎn):
(1) 高可靠性
(2) 某種程度的冗余
(3) 按照高可靠性進(jìn)行伸縮
缺點(diǎn):
(1) 沒有負(fù)載均衡
(2) 沒有保證的冗余
(3) 無法對(duì)寫操作進(jìn)行伸縮
速度:
(1) 單獨(dú)服務(wù)器的2倍。對(duì)讀操作支持得較好。
應(yīng)用場(chǎng)合:
(1) 需要高可靠性的、讀操作密集型的應(yīng)用
3、MySQL / DRBD / HA (Active/Passive)
DRBD可以提供這樣的共享硬盤。DRBD可以被設(shè)置成事務(wù)安全的。同一時(shí)刻你可以讓一個(gè)MySQL使用共享數(shù)據(jù)。
成本:
(1) 最多n臺(tái)高性能服務(wù)器的成本,其中一個(gè)激活的,而其他則作為備份服務(wù)器。
優(yōu)點(diǎn):
(1) 高可靠性;
(2) 一定程度的冗余;
(3) 以高可靠性名義來看是可伸縮的。
缺點(diǎn):
(1) 沒有負(fù)載均衡
(2) 沒有保證的冗余
(3) 在寫負(fù)載方面沒有伸縮性
速度:
(1) 在讀寫方面相當(dāng)于單獨(dú)服務(wù)器
應(yīng)用場(chǎng)合:
(1) 需要高可靠性、讀操作密集型的應(yīng)用
4、MySQL Write Master / Multiple MySQL Read Slaves (Active/Active)
考慮不同的讀、寫DB數(shù)據(jù)庫連接的情況。可以使用一臺(tái)主服務(wù)器用于寫操作,而采用n臺(tái)從服務(wù)器用于讀操作。
成本:
(1) 最多1臺(tái)高性能寫服務(wù)器,n臺(tái)讀服務(wù)器的成本
優(yōu)點(diǎn):
(1) 讀操作的高可靠性;
(2) 讀操作的負(fù)載均衡;
(3) 在讀操作負(fù)載均衡方面是可伸縮的。
缺點(diǎn):
(1) 無寫操作的高可靠性;
(2) 無寫操作的負(fù)載均衡;
(3) 在寫操作方面無伸縮性;
速度:
(1) 同單獨(dú)服務(wù)器;在讀操作方面支持得較好
應(yīng)用場(chǎng)合:
(1) 讀操作密集型的、需要高可靠性和負(fù)載均衡的應(yīng)用。
5、Standalone MySQL Servers(Functionally separated) (Active)
多臺(tái)功能分離的單獨(dú)服務(wù)器,沒有高可靠性、負(fù)載均衡能力,明顯缺點(diǎn)太多,不予考慮。
總結(jié):
MySQL官方網(wǎng)站推薦的HA方案是結(jié)合DRBD(本文中的方案3)和Replication(本文中的方案4)。假如再加上Linux Heartbeat還可實(shí)現(xiàn)Auto-failover功能,在此種情況下,我們會(huì)發(fā)現(xiàn),down機(jī)時(shí)間會(huì)大大減少。
我們還看到,雖然上述方案解決了集群?jiǎn)栴},但對(duì)于Mysql服務(wù)器之間的負(fù)載均衡還是存在問題的,下面我們就選用官方推薦的方案4,配合梭子魚安全負(fù)載均衡機(jī),來實(shí)現(xiàn)真正高效可靠的大型應(yīng)用架構(gòu)。
梭子魚負(fù)載均衡解決方案:
·采用兩臺(tái)梭子魚安全負(fù)載均衡機(jī)LB440的雙機(jī)HA冗余結(jié)構(gòu),實(shí)現(xiàn)對(duì)后端多臺(tái)MYSQL服務(wù)器的實(shí)時(shí)負(fù)載均衡。
·采用梭子魚LB440特有的負(fù)載均衡算法保證大量的數(shù)據(jù)庫請(qǐng)求鏈接負(fù)載實(shí)時(shí)高效均衡。
·梭子魚LB440對(duì)每臺(tái)MYSQL服務(wù)器的服務(wù)端口進(jìn)行健康檢查,當(dāng)某臺(tái)MYSQL服務(wù)器發(fā)生故障,則停止該臺(tái)設(shè)備的工作,并從整個(gè)負(fù)載均衡隊(duì)列中自動(dòng)移除。
·基于應(yīng)用的結(jié)構(gòu),便于以后業(yè)務(wù)系統(tǒng)無縫拓展。性價(jià)比最優(yōu)的解決方案,保護(hù)用戶的投資。