MySQL8.4 NDB Cluster 集群配置安装

发布于:2025-04-03 ⋅ 阅读:(68) ⋅ 点赞:(0)


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

推荐文章:

Linux CentOS9安装配置-CSDN博客

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-pluginsmysql-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/


网站公告

今日签到

点亮在社区的每一天
去签到