MySQL Cluster集群

一、概述

​ MySQL Cluster是MySQL适用于分布式计算环境的高实用、高冗余版本。他采用了NDB Cluster存储引擎,允许在一个Cluster中运行多个MySQL服务器。

​ MySQL Cluster是一种在无共享系统中启用内存数据库集群的技术。无共享架构使系统能够使用非常便宜的硬件,并且对硬件或软件的特定要求最低。MySQL Cluster旨在没有任何单点故障。在无共享系统中,每个组件都应该有自己的内存和磁盘,不推荐也不支持使用网络共享、网络文件系统和 SAN 等共享存储机制。MySQL Cluster由一组称为主机的计算机组成,每台计算机运行一个或多个进程。 这些称为节点的进程可能包括 MySQL 服务器(用于访问 NDB 数据)、数据节点(用于存储数据)、一个或多个管理服务器,以及可能的其他专用数据访问程序。NDB Cluster 中这些组件的关系如下所示:

​ MySQL NDB Cluster由三种节点构成,SQL节点、数据节点及管理节点。

​ 管理节点:管理整个集群。启动、关闭集群。通过ndn_mgmd命令启动集群,通过ndn_mgm查看集群状态。

​ 数据节点:存储cluster中的数据。通过多个数据节点的方式,提供数据冗余。

​ SQL节点:给上层应用提供数据访问。

​ NDN引擎:是一种基于内存的数据存储引擎,他具有可用性高和数据一致性好的特点。

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

二、优缺点对比

2.1 缺点

​ 基于内存,数据库的规模受集群总内存的大小限制;

​ 基于内存,断电后数据可能会有数据丢失,这点还需要通过测试验证;

​ 多个节点通过网络实现通讯和数据同步、查询等操作,因此整体性受网络速度影响,因此速度也比较慢。

2.2 优点

​ 多个节点之间可以分布在不同的地理位置,因此也是一个实现分布式数据库的方案;

​ 扩展性很好,增加节点即可实现数据库集群的扩展;

​ 冗余性很好,多个节点上都有完整的数据库数据,因此任何一个节点宕机都不会造成服务中断。

三、搭建 MySQL-Cluster 集群

3.1 集群规划

角色 主机名 IP地址 系统 版本
管理节点 mysql-cluster-mgm 192.168.10.11 Centos 7.9 8.0.31
数据节点1 mysql-cluster-data1 192.168.10.12 Centos 7.9 8.0.31
数据节点2 mysql-cluster-data2 192.168.10.13 Centos 7.9 8.0.31
SQL节点1 mysql-cluster-sql1 192.168.10.14 Centos 7.9 8.0.31
SQL节点2 mysql-cluster-sql2 192.168.10.15 Centos 7.9 8.0.31

​ Mysql cluster 的下载地址: https://dev.mysql.com/downloads/cluster/。以8.0.31为例,将下载的安装包上传至服务器/software目录,并解压备用。

3.2 安全问题

​ 关闭防火墙,关闭selinux,完成后尽量重启服务器。

systemctl stop firewalld
systemctl disable firewalld
sed -i 's/*SELINUX*=enforcing/SELINUX=disabled/g' /etc/selinux/config

3.3 解决先决条件

​ 清理操作系统自带的 MySQL或者 Mariadb

rpm -qa l grep mariadb | xargs -irpm -e--nodeps f
rpm -qa l grep mysql l xargs -irpm -e--nodeps f

3.4 配置hostname

​ 为每个节点设置主机名:

#管理节点:
hostnamectl set-hostname mysql-cluster-mgm
#数据节点1:
hostnamectl set-hostname mysql-cluster-data1
#数据节点2:
hostnamectl set-hostname mysql-cluster-data2
#SQL节点1:
hostnamectl set-hostname mysql-cluster-sql1
#SQL节点2:
hostnamectl set-hostname mysql-cluster-sql2

​ 在每个节点的/etc/hosts中,添加主机名信息:

192.168.10.11 mysql-cluster-mgm
192.168.10.12 mysql-cluster-data1
192.168.10.13 mysql-cluster-data2
192.168.10.14 mysql-cluster-sql1
192.168.10.15 mysql-cluster-sql2

3.5 配置yum

​ 如果有互联网权限,可以使用自带的yum。如果不能访问互联网,则利用iso文件配置本地yum。

cat /etc/yum.repos.d/local.repo
#配置以下信息
[local]
name=local
baseurl=file:///media
gpgcheck=0
enabled=1
gpgkey=file:///media/RPM-GPG-KEY-CentOS-7

​ 注意:centos当中不包含一个重要的依赖包。需要手动下载和安装。wget https://mirrors.aliyun.com/epel/7/x86_64/Packages/p/perl-Class-MethodMaker-2.20-1.el7.x86_64.rpm

3.6 所有节点安装mysql-cluster-server

yum localinstall -y mysql-cluster-community-server-8.0.31-1.el7.x86_64.rpm

