王俊杰
[摘 ?要:隨著技術(shù)的進(jìn)步,人們的生活越來(lái)越依賴于互聯(lián)網(wǎng)應(yīng)用,數(shù)據(jù)也越來(lái)越重要。很多大型的網(wǎng)站開(kāi)始使用數(shù)據(jù)庫(kù)集群來(lái)提高數(shù)據(jù)庫(kù)的可靠性和數(shù)據(jù)庫(kù)的性能。對(duì)于廣大計(jì)算機(jī)類專業(yè)的學(xué)生來(lái)說(shuō),單純的學(xué)習(xí)數(shù)據(jù)庫(kù)理論知識(shí),很難滿足現(xiàn)階段互聯(lián)網(wǎng)發(fā)展對(duì)于數(shù)據(jù)庫(kù)技術(shù)的要求。本文從需求作為切入點(diǎn),介紹一款比較成熟的MySQL集群架構(gòu)。
關(guān)鍵詞:MySQL;數(shù)據(jù);集群]
一、數(shù)據(jù)庫(kù)集群技術(shù)簡(jiǎn)介
最新的數(shù)據(jù)庫(kù)集群系統(tǒng)的理論基礎(chǔ)是分布式計(jì)算,將數(shù)據(jù)分布到每個(gè)節(jié)點(diǎn),所有的計(jì)算節(jié)點(diǎn)并行處理數(shù)據(jù),將結(jié)果匯總。這樣的方式無(wú)疑是最完美的。但是目前仍然不能實(shí)現(xiàn)全部的功能。
目前數(shù)據(jù)庫(kù)應(yīng)用狀況大致分為兩類,第一類是數(shù)據(jù)量在100G以下,數(shù)據(jù)庫(kù)訪問(wèn)頻繁,請(qǐng)求密集。主要是Web APP類型的應(yīng)用,例如:網(wǎng)站,論壇等。這些Web APP類型的應(yīng)用訪問(wèn)數(shù)據(jù)庫(kù)的特點(diǎn)是:訪問(wèn)頻繁,數(shù)據(jù)庫(kù)每秒鐘要接受幾千次以上的查詢,需要經(jīng)常追加數(shù)據(jù),同時(shí)對(duì)數(shù)據(jù)的響應(yīng)速度要求比較高。另一類是用于科學(xué)計(jì)算、存儲(chǔ)歷史數(shù)據(jù)的應(yīng)用,數(shù)據(jù)量往往達(dá)到幾百G。這些應(yīng)用訪問(wèn)數(shù)據(jù)庫(kù)的特點(diǎn)是:多為查詢操作,數(shù)據(jù)都是分批、定時(shí)、集中倒入數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的記錄非常多,積累了大量的數(shù)據(jù),對(duì)數(shù)據(jù)庫(kù)的響應(yīng)速度沒(méi)有太高要求。
數(shù)據(jù)庫(kù)集群和分布式數(shù)據(jù)庫(kù)的區(qū)別,分布式是指將不同的業(yè)務(wù)分布在不同的地方。而集群指的是將幾臺(tái)服務(wù)器集中在一起,實(shí)現(xiàn)同一業(yè)務(wù)。分布式中的每一個(gè)節(jié)點(diǎn),都可以做集群。而集群并不一定就是分。
簡(jiǎn)單說(shuō),分布式是以縮短單個(gè)任務(wù)的執(zhí)行時(shí)間來(lái)提升效率的,而集群則是通過(guò)提高單位時(shí)間內(nèi)執(zhí)行的任務(wù)數(shù)來(lái)提升效率。
二、MySQLCluster簡(jiǎn)介
MySQL Cluster是MySQL適合于分布式計(jì)算環(huán)境的高實(shí)用、高冗余版本。Cluster的漢語(yǔ)是“集群”的意思。它采用了NDB Cluster 存儲(chǔ)引擎,允許在1個(gè) Cluster中運(yùn)行多個(gè)MySQL服務(wù)器。
MySQL Cluster是一種技術(shù),該技術(shù)允許在無(wú)共享的系統(tǒng)中部署“內(nèi)存中”數(shù)據(jù)庫(kù)的Cluster。通過(guò)無(wú)共享體系結(jié)構(gòu),系統(tǒng)能夠使用廉價(jià)的硬件,而且對(duì)軟硬件無(wú)特殊要求。此外,由于每個(gè)組件有自己的內(nèi)存和磁盤(pán),不存在單點(diǎn)故障。
(一)MySQL-Cluster架構(gòu)
1.SQL節(jié)點(diǎn):給上層應(yīng)用層提供sql訪問(wèn)。
2.存儲(chǔ)/數(shù)據(jù)節(jié)點(diǎn):保存cluster中的數(shù)據(jù)。數(shù)據(jù)節(jié)點(diǎn),可以提供副本。實(shí)現(xiàn)數(shù)據(jù)冗余。
3.管理節(jié)點(diǎn)(MGM):管理整個(gè)集群。啟動(dòng),關(guān)閉集群。通過(guò)ndb_mgmd命令啟動(dòng)集群。
4.NDB引擎:是一種“內(nèi)存中”的存儲(chǔ)引擎,它具有可用性高和數(shù)據(jù)一致性好的特點(diǎn)。
(二)NDB引擎
MySQL Cluster使用了一個(gè)專用的基于內(nèi)存的存儲(chǔ)引擎——NDB引擎,這樣做的好處是速度快,沒(méi)有磁盤(pán)I/O的瓶頸,但是由于是基于內(nèi)存的,所以數(shù)據(jù)庫(kù)的規(guī)模受系統(tǒng)總內(nèi)存的限制,如果運(yùn)行NDB的MySQL服務(wù)器一定要內(nèi)存夠大,比如4G,8G,甚至16G。NDB引擎是分布式的,它可以配置在多臺(tái)服務(wù)器上來(lái)實(shí)現(xiàn)數(shù)據(jù)的可靠性和擴(kuò)展性,理論上通過(guò)配置2臺(tái)NDB的存儲(chǔ)節(jié)點(diǎn)就能實(shí)現(xiàn)整個(gè)數(shù)據(jù)庫(kù)集群的冗余性和解決單點(diǎn)故障問(wèn)題。
1.缺陷
(1)基于內(nèi)存,數(shù)據(jù)庫(kù)的規(guī)模受集群總內(nèi)存的大小限制
(2)基于內(nèi)存,斷電后數(shù)據(jù)可能會(huì)有數(shù)據(jù)丟失,這點(diǎn)還需要通過(guò)測(cè)試驗(yàn)證。
(3)多個(gè)節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)通訊和數(shù)據(jù)同步、查詢等操作,因此整體性受網(wǎng)絡(luò)速度影響,因此速度也比較慢
2.優(yōu)點(diǎn)
(1)多個(gè)節(jié)點(diǎn)之間可以分布在不同的地理位置,因此也是一個(gè)實(shí)現(xiàn)分布式數(shù)據(jù)庫(kù)的方案。
(2)擴(kuò)展性很好,增加節(jié)點(diǎn)即可實(shí)現(xiàn)數(shù)據(jù)庫(kù)集群的擴(kuò)展。
(3)冗余性很好,多個(gè)節(jié)點(diǎn)上都有完整的數(shù)據(jù)庫(kù)數(shù)據(jù),因此任何一個(gè)節(jié)點(diǎn)宕機(jī)都不會(huì)造成服務(wù)中斷。
三、MySQL集群總結(jié)
數(shù)據(jù)庫(kù)作為應(yīng)用系統(tǒng)的核心,在企業(yè)的IT系統(tǒng)中起著非常重要的作用,單一設(shè)備根本無(wú)法保證系統(tǒng)的持續(xù)運(yùn)行,發(fā)生系統(tǒng)故障,嚴(yán)重影響系統(tǒng)的正常運(yùn)行,甚至帶來(lái)巨大的經(jīng)濟(jì)損失。于是人們希望通過(guò)組建數(shù)據(jù)庫(kù)集群,來(lái)保證系統(tǒng)的可用性,一旦某節(jié)點(diǎn)發(fā)生故障,系統(tǒng)會(huì)自動(dòng)故障轉(zhuǎn)移,實(shí)現(xiàn)系統(tǒng)的持續(xù)工作。
企業(yè)的數(shù)據(jù)是企業(yè)的一些重要信息,一些核心數(shù)據(jù)甚至關(guān)系著企業(yè)的命脈,單一設(shè)備根本無(wú)法保證數(shù)據(jù)的安全性,一旦發(fā)生丟失,很難再找回來(lái),于是人們希望通過(guò)組建數(shù)據(jù)庫(kù)集群,實(shí)現(xiàn)數(shù)據(jù)集群的冗余,通過(guò)多份數(shù)據(jù)來(lái)保證安全性。
參考文獻(xiàn)
[1][美]查理斯·貝爾(Charles Bell).高可用MySQL[M].電子工業(yè)出版社,2015.
[2]宋立桓.MySQL性能優(yōu)化和高可用架構(gòu)實(shí)踐[M].福建少年兒童出版社,2020.
[3]張甦.MySQL王者晉級(jí)之路[M].電子工業(yè)出版社,2018.