重要說明:mysql-cluste與非集羣時用的mysql-server與mysql-client沒有任何關係,mysql-cluste安裝包中已自帶了集羣用的server與client,啓動mysql也是啓動mysql-cluste中的mysql,與原先的mysql-server沒有任何關係。mysql
「NDB」 是一種「內存中」的存儲引擎,也是事務型存儲引擎,具有ACID屬性。linux
管理(MGM)節點:負責管理MySQL Cluster內的其餘節點,如提供配置數據、啓動並中止節點、運行備份等。因爲這類節點負責管理其餘節點的配置,應在啓動其餘節點以前首先啓動這類節點。MGM節點是用命令「ndb_mgmd」啓動的。sql
數據節點:用於保存 Cluster的數據。數據節點的數目與副本的數目相關,是片斷的倍數。數據節點是用命令「ndbd」啓動的。shell
SQL節點:用來訪問 Cluster數據的節點。也就是Mysql服務,可使用service mysqld start啓動。數據庫
管理服務器(MGM節點)負責管理 Cluster配置文件和 Cluster日誌。 Cluster中的每一個節點從管理服務器檢索配置數據,並請求肯定管理服務器所在位置的方式。當數據節點內出現新的事件時,節點將關於這類事件的信息傳輸到管理服務器,而後,將這類信息寫入 Cluster日誌。centos
mysql-cluste官方下載地址:http://dev.mysql.com/downloads/cluster/服務器
本文測試下載的版本是linux 64位的tar包分佈式
安裝版本:mysql cluster 7.4.13工具
操做系統 :centos6.5(X64)測試
軟件名稱 :mysql-cluster-gpl-7.4.13-linux-glibc2.5-x86_64.tar.gz (通用版)
管理節點IP:192.168.1.240
數據節點-SQL節點IP:192.168.1.238
數據節點-SQL節點IP:192.168.1.248
不須要安裝mysql-server軟件了,因此能夠關掉mysql服務
在集羣中的全部主機上安裝mysql-cluster集羣軟件
mysql-cluster軟件提供3種進程:
1,mysqld進程:供用戶訪問和執行sql語句
2,數據進程ndbd:存儲數據
3,管理進程mgmd:管理集羣中的全部的主機
安裝mysql-cluster,集羣中的每臺服務都要安裝
groupadd mysql
useradd mysql -g mysql
tar xvf mysql-cluster-gpl-7.4.13-linux-glibc2.5-x86_64.tar.gz
mv mysql-cluster-gpl-7.4.13-linux-glibc2.5-x86_64 /usr/local/mysql
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql
chown -R mysql:mysql mysql
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
爲便於之後啓動mysql服務,咱們接着作以下步驟:
複製配置文件
[root@localhost mysql] cp support-files/my-default.cnf /etc/my.cnf
h. 將mysqld服務加入開機自啓動項。
*首先須要將scripts/mysql.server服務腳本複製到/etc/init.d/,並重命名爲mysqld。
[root@localhostmysql] cp support-files/mysql.server /etc/init.d/mysqld
會有提示是否覆蓋,輸入yes
這樣就能夠用 service mysqld start service mysqld restart service mysqld stop
*經過chkconfig命令將mysqld服務加入到自啓動服務項中,這一步就不作了,由於mysql集羣啓動是有順序的,sql節點要最後啓動。
[root@localhost mysql]#chkconfig --add mysqld
*注意服務名稱mysqld就是咱們將mysql.server複製到/etc/init.d/時重命名的名稱。
*查看是否添加成功
[root@localhost mysql]#chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mysql客戶端啓動:
爲了不每次都輸入mysql的全路徑/usr/local/mysql/bin/mysql,可將其加入環境變量中,在vi /etc/profile最後加入兩行命令:
MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
修改好後再執行source /etc/profile
這樣就能夠在shell中直接輸入mysql命令來啓動客戶端程序了
vi /etc/mysql-cluster.ini (該文件不存在,須要建立,文件名可隨便命名)
文件內容以下:
[NDBD DEFAULT]
NoOfReplicas=2 #定義在Cluster環境中相同數據的份數,最大爲4
DataMemory=200M #每一個數據節點中給數據分配的內存
IndexMemory=20M #每一個數據節點中給索引分配的內存
MaxNoOfAttributes=20480 #該參數用於設置簇中觸發程序對象的最大數目。該參數的默認值爲768,不修改建表時可能會報708錯誤
[NDB_MGMD]
NodeId=1
#設置管理節點服務器
HostName=192.168.1.240
DataDir=/usr/local/mysql/data
[NDBD]
NodeId=2
#設置存儲節點服務器(NDB節點)
HostName=192.168.1.238
DataDir=/usr/local/mysql/data
[NDBD]
NodeId=3
#第二個NDB節點
HostName=192.168.1.248
DataDir=/usr/local/mysql/data
[MYSQLD]
NodeId=4
HostName=192.168.1.238
[MYSQLD]
NodeId=5
HostName=192.168.1.248
啓動(必須用參數「-f」告訴 ndb_mgm 配置文件所在位置,默認是在ndb_mgmd相同目錄下)
cd /usr/local/mysql/bin
./ndb_mgmd -f /etc/mysql-cluster.ini
./ndb_mgmd -f /etc/mysql-cluster.ini --initial (#--initial:第一次啓動時加上,其它時候不要加,否則會數據清空,除非是在備份、恢復或配置變化後重啓時)
啓動成功後會顯示當前mysql-cluster的信息
經過netstat -lntpu或者ps -aux |grep ndb_mgmd查看是否啓動成功
讓管理節點開機自動啓動:如下路徑根據本身實際的來。
vi /etc/rc.d/rc.local
加入下面的內容:
/usr/local/mysql/bin/ndb_mgmd -f /etc/mysql-cluster.ini
在238與248服務上作。
vi /etc/my.cnf
增長以下內容:
[mysqld]
ndbcluster #使用ndb集羣引擎
ndb-connectstring=192.168.1.240 #指定管理集羣的ip地址,多個以,分隔
default-storage-engine=ndbcluster #設置默認引擎
#user=mysql
#log-error=/usr/local/mysql/mysqld.err
#指定管理集羣的ip地址,多個以,分隔
[mysql_cluster]
ndb-connectstring=192.168.1.240
在每臺存儲節點(ndbd)服務器上,若是是第一次啓動ndbd進程的話,必須先執行如下命令:
cd /usr/local/mysql/bin
./ndbd --initial #注意,僅應在首次啓動ndbd時,或在備份/恢復數據或配置文件發生變化後重啓ndbd時使用「--initial」參數。由於該參數會使節點刪除由早期ndbd實例建立的、用於恢復的任何文件,包括用於恢復的日誌文件。
若是不是第一次啓動,直接運行以下命令便可:
cd /usr/local/mysql/bin
./ndb
啓動後的效果:
查看是否啓動成功:
netstat -lntpu或者ps -aux |grep ndbd
關閉數據節點:
啓動sql節點:
service mysqld start

啓動sql節點成功後,修改下mysql的鏈接爲任意ip,而後再設置鏈接的用戶名爲root,密碼爲test,這樣客戶端工具SQLyog等就能夠鏈接到mysql服務上了。
新安裝的mysql密碼是空的。
./mysql -u root -p
use mysql
SELECT `Host`,`User` FROM user;
UPDATE user SET `Host` = '%' WHERE `User` = 'root' LIMIT 1;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION;
SELECT `Host`,`User` FROM user;
啓動順序:
管理節點 -> 數據節點 -> SQL節點
關閉順序:
SQL節點 -> 數據節點 -> 管理節點
數據節點與sql節點都啓動成功後在管理節點上查看集羣狀態。
cd /usr/local/mysql/bin
./ndb_mgm -e show
示例以下:已所有鏈接成功的

或者
若是節點已確認啓動而且配置無誤,仍是not connected那就試下關閉防火牆與selinux。
可能緣由:防火牆開啓,阻止集羣數據通訊;關閉防火牆:service iptables stop;
關閉 selinux:setenforce 0;
管理和維護命令:
cd /usr/local/mysql/bin
關閉mysql集羣: pkill -9 ndbd_mgmd
啓動mysql集羣:./ndb_mgmd -f /var/lib/mysql-cluster/config.ini
啓動SQL節點:./mysqld_safe --user=mysql & 或 service mysqld restart
查看mysql狀態:./ndb_mgm -e show
建立數據庫表,簡單查看配置效果:
因爲爲分佈式集羣,因此,在Mysql中建立的表的存儲引擎必須修改成:NDB Cluster,不然數據不會同步到其餘節點服務器上。
如下建表與插入數據在一臺服務上操做,操做後直接查看其餘節點中的mysql,能夠看到數據庫、表、數據都會同步的。
先建立個數據庫mytest
CREATE TABLE tb_city(
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20) NOT NULL DEFAULT '')
ENGINE = NDBCLUSTER DEFAULT CHARSET utf8mb4;
INSERT INTO tb_city VALUES(1, 'city1');
INSERT INTO tb_city VALUES(2, 'city2');
INSERT INTO tb_city VALUES(3, 'city3');
示例以下

ALTER TABLE tablename ENGINE=NDBCLUSTER
示例:
ALTER TABLE tb_bank ENGINE=NDBCLUSTER
集羣的每一張表必須修改ENGINE = NDBCLUSTER
原先配置:jdbc:mysql://192.168.1.238:3306/palm_2_0_16集羣后配置:jdbc:mysql:loadbalance://192.168.1.238:3306,192.168.1.248:3306/palm_2_0_16?roundRobinLoadBalance=true