MySQL-Cluster

MySQL-Cluster集群搭建

博主本人热爱学习,读者阅读过程中如果发现有错误的地方或是有更好的实现方式,请与本人联系(qq:1805608587),或是在评论区留言,谢谢!


文章说明:本文是作者原创,请尊重个人劳动成果,转载需注明出处

MySQL-cluster 架构,节点,节点作用

MySQL-Cluster

  • 原理:

SQL节点: 给上层应用层提供sql访问。

管理节点(MGM):  管理整个集群。 启动,关闭集群。 通过ndb_mgmd命令启动集群

存储/数据节点: 保存cluster中的数据。  数据节点,可以提供副本。实现数据冗余。

NDB引擎:是一种 “内存中”的存储引擎 , 它具有可用性高和数据一致性好的特点。

  • NDB引擎

MySQL Cluster 使用了一个专用的基于内存的存储引擎——NDB引擎,这样做的好处是速度快, 没有磁盘I/O的瓶颈,但是由于是基于内存的,所以数据库的规模受系统总内存的限制, 如果运行NDB的MySQL服务器一定要内存够大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多台服务器上来实现数据的可靠性和扩展性,理论上 通过配置2台NDB的存储节点就能实现整个数据库集群的冗余性和解决单点故障问题。

  • 小结:共三层节点

1.管理节点(MGM,对内管理存储节点)

2.存储节点(NDB存储引擎,对接管理节点和SQL节点,用于存储数据)

3.SQL节点(对外接口API)

  • 优缺点

优点

1.高吞吐量和低延迟,使用NDB存储引擎(基于内存),存储数据速度快,没有IO瓶颈

2.灵活的分布式体系架构,解决单点故障

3.可扩展性强,可以在线扩容(例如:添加一台存储节点)

缺点

1.消耗内存大,集群内存大小将决定数据库集群规模

2.断电数据将会丢失

3.每个节点是通过网络实现通信,所以访问速度受网络带宽影响

MySQL-Cluster的下载地址:https://dev.mysql.com/downloads/cluster/

实验环境:

 

主机

节点

作用

HOSTNAME

软件

192.168.247.60

MGM

对内管理存储节点

 

management-server

community-server

cluster-client

192.168.247.61

NDB01

数据(存储)节点

 

community-server

data-node

192.168.247.62

NDB02

数据(存储)节点

 

community-server

data-node

192.168.247.63

SQL01

对外接口

 

community-server

MySQL-client

192.168.247.64

SQL02

对外接口

 

community-server

MySQL-client


1.1. 设置时间
一、环境准备
MySQL-Cluster集群搭建
 

timedatectl set-timezone Asia/Shanghai
date

1.1. 设置SELinux

sed  -i 's/enforcing/disabled/g' /etc/selinux/config 
setenforce 0
getenforce

1.1. 清空系统mysql