3.7 数据节点安装数据包

yum localinstall -y mysql-cluster-community-data-node-8.0.31-1.el7.x86_64.rpm

3.8 管理节点安装管理包

yum localinstall -y mysql-cluster-community-management-server-8.0.31-1.el7.x86_64.rpm

四、配置集群

4.1 管理节点

​ 创建管理节点配置文件存放目录

mkdir -p /data/mysql-cluster
cd /data/mysql-cluster

​ 创建配置文件:

vim config.ini

​ 写入以下配置信息:

[ndbd default]
#数据写入量。2表示两份(有几个数据节点就是几份)
NoOfReplicas=2
#配置数据存储可以使用的内存
DataMemory=500M
#配置索引可以使用的内存
IndexMemory=100M
[ndb_mgmd]
NodeId=1
#管理节点的日志文件路径
DataDir=/var/lib/mysql
#管理节点IP地址
HostName=192.168.10.11#存储节点
#data node options
[ndbd]
#数据节点IP地址
HostName=192.168.10.12
#数据节点数据目录
DataDir=/var/lib/mysql
#数据节点ID
NodeId=2[ndbd]
#数据节点IP地址
HostName=192.168.10.13
#数据节点数据目录
DataDir=/var/lib/mysql
#数据节点ID
NodeId=3#SQL节点
[mysqld]
#SQL节点IP地址
HostName=192.168.10.14
#SQL节点ID
NodeId=4[mysqld]
#SQL节点IP地址
HostName=192.168.10.15
#SQL节点ID
NodeId=5

4.2 数据节点

​ 在每个数据节点的my.cnf进行配置,注意数据节点的datadir要和管理节点的datadir配置保持一致,默认DataDir=/var/lib/mysql。

vim /etc/my.cnf

​ 末尾增加以下配置:

#启动ndb引擎
ndbcluster
#管理节点IP地址
ndb-connectstring=192.168.10.11
[mysql_cluster]
ndb-connectstring=192.168.10.11

4.3 SQL节点

​ 在每个SQL节点的my.cnf进行配置,SQL节点建议添加default_storage_engine=ndbcluster。因为只有ndbcluster数据引擎的表才能使用mysql cluster进行同步,如果创建的对象不是此数据引擎,会导致对象保存在sql节点本地,而无法进行同步。

vim /etc/my.cnf

​ 末尾增加以下配置:

#启动ndb引擎
ndbcluster
#指定默认引擎为ndbcluster
default_storage_engine=ndbcluster
#管理节点IP地址
ndb-connectstring=192.168.10.11
[mysql_cluster]
ndb-connectstring=192.168.10.11

五、MySQL Cluster启动

​ 初次启动命令以及用户密码更改调整:(请严格按照次序启动)
​ 依次先后启动:管理节点服务 —> 数据节点服务 —> sql 节点
​ 服务关闭:关闭管理节点服务,关闭管理节点服务后,nbdb数据节点服务会自动关闭 —> 手动关闭SQL节点。
​ 执行初次启动前请先确认将所有服务器的防火墙关闭 (service iptables stop 或者设定防火墙端口可通,两个端口即通讯端口1186、数据端口3306)。

5.1 启动管理节点

​ 在管理节点启动管理节点:

ndb_mgmd -f /data/mysql-cluster/config.ini


管理节点登录查看集群状态:

5.2 启动数据节点

数据节点1:

[root@mysql-cluster-data1 ~]# ndbd


数据节点2:

[root@mysql-cluster-data2 ~]# ndbd


管理节点查看数据节点启动情况:

5.3 启动SQL节点

SQL节点1:

[root@mysql-cluster-sql1 ~]# systemctl start mysqld

SQL节点2:

[root@mysql-cluster-sql2 ~]# systemctl start mysqld

管理节点查看数据节点启动情况:

六、数据同步验证

6.1 修改初始密码

只需要修改SQL节点的初始密码。在第一次启动的/var/log/mysqld.log中找到初始密码,并使用该密码进行登录。

SQL节点1:

[root@mysql-cluster-sql1 ~]# mysql -u root -p
mysql>alter user ‘root’@’localhost’ identified by ‘Password’;
mysql> update user set host='%' where user='root';

SQL节点2:

[root@mysql-cluster-sql2 ~]# mysql -u root -p
mysql>alter user ‘root’@’localhost’ identified by ‘Password’;
mysql> update user set host='%' where user='root';

6.2 数据验证

创建一个数据库验证是否同步

mysql -u root -p
mysql> create database test ;
mysql> use test ;
mysql> create table abc ( id int) engine=ndbcluster;
mysql> Insert into abc () values (1);
#分别登录两个sql节点,执行查询,发现数据一致,数据数据同步成功
mysql> select * from abc;

七、管理和维护命令

关闭mysql集群:ndb_mgm -e shutdown

