MySQL NDB Cluster 最新版7.6.7 安裝部署

MySQL NDB Cluster安裝

MySQL集羣是一個無共享的(share-nothing)、分佈式節點架構的存儲方案,目的是提供容錯性和高性能。

 

MySQL NDB Cluster架構如圖:

 

MySQL NDB Cluster架構按照節點類型分爲三部分:

  • 管理節點:管理節點通過對配置文件conifg.ini的維護來對其他節點進行管理。該文件可以用來配置有多少副本需要維護、在數據節點上爲數據和索引分配多少內存、數據節點的位置、數據節點上保存數據的磁盤的位置,SQL節點的位置信息等,管理節點只能有一個。
  • SQL節點:SQL節點可以理解爲應用程序和數據節點的一個橋樑,應用程序不能直接訪問數據節點,只能先訪問SQL節點,然後SQL節點再去訪問數據節點來返回數據,Cluster中可以有多個SQL節點,通過每個SQL節點查詢到的數據都是一致的,一般來說,SQL節點越多,分配到每個SQL節點的負載就越小,系統的整體性能就越好;
  • 數據節點:數據節點用來存放數據,可有多個數據節點。

 

下面演示MySQL NDB Cluster的部署安裝:

在5臺VMware 虛擬機上安裝部署

在每臺虛擬機上執行

  [root@localhost ~]#  vi  /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.133.131  mgr
172.16.133.132  ndb01
172.16.133.133  ndb02
172.16.133.134  ndb03
172.16.133.135  ndb04
 

使局域網內集羣可以通過主機名訪問

1、環境信息:

  1. 管理節點mgr172.16.133.131
  2. SQL節點ndb01172.16.133.132
  3. SQL節點ndb02172.16.133.133
  4. 數據節點ndb03172.16.133.134
  5. 數據節點ndb04172.16.133.135

2、下載MySQL NDB Cluster軟件;

下載最新版:https://cdn.mysql.com//Downloads/MySQL-Cluster-7.6/mysql-cluster-gpl-7.6.7-linux-glibc2.12-x86_64.tar.gz

3、安裝SQL節點,在每個SQL節點都執行如下操作;

1)創建mysql用戶和組,如果該用戶和組不存在:

  [root@localhost ~]# userdel mysql  (因爲是新系統,所以就把現有的MySQL用戶給刪除了)
  [root@localhost ~]# groupadd mysql
  [root@localhost ~]# useradd -g mysql mysql
  [root@localhost ~]# passwd mysql     (MySQL密碼要設置的複雜一點,或者在創建用戶的時候設置不讓登陸系統

  [root@localhost ~]# mkdir -p /data/mysql/db_file  在mysql 下創建bin_log 、log 目錄
  [root@localhost ~]# chown -R mysql:mysql /data

2)解壓縮 mysql-cluster軟件;

  [root@localhost ~]# tar -xvf   mysql-cluster-gpl-7.6.7-linux-glibc2.12-x86_64.tar.gz
  [root@localhost ~]# mv  mysql-cluster-gpl-7.6.7-linux-glibc2.12-x86_64 /usr/local/mysql

3)安裝數據庫系統;

 [root@localhost ~]# su - mysql
[mysql@localhost~]$

/usr/local/mysql/bin/mysqld --initialize --user=mysql  --basedir=/usr/local/mysql/ --datadir=/data/mysql/db_file/

 -----注意,初始化數據庫會生成登錄MySQL數據庫的root密碼,一定要記住,一會登錄數據庫要用

編輯SQL節點 my.cnf 文件

[mysqld]
character_set_server=utf8

collation_server=utf8_bin

max_allowed_packet = 128M 

event_scheduler =1

open_files_limit = 20480

max_connections = 3000 

default-storage-engine=ndbcluster

basedir=/usr/local/mysql/

datadir=/data/mysql/db_file

user=mysql

log-error=/data/mysql/log/sqlnode.err

ndbcluster

ndb-connectstring=mgr 

[mysql_cluster]

ndb-connectstring=mgr

 

[root@localhost ~]#  vi /etc/profile  在最下方加上  

export PATH
PATH=$PATH:/usr/local/mysql/bin
保存退出

source /etc/profile 使環境生效

