一、MySQL Cluster介绍

1. 基本概念

  MySQL Cluster简单地讲是一种MySQL集群的技术,是由一组计算机构成,每台计算机可以存放一个或者多个节点,其中包括MySQL服务器,DNB Cluster的数据节点,管理其他节点,以及专门的数据访问程序,这些节点组合在一起,就可以为应用提高可高性能、高可用性和可缩放性的Cluster数据管理

2. 访问过程

  应用通常使用一定的负载均衡算法将对数据访问分散到不同的SQL节点,SQL节点对数据节点进行数据访问并从数据节点返回数据结果,管理节点仅仅只是对SQL节点和数据节点进行配置管理。MySQL NDB Cluster架构如图如下:

java mysql 配置 集群 mysql 集群部署_java mysql 配置 集群

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:

  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节点连接不上。