MySQL叢集 NDB 7.5介紹

feelpurple發表於2016-05-14
MySQL Cluster是在shared-nothing系統中開啟in-memory資料庫叢集功能的一項技術。shared-nothing架構可以使系統以廉價的硬體工作,對硬體和軟體的需求很小。

MySQL叢集被設計成沒有任何單點故障。在一套shared-nothing系統中,每個節點都有自己的記憶體和硬碟,像共享網路、網路問卷系統和SAN儲存這些共享儲存機制不被MySQL叢集推薦和支援。

MySQL叢集透過一個稱為NDB的記憶體叢集儲存引擎,和標準的MySQL伺服器整合在一起。NDB是Network DataBase的縮寫。MySQL叢集是MySQL伺服器和NDB儲存引擎的結合。

一套MySQL叢集包含一系列的電腦主機,每臺主機執行一個或多個程式;這些程式被稱為節點,包含MySQL伺服器(用於訪問NDB的資料)、資料節點(用於儲存資料)、一個或多個管理伺服器、其他定製的資料訪問程式。這些節點的關係圖如下:



叢集中的節點可以被停止或重啟,也可以再次加入叢集中。

NDBCLUSTER(也稱為NDB)是一個提供高可用性和資料永久化的記憶體儲存引擎。

NDBCLUSTER可以透過配置一些引數實現故障切換和負載均衡。需要注意的是,在MySQL叢集中,一個節點是指一臺主機,而是一個程式;可以在一臺主機上執行多個節點。

在一套MySQL叢集配置中,至少有三個節點:

管理節點:這個節點的角色是管理叢集中的其他節點,提供配置資料,啟動停止節點和執行備份功能。因為這個節點管理其他節點的配置資訊,在叢集中應該首先啟動這個節點。透過ndb_mgmd命令啟動MGM節點。

資料節點:這種型別的節點儲存叢集的資料。MySQL叢集中的表通常被儲存在記憶體中而不是磁碟上(這是我們稱呼MySQL叢集為記憶體資料庫的原因)。然而,一些MySQL叢集的資料也可以儲存在磁碟上。

SQL節點:這各節點用來訪問叢集資料。在MySQL叢集中,SQL節點是使用NDBCLUSTER儲存引擎的傳統的MySQL伺服器。SQL節點透過mysqld --ndbcluster --ndb-connectstring方式啟動。

在生產環境中,部署一套三節點的MySQL叢集是不現實的,因為這樣的配置無法提供冗餘保護。想要實現MySQL叢集的高可用性,需要部署多個資料節點和SQL節點,管理節點也推薦部署多個。

管理伺服器負責管理叢集的配置和叢集日誌。每個叢集節點讀取管理伺服器上面的配置資訊。

另外,除了上面這些節點,還有叢集客戶端程式和應用程式,包括標準的MySQL客戶端、NDB特定的API程式和管理客戶端。

MySQL叢集有兩種日誌:
叢集日誌:記錄叢集的事件報告
節點日誌:每個節點的單獨日誌

通常,只需要檢查叢集日誌即可,只要當開發應用程式或排錯時才會用到節點日誌檢查點,一般來說,當資料被儲存到磁碟上時,會觸發一個檢查點。在MySQL叢集中,當被提交的事務資料被儲存到磁碟上時,會觸發檢查點。對於NDB儲存引擎,有兩種型別的檢查點一起工作來確保叢集資料的一致性。

本地檢查點(LCP):這是單獨節點上面的檢查點。一個本地檢查點會儲存本地節點上面的所有資料到磁碟上,每幾分鐘會觸發一次,觸發檢查點的時間間隔依據節點上面的資料量、叢集的活動級別和其他因素而定。

全域性檢查點(GCP):全域性檢查點每幾秒鐘會發生一次,當所有節點上面的事務同步且日誌檔案被重新整理到磁碟上時發生。

一個資料節點是一個ndbd程式,每個資料節點需要部署到不同的主機上,MySQL叢集不支援在同一臺主機上部署多個ndbd程式。
[root@dongdan ~]# ps -ef|grep ndbd
root     23759     1  0 Aug03 ?        00:00:00 ndbd
root     23760 23759  0 Aug03 ?        00:24:05 ndbd
root     31446 31395  0 13:46 pts/2    00:00:00 grep ndbd

管理節點的程式是ndb_mgmd程式,SQL節點的程式是mysqld程式。
[root@dongdan ~]# ps -ef|grep mysqld
root     23833     1  0 Aug03 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/var/lib/mysql/main_my.cnf
mysql    24051 23833  0 Aug03 ?        00:36:04 /usr/sbin/mysqld --defaults-file=/var/lib/mysql/main_my.cnf --basedir=/usr --datadir=/var/lib/mysql/database --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/database/dongdan.err --pid-file=/var/lib/mysql/database/dongdan.pid --socket=/var/lib/mysql/mysql.sock --port=3306
root     31464 31395  0 13:50 pts/2    00:00:00 grep mysqld

節點組包含一個或多個節點。

MySQL叢集使用心跳和超時機制,當其中一個節點網路無法聯通時,會判斷這個節點失效。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26506993/viewspace-2099896/,如需轉載,請註明出處,否則將追究法律責任。

相關文章