文章目录
MySQL NDB Cluster 是一个分布式数据库解决方案,提供高可用性、数据分片和自动故障恢复能力
(官方直译)
- 自动化管理
MySQL NDB Cluster Manager 能够将整个集群作为一个实体进行控制,同时还支持对集群内部各个进程进行非常精细的控制。管理员能够创建和删除整个集群;备份和恢复所有数据;升级 MySQL NDB Cluster 软件;推出配置更改;自动调整集群以适应硬件、写入模式和使用类型;以及使用单个命令启动、停止和重新启动集群。
- 自动监控
MySQL NDB 集群管理器 (MCM) 能够通过自动轮询集群中的每个节点,在操作系统和每个进程级别监控集群的运行状况。它可以检测进程或服务器主机是否处于活动状态、停止状态或挂起状态,从而实现即时和自动的问题检测、解决和恢复。
- 自我修复
为了实现 99.999% 的可用性,MySQL NDB Cluster 能够通过自动重启故障数据节点实现故障自愈,无需人工干预。MySQL NDB Cluster Manager 还通过监控和自动恢复 SQL 和管理节点来扩展此功能。这支持更无缝、更完整的集群自愈,自动恢复应用程序的冗余和全部容量
- 高可用性
MySQL NDB Cluster 的设计目标是提供 99.999% 的可用性。因此,MySQL NDB Cluster Manager 绝不会影响底层集群的可用性,这一点至关重要。为了确保高可用性操作,MySQL NDB Cluster Manager 与实际数据库进程分离,因此如果管理代理停止或升级,它不会以任何方式影响正在运行的数据库。
前置条件
集群环境:
主机名 | IP 地址 | 角色 |
---|---|---|
fishpie-node1 | 192.168.159.129 | 管理节点(ndb_mgmd)+ SQL 节点(mysqld) |
fishpie-node2 | 192.168.159.130 | 数据节点(ndbd)+ SQL 节点(mysqld) |
fishpie-node3 | 192.168.159.131 | 数据节点(ndbd) + SQL 节点(mysqld) |
MySQL版本:MySQL8.4-lts-community
推荐文章:
MySQL8.4 安装配置与卸载_mysql8.4安装-CSDN博客
推荐最好是三台未安装 mysql 服务的节点
安装步骤
首先,确保需要需要 MySQL NDB Cluster 部署的节点全部安装 MySQL 服务
环境准备
- (所有节点)关闭防火墙与 SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- (所有节点)同步时间
yum install -y ntp
systemctl start ntpd
systemctl enable ntpd
ntpdate pool.ntp.org
- (所有节点)停止MySQL服务
systemctl stop mysql
- (所有节点)系统依赖
yum install -y perl-Data-Dumper libaio ncurses-compat-libs
下载 安装 RPM 包
下载地址:https://dev.mysql.com/get/Downloads/MySQL-Cluster-8.4/mysql-cluster-community-nodejs-8.4.4-1.el9.x86_64.rpm
注意 MySQL 版本
yum install -y mysql-cluster-community-nodejs-8.4.4-1.el9.x86_64.rpm
安装 NDB 组件与常见错误
- (所有节点)安装 NDB 组件
yum install -y mysql-cluster-community-server mysql-cluster-community-data-node mysql-cluster-community-management-server
如果出现问题
是因为
mysql-cluster-community-client-plugins
和mysql-community-client-plugins
两个包的文件冲突,因为它们包含了相同路径的插件文件解决方案:
# 移除原有的 mysql-community-client-plugins,替换为 NDB 集群版本 yum remove -y mysql-community-client-plugins # 重新安装 NDB 集群组件 yum install -y mysql-cluster-community-server mysql-cluster-community-data-node mysql-cluster-community-management-server
- 验证安装结果
rpm -qa | grep mysql-cluster-community
配置节点
- (fishpie-node1节点)创建配置文件
/etc/mysql-cluster-management/config.ini
# 管理节点配置
[ndb_mgmd]
hostname=192.168.159.129
NodeId=1
datadir=/var/lib/mysql-cluster
# 数据节点全局默认配置
[ndbd default]
NoOfReplicas=2
DataMemory=500M
IndexMemory=300M
datadir=/var/lib/mysql-cluster # 数据节点数据目录(确保所有数据节点目录已创建)
# 数据节点1
[ndbd]
hostname=192.168.159.130
NodeId=2
# 数据节点2
[ndbd]
hostname=192.168.159.131
NodeId=3
# SQL节点(MySQL服务器)
[mysqld]
hostname=192.168.159.129
NodeId=4
[mysqld]
hostname=192.168.159.130
NodeId=5
[mysqld]
hostname=192.168.159.131
NodeId=6
- (所有节点)创建数据目录
mkdir -p /var/lib/mysql-cluster
- (fishpie-node2 和 fishpie-node3 节点)数据节点创建配置文件
/etc/my.cnf
[mysql_cluster]
ndb-connectstring=192.168.159.129 # 管理节点 IP
- (所有节点)SQL节点配置文件信息
编辑 /etc/my.cnf
,在 [mysqld]
部分添加:
# [mysqld]
ndbcluster
ndb-connectstring=192.168.159.129 # 管理节点 IP
启用节点配置
启动管理节点 -> 启动数据节点 -> 启动SQL节点
- (fishpie-node1节点)启动管理节点
ndb_mgmd -f /etc/mysql-cluster-management/config.ini --initial
1186 端口工作就说明 管理节点启动成功
- (fishpie-node2 与 fishpie-node3 节点)启动数据节点
ndbd
启动 MySQL 集群
- (所有 SQL 节点)启动 MySQL 服务
systemctl start mysqld
systemctl enable mysqld
如果MySQL启动不成功,可以尝试:
# 清理可能残留的临时文件 rm -f /var/lib/mysql/mysql.sock rm -f /var/lib/mysql/ib_logfile* rm -rf /var/lib/mysql-cluster/* # 看MySQL启动日志 tail -n 50 /var/log/mysqld.log | grep ERROR # 备份旧数据(谨慎操作!) mv /var/lib/mysql /var/lib/mysql.bak # 重新初始化并生成临时密码 mysqld --initialize --user=mysql --console chown -R mysql:mysql /var/lib/mysql # 查看临时密码 grep 'temporary password' /var/log/mysqld.log # 登录 mysql mysql -uroot -p # 检查引擎是否加载 SHOW ENGINES; # 手动加载 NDB 插件(如果未自动加载) INSTALL PLUGIN ndbcluster SONAME 'ndbcluster.so';
如果还是无法启动 mysql 服务,可以在备份好数据表的情况下重装
# 卸载 MySQL 包 sudo yum remove mysql mysql-server # 删除 MySQL 的数据目录 sudo rm -rf /var/lib/mysql sudo rm -rf /etc/my.cnf sudo rm -rf /etc/my.cnf.d sudo rm -rf /var/log/mysql sudo rm -rf /var/log/mysqld.log # 更新 Yum 包缓存 sudo yum clean all
验证集群状态
所有节点的 MySQL 和 NDB 版本必须一致
节点间通信依赖网络,确保防火墙开放
1186
(管理端口)和2202
(数据端口)
- (fishpie-node1节点)查看管理节点状态
ndb_mgm
> SHOW
- (fishpie-node1节点)验证 SQL 节点
SHOW ENGINE NDB STATUS;
CREATE DATABASE ndb_test;
USE ndb_test;
CREATE TABLE test (id INT) ENGINE=NDBCLUSTER;
INSERT INTO test VALUES (1);
-- 在其他节点查询数据是否同步
可以看到三个节点均存在 数据库 ndb_test
与 表test
关于 ndb_mgm
集群管理
# 查看集群状态
ndb_mgm> SHOW
# 启动指定节点
ndb_mgm> <node_id> START
# 停止指定节点(软停止,允许事务完成)
ndb_mgm> <node_id> STOP
# 强制停止节点(立即终止)
ndb_mgm> <node_id> STOP FORCE
# 重启数据节点(保留数据)
ndb_mgm> <node_id> RESTART
# 重启数据节点并清空数据(危险操作)
ndb_mgm> <node_id> RESTART --initial
# 强制集群全重启
ndb_mgm> ALL RESTART
# 清除事务检查点
ndb_mgm> PURGE STALE SESSIONS
# 查看节点组状态
ndb_mgm> ALL STATUS
# 动态加载 config.ini 新配置
ndb_mgm> RELOAD CONFIG
备份与恢复
# 在线备份集群
ndb_mgm> START BACKUP
- 备份完成后会生成备份 ID(如
Backup 3 started
)。- 备份文件默认保存在数据节点的
/var/lib/mysql-cluster/BACKUP/BACKUP-<ID>
。
# 中断备份
ndb_mgm> ABORT BACKUP <backup_id>
# 恢复备份
ndb_restore -c <管理节点IP> -n <节点ID> -b <备份ID> -m --backup_path=/path/to/backup
ndb_restore -c 192.168.159.129 -n 2 -b 1 -m --backup_path=/var/lib/mysql-cluster/BACKUP/BACKUP-1
集群配置管理
# 动态调整配置参数
ndb_mgm> <node_id> SET <parameter>=<value>
ndb_mgm> 2 SET DataMemory=600M
# 查看当前配置
ndb_mgm> <node_id> REPORT <config_variable>
ndb_mgm> 2 REPORT DataMemory
日志相关
# 调整日志级别
ndb_mgm> <node_id> LOGLEVEL <category>=<level>
ndb_mgm> 1 LOGLEVEL debug=15
# 查看事件日志
ndb_mgm> CLUSTERLOG INFO
ndb_mgm> CLUSTERLOG WARNING
ndb_mgm> CLUSTERLOG ERROR
官方文档:https://www.mysql.com/products/cluster/mcm/