博主本人热爱学习,读者阅读过程中如果发现有错误的地方或是有更好的实现方式,请与本人联系(qq:1805608587),或是在评论区留言,谢谢!
文章说明:本文是作者原创,请尊重个人劳动成果,转载需注明出处
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,登录查看:
由此可见,任何一台机器宕机都不会影响生产,两台SQL节点可以同时对外服务。
集群至此搭建完成
转载需注明出处