MySQL集群是一个无共享的(share-nothing)、分布式节点架构的存储方案,目的是提供容错性和高性能。
MySQL NDB Cluster架构如图:
MySQL NDB Cluster架构按照节点类型分为三部分:
下面演示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、环境信息:
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 ~]# userdel mysql (因为是新系统,所以就把现有的MySQL用户给删除了)
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -g mysql mysql
[root@localhost ~]# passwd mysql (MySQL密码要设置的复杂一点,或者在创建用户的时候设置不让登陆系统
[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目录
[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节点 将ndbd、ndbmtd拷贝至/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_mgm、ndb_mgmd拷贝至/usr/local/bin/目录中
[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节点。
启动管理节点:
启动数据节点:
启动SQL节点:
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_mgm是ndb_mgmd(MySQL Cluster Server)的客户端管理工具,通过它可以方便的检查Cluster的状态、启动备份、关闭Cluster等功能。
通过上面的状态信息,可以看到:
8、测试Cluster;
使用Cluster,则表的存储引擎必须为NDB,其他类型存储引擎的数据不会保存到数据节点中,对于CLuster的一个重要功能就是防止单点故障,下面将分别进行测试:
1)NDB存储引擎测试
9、Cluster的关闭;
注意:集群关闭后,SQL节点不会关闭,需手工关闭;
经测试:虚拟机根本无法发挥集群高并发的性能,同时集群对网络要求很是苛刻,数据节点经常无故宕服务,弄得手忙脚乱,如果仓促上正式环境,只能说佛祖保佑!!!这也是mysql ndb cluster 没有广泛使用的原因,bug太多!!!
如有问题探讨,请加QQ群:695182221