4)拷貝MySQL啓動腳本;

  [root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server

[mysql@localhost ~]$ /usr/local/mysql/support-files/mysql.server start 
[mysql@localhost ~]$ /usr/local/mysql/bin/mysqld_safe --defaults-file=/ect/my.cnf  --user=mysql & (效果一樣)

5)進入數據庫檢查;
[mysql@localhost ~]$  /usr/local/mysql/bin/mysql -u root -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.18-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set password='root';  (因爲剛纔使用的密碼是個默認的登錄密碼,所以我們要修改)
mysql> flush privileges;

然後再重新登錄MySQL即可,進行檢查

 

這樣,二進制的MySQL SQL節點就順利安裝完成了。

4、安裝數據節點,在每個數據節點都執行如下操作;

  [root@localhost ~]# tar -xvf   mysql-cluster-gpl-7.6.7-linux-glibc2.12-x86_64.tar.gz
  [root@localhost ~]# mv  mysql-cluster-gpl-7.6.7-linux-glibc2.12-x86_64 /usr/local/mysql

  創建數據文件存放路徑

[root@localhost ~]# mkdir -p /data/mysql/db_file  在mysql 下創建log目錄

編輯數據節點my.cnf

[mysqld]
basedir=/usr/local/mysql/

datadir=/data/mysql/db_file

user=mysql

log-error=/data/mysql/log/sqlnode.err

ndbcluster

ndb-connectstring=mgr

[mysql_cluster]

ndb-connectstring=mgr

vi /etc/profile 在最下方加上  

export PATH
PATH=$PATH:/usr/local/mysql/bin
保存退出

source /etc/profile 使環境生效

建議用上述方式,因爲以後使用我們可能會使用其他的管理工具查詢集羣狀態,如 ndb_cofig 等

或者直接scp sql節點  將ndbdndbmtd拷貝至/usr/local/bin/目錄中

5、安裝管理節點;

  [root@localhost ~]# tar -xvf   mysql-cluster-gpl-7.6.7-linux-glibc2.12-x86_64.tar.gz
  [root@localhost ~]# mv  mysql-cluster-gpl-7.6.7-linux-glibc2.12-x86_64 /usr/local/mysql

  [root@localhost ~]# mkdir -p /data/mysql-cluster 作爲管理節點文件存放路徑

  [root@localhost ~]#  vi /etc/profile  在最下方加上  

export PATH
PATH=$PATH:/usr/local/mysql/bin
保存退出

source /etc/profile 使環境生效

建議用上述方式,因爲以後使用我們可能會使用其他的管理工具查詢集羣狀態,如 ndb_cofig 等

或者直接scp sql節點  將ndb_mgmndb_mgmd拷貝至/usr/local/bin/目錄中

編輯管理節點config.ini 

[root@mgr ~]# cat /data/mysql-cluster/config.ini 
[ndbd default]

NoOfReplicas=2

DataMemory=1024M

StringMemory=5M
MaxNoOfTables = 1024
MaxNoOfAttributes = 5000000
MaxNoOfOrderedIndexes = 10000
MaxNoOfTriggers = 10240      
MaxNoOfConcurrentTransactions = 4096
MaxNoOfLocalOperations=110000
MaxNoOfConcurrentOperations=100000 
TransactionDeadLockDetectionTimeOut = 15000
[ndb_mgmd]

hostname=mgr

datadir=/data/mysql-cluster

[ndbd]
NodeId=2
hostname=ndb03
datadir=/data/mysql/db_file
StopOnError=0

[ndbd]
NodeId=3
hostname=ndb04
datadir=/data/mysql/db_file
StopOnError=0

[mysqld]
NodeId=4
hostname=ndb01

[mysqld]
NodeId=5
hostname=ndb02

[mysqld]


[mysqld]
各個參數作用不在詳細介紹,可以自己google.根據自己的硬件及需求修改。

---注意:7.6.7版本不在支持IndexMemory,新版本將IndexMemory和DataMemory合併。

 

6、啓動Cluster

Cluster需要各個節點都進行啓動後纔可以運行,節點的啓動順序爲管理節點——>數據節點——>SQL節點。