重启mysql集群:ndb_mgmd -f /data/mysql-cluster/config.ini

重启数据节点:ndbd

启动SQL节点:systemctl restart mysqld

查看mysql状态:ndb_mgm -e show

启动顺序:

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

关闭顺序:

SQL节点 --> 管理节点(数据节点会自行关闭)

八、注意事项

1.在建表的时候一定要用ENGINE=NDBCLUSTER指定使用NDBCLUSTER存储引擎,或用ALTER TABLE选项更改表的存储引擎。

2.NDB表必须有一个主键,因此创建表的时候必须定义主键,否则NDB存储引擎将自动生成隐含的主键。

MySQL NDB Cluster部署方案与实践相关推荐

  1. MySQL NDB Cluster使用docker compose一键部署

    本文主要用来学习MySQL NDB Cluster 解决学习过程中的痛点:需要开启N台VMware虚拟机,电脑不堪重负 使用docker部署,完美解决 本文使用的docker image: mysql ...

  2. MySQL NDB Cluster

    1. MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署"内存中"数据库的 Cluster .通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求 ...

  3. 【MySQL】MySQL NDB Cluster安装

    MySQL集群是一个无共享的(share-nothing).分布式节点架构的存储方案,目的是提供容错性和高性能. MySQL NDB Cluster架构如图: MySQL NDB Cluster架构按 ...

  4. MySQL NDB Cluster 搭建

    格拉德韦尔在<异数>:成功之人并非天资超人一等,而是付出了持续不断的努力.只要经过1万小时的锤炼,任何人都能从平凡变成超凡.要成为某个领域的专家,需要10000小时:如果每天工作八个小时, ...

  5. APT安装MySQL NDB Cluster

    提醒 MySQL APT库支持在Debian和Ubuntu系统上安装MySQL NDB Cluster.因为Ubuntu 20.04或更高版本不支持mysql-cluster-community-au ...

  6. MySQL NDB Cluster 集群简介

    简介 MySQL Cluster 是一个实时.高度可扩展且符合 ACID 要求的事务型数据库,既可以实现 99.999% 的可用性,又具备开源产品低 TCO 的优势.MySQL Cluster 采用一 ...

  7. JavaWeb+MySql+Tomcat一键部署方案

    前言 前段时间,公司接单子做一套JavaWeb系统.作为主要负责人,我们小组的工作一切顺利.但在交付前,客户要求该Web系统做到一键安装部署.这是因为该系统使用环境为机房局域网,每个机房需要部署一套, ...

  8. MySQL InnoDB Cluster部署

    文章目录 安装 下载Yum存储库 安装发布包 导入密钥 安装MySQL 启动MySQL 查看临时口令 登录并修改口令 安装MySQL Shell InnoDB Cluster 账户配置 服务器配置账户 ...

  9. MySQL NDB Cluster 8.0.X 错误集锦(持续更新)

    文章目录 0x01.基本操作 ndb_mgm ndb_mgm工具 0x02.常见问题 Code:1296 Error 904 Error 851 Error 851 Error 707 Code:12 ...

最新文章

  1. view(*args)改变张量的大小和形状_pytorch reshape numpy
  2. AI从业者需要应用的10种深度学习方法
  3. arm linux 64位,微软准备让Linux作为64位ARM Hyper-V客户机运行
  4. 无线安全入门、芯片选型、扫描器使用
  5. 上传附件删除、session清空问题
  6. P1481 魔族密码 (LIS)
  7. 容器编排技术 -- 创建Kubernetes集群
  8. MVC与三层架构讲解
  9. 计算机网络实验传输文件,湖大计算机网络实验-tcp文件传输实验
  10. iphone分辨率_QHD 分辨率有必要吗?三个理由告诉你:手机屏幕 FHD 就很好
  11. opencv 修改 读取路径_opencv中读取图像的绝对路径问题
  12. VBB Arduino仿真软件的使用
  13. Nexus下载失败解决方案
  14. Google登陆集成笔记-含坑
  15. SBC芯片35584数据手册预调节器翻译
  16. 数据库系统的主要组成部分
  17. redis数据类型及常用数据操作
  18. 2021高考综合单科成绩查询,2021高考各科分数满分多少
  19. HTTP协议与FTP协议的区别
  20. ai2023 mac版 ai2023中文版(支持m1)全新功能

热门文章

  1. iframe标签控制视频大小及自动播放
  2. 如何用计算机设计班牌,班牌设计
  3. 数据仓库之数据质量监控
  4. git第一次提交不能使用git commit -a -m
  5. MATLAB系列笔记:三维绘图(一)
  6. 为什么角膜塑形镜的价格比隐形眼镜贵这么多?
  7. FPGA学习笔记2.1——用Verilog实现74LS148的功能定义并测试
  8. AI 图像识别的测试
  9. L0 Norm 、L1 Norm 和 L2 Norm 的简单理解
  10. linux运行blast,linux blast