一、說MySQL Cluster是shared-nothing架構(gòu)的原因
1、MySQL Cluster每個節(jié)點(diǎn)獨(dú)立
MySQL Cluster中的每個節(jié)點(diǎn)都是一個獨(dú)立的系統(tǒng),各節(jié)點(diǎn)彼此獨(dú)立,各自擁有自己的處理器、內(nèi)存和存儲設(shè)備等,它們之間沒有共享數(shù)據(jù)的設(shè)施。
2、數(shù)據(jù)分片和復(fù)制
在MySQL Cluster中,數(shù)據(jù)可以按照特定的規(guī)則分割成多個分片,每個分片存儲在不同的節(jié)點(diǎn)上。同時,每個分片也會被多次復(fù)制到不同的節(jié)點(diǎn)上,以提高數(shù)據(jù)的可用性和容錯性。這種分片和復(fù)制的方式可以讓MySQL Cluster具有較高的可擴(kuò)展性和強(qiáng)大的管理能力,能夠同時支持大規(guī)模集群和高并發(fā)訪問。
3、獨(dú)立的網(wǎng)絡(luò)架構(gòu)
MySQL Cluster中使用了單獨(dú)的網(wǎng)絡(luò)架構(gòu),將節(jié)點(diǎn)之間的通信隔離開來,這使得節(jié)點(diǎn)之間可以進(jìn)行并行處理,從而提高了整個集群的吞吐量和處理速度。
二、MySQL Cluster介紹
1、簡介
MySQL Cluster 是一種技術(shù),該技術(shù)允許在無共享的系統(tǒng)中部署“內(nèi)存中”數(shù)據(jù)庫的 Cluster 。通過無共享體系結(jié)構(gòu),系統(tǒng)能夠使用廉價的硬件,而且對軟硬件無特殊要求。此外,由于每個組件有自己的內(nèi)存和磁盤,不存在單點(diǎn)故障。MySQL Cluster 由一組計(jì)算機(jī)構(gòu)成,每臺計(jì)算機(jī)上均運(yùn)行著多種進(jìn)程,包括MySQL服務(wù)器,NDB Cluster 的數(shù)據(jù)節(jié)點(diǎn),管理服務(wù)器,以及(可能)專門的數(shù)據(jù)訪問程序。關(guān)于 Cluster 中這些組件的關(guān)系。
2、特點(diǎn)介紹
“NDB” 是一種“內(nèi)存中”的存儲引擎,它具有可用性高和數(shù)據(jù)一致性等特點(diǎn)。MySQL Cluster 能夠使用多種故障切換和負(fù)載平衡選項(xiàng)配置NDB存儲引擎,但在 Cluster 級別上的存儲引擎上做這個最簡單。MySQL Cluster的NDB存儲引擎包含完整的數(shù)據(jù)集,僅取決于 Cluster本身內(nèi)的其他數(shù)據(jù)。目前,MySQL Cluster的 Cluster部分可獨(dú)立于MySQL服務(wù)器進(jìn)行配置。在MySQL Cluster中, Cluster的每個部分被視為1個節(jié)點(diǎn)。
管理(MGM)節(jié)點(diǎn):這類節(jié)點(diǎn)的作用是管理MySQL Cluster內(nèi)的其他節(jié)點(diǎn),如提供配置數(shù)據(jù)、啟動并停止節(jié)點(diǎn)、運(yùn)行備份等。由于這類節(jié)點(diǎn)負(fù)責(zé)管理其他節(jié)點(diǎn)的配置,應(yīng)在啟動其他節(jié)點(diǎn)之前首先啟動這類節(jié)點(diǎn)。MGM節(jié)點(diǎn)是用命令“ndb_mgmd”啟動的。數(shù)據(jù)節(jié)點(diǎn):這類節(jié)點(diǎn)用于保存 Cluster的數(shù)據(jù)。數(shù)據(jù)節(jié)點(diǎn)的數(shù)目與副本的數(shù)目相關(guān),是片段的倍數(shù)。例如,對于兩個副本,每個副本有兩個片段,那么就有4個數(shù)據(jù)節(jié)點(diǎn)。不過沒有必要設(shè)置多個副本。數(shù)據(jù)節(jié)點(diǎn)是用命令“ndbd”啟動的。SQL節(jié)點(diǎn):這是用來訪問 Cluster數(shù)據(jù)的節(jié)點(diǎn)。對于MySQL Cluster,客戶端節(jié)點(diǎn)是使用NDB Cluster存儲引擎的傳統(tǒng)MySQL服務(wù)器。通常,SQL節(jié)點(diǎn)是使用命令“mysqld –ndbcluster”啟動的,或?qū)ⅰ皀dbcluster”添加到“my.cnf”后使用“mysqld”啟動。注釋:在很多情況下,術(shù)語“節(jié)點(diǎn)”用于指計(jì)算機(jī),但在討論MySQL Cluster時,它表示的是進(jìn)程。在單臺計(jì)算機(jī)上可以有任意數(shù)目的節(jié)點(diǎn),為此,我們采用術(shù)語“Cluster主機(jī)”。管理服務(wù)器(MGM節(jié)點(diǎn))負(fù)責(zé)管理 Cluster配置文件和 Cluster日志。 Cluster中的每個節(jié)點(diǎn)從管理服務(wù)器檢索配置數(shù)據(jù),并請求確定管理服務(wù)器所在位置的方式。當(dāng)數(shù)據(jù)節(jié)點(diǎn)內(nèi)出現(xiàn)新的事件時,節(jié)點(diǎn)將關(guān)于這類事件的信息傳輸?shù)焦芾矸?wù)器,然后,將這類信息寫入 Cluster日志。
此外,可以有任意數(shù)目的 Cluster客戶端進(jìn)程或應(yīng)用程序。它們分為兩種類型:
標(biāo)準(zhǔn)MySQL客戶端:對于MySQL Cluster,它們與標(biāo)準(zhǔn)的(非 Cluster類)MySQL沒有區(qū)別。換句話講,能夠從用PHP、Perl、C、C++、Java、Python、Ruby等編寫的現(xiàn)有MySQL應(yīng)用程序訪問MySQL Cluster。 管理客戶端:這類客戶端與管理服務(wù)器相連,并提供了啟動和停止節(jié)點(diǎn)、啟動和停止消息跟蹤(僅調(diào)試版本)、顯示節(jié)點(diǎn)版本和狀態(tài)、啟動和停止備份等的命令。MySQL Cluster 是MySQL適合于分布式計(jì)算環(huán)境的高實(shí)用、高冗余版本。它采用了NDB Cluster?存儲引擎,允許在1個 Cluster 中運(yùn)行多個MySQL服務(wù)器。在MySQL 5.0及以上的二進(jìn)制版本中、以及與最新的Linux版本兼容的RPM中提供了該存儲引擎。(注意,要想獲得MySQL Cluster 的功能,必須安裝 mysql-server 和 mysql-max RPM)。
目前能夠運(yùn)行MySQL Cluster 的操作系統(tǒng)有Linux、Mac OS X和Solaris(一些用戶通報成功地在FreeBSD上運(yùn)行了MySQL Cluster ,但MySQL AB公司尚未正式支持該特性),最新版本MySQL Cluste7.1.10支持更多操作系統(tǒng),包括Windows。
所有的這些節(jié)點(diǎn)構(gòu)成一個完成的MySQL集群體系。數(shù)據(jù)保存在“NDB存儲服務(wù)器”的存儲引擎中,表(結(jié)構(gòu))則保存在“MySQL服務(wù)器”中。應(yīng)用程序通過“MySQL服務(wù)器”訪問這些數(shù)據(jù)表,集群管理服務(wù)器通過管理工具(ndb_mgmd)來管理“NDB存儲服務(wù)器”。
通過將MySQL Cluster 引入開放源碼世界,MySQL為所有需要它的人員提供了具有高可用性、高性能和可縮放性的 Cluster 數(shù)據(jù)管理。
三、shared-nothing架構(gòu)介紹
1、簡介
Shared-Nothing(SN)是一種分布式計(jì)算架構(gòu),在這種架構(gòu)中,每一個節(jié)點(diǎn)都是獨(dú)立的,自己的,在系統(tǒng)中不存在單點(diǎn)競爭。更明確地說,沒有節(jié)點(diǎn)共享存儲和硬盤等內(nèi)容,都是各自管理自己的數(shù)據(jù)。SN相對中央控制架構(gòu)有很大的優(yōu)點(diǎn),可以避免單點(diǎn)故障,擁有自我恢復(fù)能力,并且不在破壞原有系統(tǒng)的情況下進(jìn)行升級。
2、內(nèi)容
share-memory:多個cpu共享同一片內(nèi)存,cpu之間通過內(nèi)部通訊機(jī)制(interconnection network)進(jìn)行通訊share-disk:每一個cpu使用自己的私有內(nèi)存區(qū)域,通過內(nèi)部通訊機(jī)制直接訪問所有磁盤系統(tǒng)share-nothing:每一個cpu都有私有內(nèi)存區(qū)域和私有磁盤空間,而且2個cpu不能訪問相同磁盤空間,cpu之間的通訊通過網(wǎng)絡(luò)連接3、作用
總的來說,shared-nothing降低了競爭資源的等待時間,從而提高了性能。反過來,如果一個數(shù)據(jù)庫應(yīng)用系統(tǒng)要獲得良好的可擴(kuò)展的性能,它從設(shè)計(jì)和優(yōu)化上就要考慮 shared-nothing體系結(jié)構(gòu)。Share nothing means few contention。它在oracle數(shù)據(jù)庫設(shè)計(jì)和優(yōu)化上有很多相同之處。
Share-nothing 對數(shù)據(jù)庫應(yīng)用主要體現(xiàn)在多用戶并行訪問系統(tǒng)時候,優(yōu)化數(shù)據(jù)庫操作的response time上。如果數(shù)據(jù)庫操作能夠順利獲得所需要的資源,不發(fā)生等待事件,自然可以減少response time。同時也體現(xiàn)在操作盡量少占用資源上,避免浪費(fèi)時間在無用功上。
延伸閱讀1:能運(yùn)行MySQL Cluster 的操作系統(tǒng)
目前能夠運(yùn)行 MySQL Cluster 的操作系統(tǒng)有 Windows、Linux、Mac OS X 和 Solaris(一些用戶通報成功地在 FreeBSD 上運(yùn)行了 MySQL Cluster ,但 MySQL AB 公司尚未正式支持該特性)。