啓動管理節點:

  1. [root@mgr mysql-cluster]# ndb_mgmd - f ./config.ini --initial (如修改config.ini中配置,需要添加該參數才生效)
  2. MySQL Cluster Management Server mysql-5.7.21 ndb-7.5.9
  3. [root@mgrmysql-cluster]# ps aux |grep ndb_mgmd
  4. root      8155  2.5  0.6 504480  3380 ?        Ssl  20:48   0:00 ndb_mgmd -f ./config.ini
  5. root      8166 13.0  0.1 112632   968 pts/0    S+   20:48   0:00 grep --color=auto ndb_mgmd
  6. [root@mgr mysql-cluster]#

啓動數據節點:

  1. [root@strong local]# ndbd  --initial   (第一次啓動是添加該參數,初始化數據節點,如在有數據情況下,該參數將刪除所有數據,用於數據恢復時用,謹記!!!)
  2. 2018-09-06 20:51:40 [ndbd] INFO     -- Angel connected to '10.24.32.180:1186'
  3. 2018-09-06 20:51:40 [ndbd] INFO     -- Angel allocated nodeid: 2

啓動SQL節點:

  1. [root@ndb01 ~]# service mysql.server start
  2. Starting MySQL........................................................................................................................................... SUCCESS!

7、節點全部成功啓動後,在管理節點查看集羣狀態;

[root@mgr ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show 
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]    2 node(s)
id=2    @172.16.133.134  (mysql-5.7.23 ndb-7.6.7, Nodegroup: 0, *)
id=3    @172.16.133.135  (mysql-5.7.23 ndb-7.6.7, Nodegroup: 0)

[ndb_mgmd(MGM)]    1 node(s)
id=1    @172.16.133.131  (mysql-5.7.23 ndb-7.6.7)

[mysqld(API)]    4 node(s)
id=4    @172.16.133.132  (mysql-5.7.23 ndb-7.6.7)
id=5    @172.16.133.133  (mysql-5.7.23 ndb-7.6.7)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)

ndb_mgm> 
 

ndb_mgmndb_mgmdMySQL Cluster Server)的客戶端管理工具,通過它可以方便的檢查Cluster的狀態、啓動備份、關閉Cluster等功能。

通過上面的狀態信息,可以看到:

  1. 1)集羣的管理服務端口是1186
  2. Connected to Management Server at: localhost:1186
  3. 2)集羣的數據節點有2個;
  4. [ndbd(NDB)]       2 node(s)
    id=2    @172.16.133.134  (mysql-5.7.23 ndb-7.6.7, Nodegroup: 0, *)
    id=3    @172.16.133.135  (mysql-5.7.23 ndb-7.6.7, Nodegroup: 0)
  5. 3)管理節點有一個;
  6. [ndb_mgmd(MGM)]    1 node(s)
    id=1    @172.16.133.131  (mysql-5.7.23 ndb-7.6.7)
  7. [ndb_mgmd(MGM)]   1 node(s)
  8. id=1       @10.24.32.180  (mysql-5.7.21 ndb-7.5.9)
  9. 4SQL節點有4個,且處於連接狀態;
  10. [mysqld(API)]    4 node(s)
    id=4    @172.16.133.132  (mysql-5.7.23 ndb-7.6.7)
    id=5    @172.16.133.133  (mysql-5.7.23 ndb-7.6.7)
    id=6 (not connected, accepting connect from any host)
    id=7 (not connected, accepting connect from any host)

8、測試Cluster

使用Cluster,則表的存儲引擎必須爲NDB,其他類型存儲引擎的數據不會保存到數據節點中,對於CLuster的一個重要功能就是防止單點故障,下面將分別進行測試:

