—–Applications主要是指需要連接數(shù)據(jù)庫的應(yīng)用程序臭猜;
—–SQL中每一個mysqld都是一個sql節(jié)點,Applications需要通過連接sql節(jié)點來存儲數(shù)據(jù)纵刘,您可以把它看成應(yīng)用程序與數(shù)據(jù)庫集群進行數(shù)據(jù)交換的大門
—–Storage有‘倉庫’的意思,所以數(shù)據(jù)都是存在數(shù)據(jù)節(jié)點(ndbd)中的,而且每個數(shù)據(jù)節(jié)點的數(shù)據(jù)都是一致的厦画,都是一整套最新的數(shù)據(jù)
—–Management中就是管理節(jié)點,一個MySQL中只有一個管理節(jié)點滥朱,用來管理其他節(jié)點
綜上所述根暑,一個MySQL集群中包括三種節(jié)點(不包括Applications):管理節(jié)點、數(shù)據(jù)節(jié)點徙邻,sql節(jié)點排嫌。
一、下載集群版本的MYSQL
MySQL官網(wǎng)下載地址:http://dev.mysql.com/downloads/cluster/
二缰犁、配置啟動管理節(jié)點
[NDBD DEFAULT]
NoOfReplicas=2 # 默認值是2.
DataDir= D:\mysqlCluster\mysql-cluster-gpl-7.5.8-winx64\data\user_data #如果不存在就創(chuàng)建一個
# Managment Server
[NDB_MGMD]
HostName=127.0.0.1 #管理節(jié)點服務(wù)器db1的IP地址
# Storage Engines
[NDBD]
HostName=127.0.0.1 #MySQL集群db1的IP地址
[NDBD]
HostName=127.0.0.1 #MySQL集群db3的IP地址
[MYSQLD]
HostName=127.0.0.1
[MYSQLD]
HostName=127.0.0.1
[MYSQLD]
HostName=127.0.0.1
到這邊配置的目錄下D:\mysqlCluster\mysql-cluster-gpl-7.5.8-winx64\data\user_data把這個文件夾其實集群就算建立起來就好了淳地。可以啟動管理節(jié)點了帅容。
另外有個bin目錄下有的ndb_mgm.exe的用來查看集群狀況的颇象,用show可以查看當前集群狀態(tài),目前NDB和MYSQLD都還未啟動因此都是not connected并徘。
三遣钳、配置啟動數(shù)據(jù)節(jié)點
這邊這個data1文件夾是復制了MYSQL SERVER 5.7內(nèi)的文件夾過來的,為了方便初始化數(shù)據(jù)庫麦乞。
重要 : 到bin文件夾中先使用mysqld --initialize-insecure --user=mysql命令初始化數(shù)據(jù)庫蕴茴,會自動生成如下圖所示的data目錄
[mysqld]
basedir="D:\mysqlCluster\mysql-cluster-gpl-7.5.8-winx64"
default-storage-engine=NDBCLUSTER
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
port=33061
datadir="D:\mysqlCluster\mysql-cluster-gpl-7.5.8-winx64\data\user_data\data1\data"
general_log_file="D:\mysqlCluster\mysql-cluster-gpl-7.5.8-winx64\data\user_data\data1\general_log.log\data"
#
ndbcluster
ndb_connectstring="127.0.0.1"
#
skip_innodb
#
[ndbd]
ndb_connectstring="127.0.0.1"
最后啟動這個NDB節(jié)點,另外一個的話同理姐直,修改好配置文件和路徑即可倦淀。
四、啟動SQL節(jié)點
輸入以下命令即可声畏。
再使用ndb_mgm.exe看以下集群狀態(tài)
五晃听、測試集群
這邊我先使用navicate測試了兩個端口的服務(wù),發(fā)現(xiàn)數(shù)據(jù)同步都沒有問題砰识。
再來是使用到IDEA中用JDBC測試能扒。
這邊是話url的形式是
jdbc:mysql://127.0.0.1:33061,127.0.0.1:33062/test?roundRobinLoadBalance=true
除了多加一點端口外,其余的操作和普通的JDBC一樣辫狼。這邊我測試了無論關(guān)閉哪個端口的服務(wù)初斑,程序都可以通過這段代碼獲取連接到數(shù)據(jù)庫獲取數(shù)據(jù),證明集群的可用的膨处。
?roundRobinLoadBalance=true表示使用roundRobin算法见秤,若是其中一臺機器掛了以后砂竖,會自動將不能訪問的數(shù)據(jù)庫服務(wù)器踢除,如果還原后將繼續(xù)進行壓力分載鹃答。應(yīng)該是類似一種負載均衡的輪詢算法乎澄。另外我沒有加這個參數(shù)并關(guān)閉其中一個服務(wù)器以后也是可行的,可能是JDBC有自帶默認參數(shù)测摔。
假如一個數(shù)據(jù)節(jié)點宕機置济,并不會影響整個集群的運行,任何一個數(shù)據(jù)節(jié)點死掉甚至物理損壞都不用擔心锋八,因為每個數(shù)據(jù)節(jié)點保存的數(shù)據(jù)都是完整的一份數(shù)據(jù)(在你操作數(shù)據(jù)的時候浙于,它早就自動為你把最新的數(shù)據(jù)備份到每一個數(shù)據(jù)節(jié)點上啦)。你可以測試一下挟纱,這時手動停止某個數(shù)據(jù)節(jié)點和sql節(jié)點羞酗,另外一個數(shù)據(jù)節(jié)點和sql節(jié)點還會正常運行。當你把停止的數(shù)據(jù)節(jié)點和sql節(jié)點重新啟動時紊服,會發(fā)現(xiàn)又重新連接到集群里了檀轨,而且每個數(shù)據(jù)節(jié)點的數(shù)據(jù)都是最新的。