一、MySQL Cluster介绍
1. 基本概念
MySQL Cluster简单地讲是一种MySQL集群的技术,是由一组计算机构成,每台计算机可以存放一个或者多个节点,其中包括MySQL服务器,DNB Cluster的数据节点,管理其他节点,以及专门的数据访问程序,这些节点组合在一起,就可以为应用提高可高性能、高可用性和可缩放性的Cluster数据管理
2. 访问过程
应用通常使用一定的负载均衡算法将对数据访问分散到不同的SQL节点,SQL节点对数据节点进行数据访问并从数据节点返回数据结果,管理节点仅仅只是对SQL节点和数据节点进行配置管理。MySQL NDB Cluster架构如图如下:
3. MySQL Cluster 节点
3.1.管理节点:
管理节点主要是用来对其他的节点进行管理。通常通过配置config.ini文件来配置集群中有多少需要维护的副本、配置每个数据节点上为数据和索引分配多少内存、IP地址、以及在每个数据节点上保存数据的磁盘路径;
管理节点通常管理Cluster配置文件和Cluster日志。Cluster中的每个节点从管理服务器检索配置信息,并请求确定管理服务器所在位置的方式。如果节点内出现新的事件的时候,节点将这类事件的信息传输到管理服务器,将这类信息写入到Cluster日志中;
一般在MySQL Cluster体系中至少需要一个管理节点,另外值得注意的是,因为数据节点和SQL节点在启动之前需要读取Cluster的配置信息,所以通常管理节点是最先启动的;
3.2.SQL节点:
SQL节点可以理解为应用程序和数据节点的一个桥梁,简单地讲就是mysqld服务器,应用不能直接访问数据节点,只能通过SQL节点访问数据节点来返回数据。任何一个SQL节点都是连接到所有的存储节点的,所以当任何一个存储节点发生故障的时候,SQL节点都可以把请求转移到另一个存储节点执行。通常来讲,SQL节点越多越好,因为SQL节点越多,分配到每个SQL节点的负载就越小,系统的整体性能就越好;
3.3.数据节点:
数据节点用来存放Cluster里面的数据,可以有很多个,MySQL Cluster在各个数据节点之间复制数据,任何一个节点发生了故障,始终会有另外的数据节点存储数据。
二、卸载原有MySQL
1. 使用yum卸载
yum -y remove mysql mysql-server mysql-libs mysql-server
2. 使用rpm查看并卸载
rpm -qa | grep -i mysql
rpm -e MySQL-*
3. 删除MySQL相关分散文件夹
for i in ` find / -name mysql`; do rm -rf $i; done
4. 删除配置文件及默认密码
rm -rf /etc/my.cnf
rm -rf /root/.mysql_sercret
三、MySQL Cluster的安装
1. 节点配置说明
节点名称 | IP | hostname |
---|---|---|
管理节点 | 192.168.75.11 | mgr |
SQL节点 | 192.168.75.12 | ndb01 |
SQL节点 | 192.168.75.13 | ndb02 |
数据节点 | 192.168.75.14 | ndb03 |
数据节点 | 192.168.75.15 | ndb04 |
2. 修改 /etc/hosts文件
在/etc/hosts文件中追加如下信息,使局域网内集群可以通过主机名称访问(/etc/my.cnf、/data/mysql/config.ini配置文件中都以主机名作为参数):
192.168.75.11 mgr
192.168.75.12 ndb01
192.168.75.13 ndb02
192.168.75.14 ndb03
192.168.75.15 ndb04
3. 使用迅雷下载MySQL Cluster:
4. 安装SQL节点,在ndb01、ndb02进行如下操作:
1) 创建MySQL用户和组:
[root@localhost ~]# userdel mysql
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -g mysql mysql
[root@localhost ~]# passwd mysql
2) 创建MySQL文件存放路径:
[root@localhost ~]# mkdir -p /data/mysql/db_file
[root@localhost ~]# mkdir -p /data/mysql/bin_log
[root@localhost ~]# mkdir -p /data/mysql/log
3) 解压安装包并移动到/usr/local/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
4) 更改/usr/local/mysql、/data的用户和组:
[root@localhost ~]# chown -R mysql:mysql /data
[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql
5) 安装数据库系统
[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账户的临时密码
6) 创建/etc/my.cnf文件并添加SQL节点配置:
[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
7) 切换到root用户添加环境变量:
在/ect/profile文件中添加:
export PATH =$PATH:/usr/local/mysql/bin
保存退出,并且执行:
[root@localhost ~]# source /etc/profile
8) 编辑 ~/.bashrc 并添加:source /etc/profile
使环境变量永久生效
9) 拷贝MySQL启动文件并启动MySQL
[root@localhost ~]#cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server
[root@localhost ~]#su - mysql
[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 &
10) 进入数据库并修改临时密码
[mysql@localhost ~]$ /usr/local/mysql/bin/mysql -u root -p
Enter password:*********
mysql> set password='root';
mysql> flush privileges;
11) 重新登陆测试密码后退出,关闭MySQL:
[mysql@localhost ~]$/usr/local/mysql/support-files/mysql.server stop
5. 安装数据节点,在ndb03、ndb04进行如下操作:
1) 创建用户和组
[root@localhost ~]# userdel mysql
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -g mysql mysql
[root@localhost ~]# passwd mysql
2) 解压安装包并移动到/usr/local/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
3) 创建MySQL文件存放路径:
[root@localhost ~]# mkdir -p /data/mysql/db_file
[root@localhost ~]# mkdir -p /data/mysql/log
4) 创建 /etc/my.cnf 文件并添加SQL节点配置:
[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
5) 切换到root用户添加环境变量:
在 /ect/profile 文件中添加:
export PATH =$PATH:/usr/local/mysql/bin
保存退出,并且执行:
[root@localhost ~]# source /etc/profile
6) 编辑 ~/.bashrc 并添加:source /etc/profile
使环境变量永久生效
7) 注:建议用上述方式,因为以后使用过程中,可能会使用其他的管理工具查询集群状态,如 ndb_cofig 等。或者直接scp sql节点 将ndbd、ndbmtd拷贝至/usr/local/bin/目录中
6. 安装管理节点,在mgr进行如下操作:
1) 解压安装包并移动到/usr/local/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
2) 创建管理节点文件存放路径:
[root@localhost ~]# mkdir -p /data/mysql-cluster
3) 切换到root用户添加环境变量:
在 /ect/profile 文件中添加:
export PATH =$PATH:/usr/local/mysql/bin
保存退出,并且执行:
[root@localhost ~]# source /etc/profile
4) 编辑 ~/.bashrc 并添加: source /etc/profile
使环境变量永久生效
5) 创建并编辑管理节点配置文件:
[root@mgr ~]# vi /data/mysql-cluster/config.ini
[ndbd default]
# Number of data nodes
NoOfReplicas=2
DataMemory=1024M
StringMemory=5M
MaxNoOfTables=1024
MaxNoOfAttributes=5000000
MaxNoOfOrderedIndexes=10000
MaxNoOfTriggers=10240
MaxNoOfConcurrentTransactions=4096
MaxNoOfLocalOperations=110000
MaxNoOfConcurrentOperations=100000
TransactionDeadLockDetectionTimeOut=15000
[ndb_mgmd]
NodeId=1
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
四、启动MySQL Cluster
Cluster需要各个节点都进行启动后才可以运行,节点的启动顺序为:
管理节点——>数据节点——>SQL节点
注:需要关闭各节点防火墙:
[root@localhosrt ~]# systemctl stop firewalld
[root@localhosrt ~]# systemctl disable firewalld
a) 启动管理节点:
# 第一次启动或者修改config.ini后需添加 –initial 进行初始化:
[root@mgr mysql-cluster]# ndb_mgmd -f ./config.ini –initial
# 启动成功只提示:
# MySQL Cluster Management Server mysql-5.7.23 ndb-7.6.7
# 查看进程:
# [root@mgrmysql-cluster]# ps aux |grep ndb_mgmd
b) 启动数据节点
# 第一次启动是添加 --initial,初始化数据节点,如在有数据情况下,该参数将删除所有数据)
[root@strong local]# ndbd --initial
# 数据节点启动成功提示:
# 2020-03-26 15:37:48 [ndbd] INFO -- Angel connected to 'mgr:1186'
# 2020-03-26 15:37:48 [ndbd] INFO -- Angel allocated nodeid: 3
c) 启动SQL节点
[root@ndb01 ~]# service mysql.server start
[root@ndb02 ~]# service mysql.server start
d) 节点全部启动成功可通过管理节点查看状态
—虚拟机不给力,临时改用1个数据节点
[root@mgr ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 1 node(s)
id=2 @192.168.75.14 (mysql-5.7.23 ndb-7.6.7, Nodegroup: 0, *)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.75.11 (mysql-5.7.23 ndb-7.6.7)
[mysqld(API)] 2 node(s)
id=4 @192.168.75.12 (mysql-5.7.23 ndb-7.6.7)
id=5 @192.168.75.13 (mysql-5.7.23 ndb-7.6.7)
ndb_mgm是ndb_mgmd(MySQL Cluster Server)的客户端管理工具,通过它可以方便的检查Cluster的状态、启动备份、关闭Cluster等功能。
通过上面的状态信息,可以看到:
1)集群的管理服务端口是1186;
Connected to Management Server at: localhost:1186
2)集群的数据节点有1个;
[ndbd(NDB)] 1 node(s)
id=2 @192.168.75.14 (mysql-5.7.23 ndb-7.6.7, Nodegroup: 0, *)
3)管理节点有一个;
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.75.11 (mysql-5.7.23 ndb-7.6.7)
4)SQL节点有2个,且处于连接状态;
id=4 @192.168.75.12 (mysql-5.7.23 ndb-7.6.7)
id=5 @192.168.75.13 (mysql-5.7.23 ndb-7.6.7)
五、测试Cluster
使用Cluster,则表的存储引擎必须为NDB,其他类型存储引擎的数据不会保存到数据节点中,对于CLuster的一个重要功能就是防止单点故障
在任意节点中新创建database,添加存储引擎未NDB的表,都可在另外一个SQL节点中查询到。数据一致。
关闭Cluster
[root@mgr ~]# ndb_mgm
ndb_mgm>shutdown
# 集群管理节点关闭后,数据节点自动关闭,SQL节点另需收到手动关闭。
安装过程所遇问题解决方式
问题1-1:初始化SQL节点之前使用yum安装 libaio
yum install -y libaio //安装后在初始化就OK了
问题1-2:配置文件中尽量不要粘贴windows复制过来的空格,特别是数字前后
问题1-3:关闭各节点防火墙:[root@localhosrt ~]# systemctl stop firewalld
或者通过防火墙打开所需端口,不然管理节点与数据节点、SQL节点连接不上。