基本概念:node
NDB介紹mysql
NDB」 是一種「內存中」的存儲引擎,也是事務型存儲引擎,具有ACID屬性。linux
數據節點(Data Nodes)sql
用於存儲集羣的數據。實現底層數據存儲的功能,保存Cluster 的數據。每個NDB 節點保存完整數據的一部分(或者一份完整的數據,視節點數目和配置而定),在MySQL Cluster 裏面叫作一個fragment。而每個fragment,正常狀況來說都會在其餘的主機上面有一份(或者多分)徹底相同的鏡像存在。這些都是經過配置來完成的,因此只要配置得當,MySQL Cluster 在存儲層不會出現單點的問題。數據節點是用命令ndbd啓動的。數據庫
SQL節點(SQL Nodes)編程
向外提供一個標準的SQL語言編程接口。SQL節點負責向數據節點傳送訪問請求,具體集羣過程以及數據庫底層均對外透明。centos
SQL節點提供用戶SQL指令請求,解析、鏈接管理,query優化和響、cache管理等、數據merge、sort,裁剪等功能,當SQL節點啓動時,將向管理節點同步架構信息,用以數據查詢路由。SQL節點做爲查詢入口,須要消耗大量cpu及內存資源,可以使用分佈式管理節點,並在SQL節點外封裝一層請求分發及HA控制機制可解決單點及性能問題,其提供了線性擴展功能。SQL節點是使用命令mysqld -ndbcluster啓動的,或將ndbcluster添加到「my.cnf」後使用「mysqld」啓動。服務器
管理節點(NDB Management Server)架構
負責整個Cluster 集羣中各個節點的管理工做,包括集羣的配置,啓動關閉各節點,以及實施數據的備份恢復等。管理節點會獲取整個Cluster 環境中各節點的狀態和錯誤信息,而且將各Cluster 集羣中各個節點的信息反饋給整個集羣中其餘的全部節點。一般只需配置一個管理節點;然而爲了排除單點故障須要,有可能的話,儘可能增長管理節點的數量。MGM節點是用命令ndb_mgm啓動的。tcp
集羣配置概述
環境:
操做系統:centos 6.5 x86_64
軟件:mysql-cluster-gpl-7.1.34-linux-x86_64-glibc23.tar.gz 具體版本能夠去官網下載
管理節點:ip:192.168.100.20
sql節點-數據節點:ip:192.168.100.20
sql節點-數據節點:ip:192.168.100.30
安裝mysql cluster和mysql基本同樣只是配置文件和啓動方式有所改變,因此基礎仍是mysql安裝:
Mysql安裝
新建mysql用戶
useradd -s /sbin/nologin -M mysql
建立mysql數據目錄
[root@rs2 mysql]# mkdir -p /data/data
[root@rs2 mysql]# chown -R mysql:mysql /data/mysql
初始化mysql
[root@rs2 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/msyql #user指定mysql用戶 datadir 數據存放目錄
拷貝啓動配置文件和啓動腳本
cp support-files/my-small.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
管理節點安裝配置
解壓並複製
cp -r mysql-cluster-gpl-7.1.34-linux-x86_64-glibc23 /usr/local/mysql-cluster
chown -R mysql:mysql mysql-cluster/
拷貝配置文件
cd mysql-cluster/support-files/
cp ndb-config-2-node.ini /etc/ndb-config.ini
配置文件內容:
[ndbd default] #爲全部的節點指定默認配置
NoOfReplicas= 1 #定義在Cluster環境中複製份數
MaxNoOfConcurrentOperations= 10000
DataMemory= 80M #分配的數據內存大小,根據本機服務器內存適量來分配,實際運用中須要分配很大
IndexMemory= 24M #設定用於存放索引(非主鍵)數據的內存段大小
TimeBetweenWatchDogCheck= 30000
DataDir= /usr/local/mysql-cluster/cluster-data ##用於存放集羣日誌信息
MaxNoOfOrderedIndexes= 512
[ndb_mgmd default] #管理節點的共用配置項:
DataDir= /usr/local/mysql-cluster/cluster-logs
[ndb_mgmd]
Id=1
HostName= 192.168.100.20
[ndbd] #指定數據節點的配置,每一個數據節點對應一個ndbd配置
Id= 2
HostName= 192.168.100.20 #管理服務器ip
datadir = /data/test
[ndbd]
Id= 3
HostName= 192.168.100.30
datadir = /data/test
[mysqld] #指定SQL節點的配置,每一個SQL節點對應一個配mysqld置
Id= 4
HostName= 192.168.100.20
[mysqld]
Id= 5
HostName= 192.168.100.30
[mysqld]
[mysqld]
[mysqld]
注:配置文件最好保留幾個空的sql節點([mysqld])
啓動管理服務
進入bin目錄下
/usr/local/mysql-cluster/bin/ndb_mgmd --initial -f /etc/ndb-config.ini
注:管理節點實際只須要一個配置文件和bin目錄下的ndb_mgmd、ndb_mgm等文件,其餘並不須要
查看啓動端口
[root@master bin]# netstat -taunlp |grep mgm
tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 51274/./ndb_mgmd
tcp 0 0 127.0.0.1:38052 127.0.0.1:1186 ESTABLISHED 51274/./ndb_mgmd
tcp 0 0 127.0.0.1:1186 127.0.0.1:38052 ESTABLISHED 51274/./ndb_mgmd
數據節點和sql節點
數據節點安裝
此處就和mysql安裝同樣,只是配置文件/etc/my.cnf要修改。並且只須要安裝一個mysql便可,就能夠完成數據節點的安裝和sql節點的安裝,只是啓動方式不同。
解壓並複製
[root@master src]# cp -r mysql-cluster-gpl-7.1.34-linux-x86_64-glibc23 /usr/local/mysql-data
[root@master data]# mkdir test
[root@master data]# chown -R mysql.mysql test
初始化數據庫
[root@master mysql-data]# ./scripts/mysql_install_db --user=mysql --datadir=/data/test
修改ndbd配置文件/etc/my.cnf
注:此配置文件也是sql節點配置文件
[mysqld]
ndbcluster
ndb-connectstring=192.168.100.20
[mysql_cluster]
ndb-connectstring=192.168.100.20
啓動數據節點數據庫ndbd服務
[root@master mysql-data]# /usr/local/mysql-data/bin/ndbd --initial
首次啓動要使用--initial
[root@master mysql-data]# ./bin/ndbd --initial
2016-01-02 00:11:26 [ndbd] INFO -- Angel connected to '192.168.100.20:1186'
2016-01-02 00:11:26 [ndbd] INFO -- Angel allocated nodeid: 2
啓動sql節點
[root@master mysql-cluster]# /usr/local/mysql-data/bin/mysqld_safe --user=mysql &
或service mysqld start
注:從啓動方式能夠看出做爲sql節點啓動時就是通常的mysql服務,能夠有啓動腳本加入開機啓動
對於管理節點、數據節點啓動命令能夠寫入/etc/rc.d/rc.local中隨系統啓動
查看集羣狀態
[root@master local]# /usr/local/mysql-cluster/bin/ndb_mgm -e show
Connected to Management Server at: 192.168.100.20:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.100.20 (mysql-5.1.73 ndb-7.1.34, Nodegroup: 0, *)
id=3 @192.168.100.30 (mysql-5.1.73 ndb-7.1.34, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.100.20 (mysql-5.1.73 ndb-7.1.34)
[mysqld(API)] 5 node(s)
id=4 @192.168.100.20 (mysql-5.1.73 ndb-7.1.34)
id=5 @192.168.100.30 (mysql-5.1.73 ndb-7.1.34)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)
id=8 (not connected, accepting connect from any host)
查看集羣內存使用狀況:
ndb_mgm> all report memoryusage;
Node 2: Data usage is 0%(5 32K pages of total 2560)
Node 2: Index usage is 0%(8 8K pages of total 3104)
Node 3: Data usage is 0%(5 32K pages of total 2560)
Node 3: Index usage is 0%(8 8K pages of total 3104)
測試
# /usr/local/mysql-data/bin/mysql -uroot -p
mysql> show databases;
在一臺上建立,另外臺查看
或:
[root@master local]# ls /data/test/dbo/
db.opt
創建集羣數據
mysql> create table t1(id 1);
mysql> show tables;
+---------------+
| Tables_in_dbo |
+---------------+
| t1 |
+---------------+
1 row in set (0.00 sec)
若是默認不指定引擎爲ndbcluster則存儲在本機
mysql> create table t2(id int ,name varchar(20)) engine ndbcluster;
Query OK, 0 rows affected (1.23 sec)
[root@master mysql-cluster]# ls /data/test/dbo/
db.opt t1.frm t1.MYD t1.MYI t2.frm t2.ndb
[root@slave mysql-cluster]# ls /data/test/dbo/
db.opt t2.frm t2.ndb
集羣管理
各節點啓動關閉
啓動管理節點
/usr/local/mysql-cluster/bin/ndb_mgmd --initial -f /etc/ndb-config.ini
啓動數據節點
[root@master mysql-data]# /usr/local/mysql-data/bin/ndbd --initial
首次啓動要使用--initial
[root@master mysql-data]# ./bin/ndbd --initial
2016-01-02 00:11:26 [ndbd] INFO -- Angel connected to '192.168.100.20:1186'
2016-01-02 00:11:26 [ndbd] INFO -- Angel allocated nodeid: 2
啓動sql節點
[root@master mysql-cluster]# /usr/local/mysql-data/bin/mysqld_safe --user=mysql &
或service mysqld start
節點狀態檢查
[root@master local]# /usr/local/mysql-cluster/bin/ndb_mgm -e show
節點關閉
執行管理節點客戶端ngb_mgm工具
ngb_mgm>shutdown
基本維護
ngb_mgm>show 查看集羣狀態
help 查看命令幫助
help start
關閉集羣順序:SQL節點->數據節點->管理節點 或者使用# ./ndb_mgm -e shutdown命令關閉集羣
啓動集羣順序: 管理節點->數據節點->SQL節點