yum -y remove mysql
检查清空情况:
rpm -qa | grep mysql
继续删除系统文件:
rm -rf  /var/lib/mysql/*
rm -rf  /etc/my.cnf
rm -rf  /etc/init.d/mysqld
vim  /etc/profile  删除与mysql相关内容

1.1. 安装依赖

yum install -y perl perl-Class-MethodMaker perl-DBI libaio numactl

1.1. 设置防火墙

systemctl disable firewalld.service 
systemctl stop firewalld.service 
iptables -F

二、安装MySQL-Cluster

(命令窗口下操作)--对所有主机

cd /opt
mkdir mysql-cluster
yum install -y lrzsz-0.12.20-36.el7.x86_64   --rz命令上传文件,或是使用xftp(推荐使用xftp)
chmod  755 /opt/mysql-cluster/*
scp /opt/mysql-cluster/* root@192.168.247.61:/opt/mysql-cluster --scp传输到所有服务器
rpm -ivh mysql-cluster-community-server-7.6.13-1.el7.x86_64.rpm --nodeps  --force

三、安装data-node(仅仅数据节点需要)

rpm -ivh mysql-cluster-community-data-node-7.6.13-1.el7.x86_64.rpm --nodeps  --force

四、设置集群

4.1. 管理节点:

温习提示:先在这台管理节点上面安装cluster-client,主要是方便修管理这个节点

rpm -ivh mysql-cluster-community-client-7.6.13-1.el7.x86_64.rpm --nodeps --force

设置配置文件

[root@mgm ~]# cat /usr/mysql-cluster/config.ini 
[ndbd default]
NoOfReplicas=2                                #数据写入数量。2表示两份
DataMemory=200M                               #配置数据存储可使用的内存
IndexMemory=100M                              #索引给100M
[ndb_mgmd]
nodeid=1
datadir=/var/lib/mysql                       #管理结点的日志
HostName=192.168.247.60                      #管理结点的IP地址。本机IP
###### data node options:                         #存储结点
[ndbd]
HostName=192.168.247.61
DataDir=/var/lib/mysql                            #mysql数据存储路径
nodeid=2
[ndbd]
HostName=192.168.247.62
DataDir=/var/lib/mysql                            #mysql数据存储路径
nodeid=3
# SQL node options:                               #关于SQL结点
[mysqld]
HostName=192.168.247.63
nodeid=4
[mysqld]
HostName=192.168.247.64
nodeid=5
[root@mgm ~]# 

4.2. 数据节点

(两台机器一样)

温习提示:先在这两台SQL节点上面安装mysql-client,主要是方便修改密码和验证其它功能

rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm --nodeps  --force 

设置配置文件

[root@ndb01 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql                        #mysql数据存储路径
ndbcluster                                    #启动ndb引擎
ndb-connectstring=192.168.247.60              # 管理节点IP地址
[mysqld_safe] 
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.247.60              #管理节点IP地址

[root@ndb01 ~]# 

4.3. SQL节点

(两台机器一样)

[root@sql01 ~]# cat /etc/my.cnf
[mysqld]
ndbcluster                               #启动ndb引擎
ndb-connectstring=192.168.247.60         # 管理节点IP地址
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster] 
ndb-connectstring=192.168.247.60         #管理节点IP地址
[root@sql01 ~]# 

五、启动集群

5.1. 启动与关闭

启动顺序:

管理节点->数据节点->SQL节点

关闭顺序:

管理节点->数据节点->SQL节点

实质:关闭管理结点服务,关闭管理结点服务后,nbdb数据结点服务会自动关闭->手动把sql结点服务关了

5.2. 启动

5.2.1. 启动管理节点(mgm):

[root@mgm ~]# ndb_mgmd --ndb_nodeid=1 --initial -f /usr/mysql-cluster/config.ini
MySQL Cluster Management Server mysql-5.7.29 ndb-7.6.13
2020-02-27 15:19:39 [MgmtSrvr] WARNING  -- at line 4: [DB] IndexMemory is deprecated, will use Number bytes on each ndbd(DB) node allocated for storing indexes instead
--IndexMemory是不推荐的,它将在为存储索引而分配的每个ndbd(DB)节点上使用数字字节
[root@mgm ~]# netstat -ntulp |grep 1186
tcp        0      0 0.0.0.0:1186            0.0.0.0:*               LISTEN      21237/ndb_mgmd      
[root@mgm ~]# 

5.2.2. 启动数据节点(ndb)

[root@ndb01 mysql]# ndbd --initial
2020-02-27 15:24:02 [ndbd] INFO     -- Angel connected to '192.168.247.60:1186'
2020-02-27 15:24:02 [ndbd] INFO     -- Angel allocated nodeid: 2
[root@ndb01 mysql]#
[root@ndb02 mysql]# ndbd --initial
2020-02-27 15:24:18 [ndbd] INFO     -- Angel connected to '192.168.247.60:1186'
2020-02-27 15:24:18 [ndbd] INFO     -- Angel allocated nodeid: 3
[root@ndb02 mysql]# 

5.2.3. 启动SQL节点(SQL):

systemctl start mysqld.service 

破解密码

先关闭密码策略(validate-password=off)再设置mysql密码:
[root@sql02 ~]# grep password /var/log/messages  --注意,不是常规的mysql日志
mysql> alter user root@localhost identified by '123456';
mysql> flush privileges;

授权访问:
mysql> grant all privileges on *.* to 'root'@'192.168.247.%' identified by '123456';        
mysql> flush privileges;

5.2.4 关闭

关闭管理节点

[root@mgm ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> shutdown
Connected to Management Server at: localhost:1186
1 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
ndb_mgm> 
关闭管理结点服务后,nbdb数据结点服务会自动关闭->手动把sql结点服务关了

六、模拟测试

6.1. 查看集群状态

[root@mgm mysql-cluster]# 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    @192.168.247.61  (mysql-5.7.29 ndb-7.6.13, Nodegroup: 0, *)
id=3    @192.168.247.62  (mysql-5.7.29 ndb-7.6.13, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.247.60  (mysql-5.7.29 ndb-7.6.13)

[mysqld(API)]   2 node(s)
id=4    @192.168.247.63  (mysql-5.7.29 ndb-7.6.13)
id=5    @192.168.247.64  (mysql-5.7.29 ndb-7.6.13)

ndb_mgm> 

6.2. 创建测试数据

mysql -uroot -p123456 -h192.168.247.64
mysql> create database tanskdb;
mysql> use tanskdb;mysql> create table ndb_test( id int(10), city varchar(20) )engine=ndb default character set=utf8;
mysql> insert into ndb_test values(1,'洛杉矶');  

验证:

关闭SQL02(192.168.247.64)
[root@sql02 ~]# systemctl stop mysqld.service 
登录SQL01查看
mysql> select * from ndb_test;
+------+-----------+
| id   | city      |
+------+-----------+
|    1 | 洛杉矶    |
+------+-----------+
1 row in set (0.00 sec)
发现有数据

顺便插入一条数据:
mysql> insert into ndb_test values (2,'克利夫兰');
Query OK, 1 row affected (0.01 sec)

再次开启SQL02,登录查看:

MySQL-Cluster

由此可见,任何一台机器宕机都不会影响生产,两台SQL节点可以同时对外服务。

集群至此搭建完成


 

转载需注明出处

 

上一篇:RSS 实体清单


下一篇:MySQL Cluster-备份和恢复