1NDB存儲引擎測試

  1. --在任一SQL節點(本例用172.16.133.132)的test庫創建測試表t_cluster,設置存儲引擎爲NDB
  2. mysql> create table t_cluster(id int,name varchar(100),cdate datetime default now()) engine=NDB;
  3. Query OK, 0 rows affected (0.42 sec)
  4.  
  5. mysql> insert into t_cluster(id,name) values(1,'Alen'),(2,'Cluster Test');
  6. Query OK, 2 rows affected (0.10 sec)
  7. Records: 2  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> select *from t_cluster;
  10. +------+--------------+---------------------+
  11. | id   | name         | cdate               |
  12. +------+--------------+---------------------+
  13. |    1 | Alen         | 2018-09-06 23:07:50 |
  14. |    2 | Cluster Test | 2018-09-06 23:07:50 |
  15. +------+--------------+---------------------+
  16. 2 rows in set (0.03 sec)
  17.  
  18. mysql>
  19. --在另一SQL節點(本例用172.16.133.133)的test庫查詢表t_cluster,結果如下:
  20. mysql> select *from t_cluster;
  21. +------+--------------+---------------------+
  22. | id   | name         | cdate               |
  23. +------+--------------+---------------------+
  24. |    1 | Alen         | 2018-09-06 23:07:50 |
  25. |    2 | Cluster Test | 2018-09-06 23:07:50 |
  26. +------+--------------+---------------------+
  27. 2 rows in set (0.02 sec)
  28.  
  29. mysql>
  30. --如上,兩個SQL節點查詢到的數據是一致的。
  31. --SQL節點172.16.133.132將表t_cluster的存儲引擎改爲MyISAM,再次插入測試:
  32. mysql> alter table t_cluster engine=myisam;
  33. Query OK, 2 rows affected (0.66 sec)
  34. Records: 2  Duplicates: 0  Warnings: 0
  35.  
  36. mysql> insert into t_cluster(id,name) values(3,'MyISAM Test');
  37. Query OK, 1 row affected (0.03 sec)
  38.  
  39. mysql> select *from t_cluster;
  40. +------+--------------+---------------------+
  41. | id   | name         | cdate               |
  42. +------+--------------+---------------------+
  43. |    2 | Cluster Test | 2018-09-06 23:07:50 |
  44. |    1 | Alen         | 2018-09-06 23:07:50 |
  45. |    3 | MyISAM Test  | 2018-09-06 23:15:02 |
  46. +------+--------------+---------------------+
  47. 3 rows in set (0.00 sec)
  48.  
  49. mysql>
  50. --SQL節點172.16.133.133再次查詢表t_cluster,可以發現,表無法查詢,結果如下:
  51. mysql> select *from t_cluster;
  52. ERROR 1412 (HY000): Table definition has changed, please retry transaction
  53. mysql>
  54. --SQL節點172.16.133.132將表t_cluster的存儲引擎改爲NDB
  55. mysql> alter table t_cluster engine=ndb;
  56. Query OK, 3 rows affected (0.32 sec)
  57. Records: 3  Duplicates: 0  Warnings: 0
  58.  
  59. mysql>
  60. --SQL節點172.16.133.133再次查詢,結果如下:
  61. mysql> select *from t_cluster;
  62. +------+--------------+---------------------+
  63. | id   | name         | cdate               |
  64. +------+--------------+---------------------+
  65. |    3 | MyISAM Test  | 2018-03-06 23:15:02 |
  66. |    1 | Alen         | 2018-03-06 23:07:50 |
  67. |    2 | Cluster Test | 2018-03-06 23:07:50 |
  68. +------+--------------+---------------------+
  69. 3 rows in set (0.01 sec)
  70.  
  71. mysql>
  72. --顯然,表t_cluster的數據再次同步到了數據節點,所有SQL節點又都可以正常查詢數據。

9、Cluster的關閉;

  1. [root@strong mysql-cluster]# ndb_mgm
  2. -- NDB Cluster -- Management Client --
  3. ndb_mgm> shutdown
  4. Connected to Management Server at: localhost:1186
  5. Node 2: Cluster shutdown initiated
  6. Node 3: Cluster shutdown initiated
  7. Node 3: Node shutdown completed.
  8. 3 NDB Cluster node(s) have shutdown.
  9. Disconnecting to allow management server to shutdown.
  10. Node 2: Node shutdown completed.
  11. ndb_mgm>

注意:集羣關閉後,SQL節點不會關閉,需手工關閉;

經測試:虛擬機根本無法發揮集羣高併發的性能,同時集羣對網絡要求很是苛刻,數據節點經常無故宕服務,弄得手忙腳亂,如果倉促上正式環境,只能說佛祖保佑!!!這也是mysql ndb cluster 沒有廣泛使用的原因,bug太多!!!

如有問題探討,請加QQ羣:695182221

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章