MySQL Cluster(NDB)不是“装个MySQL再配集群”就能跑起来的,它由ndb_mgmd、ndbd和mysqld--ndbcluster三类进程组成,必须分角色部署、按顺序启动,且共用同一份config.ini;Ubuntu/Debian官方源包缺失关键组件或版本滞后,不可靠,应手动解压官方mysql-cluster-gpl-*.tar.gz部署。

直接说结论:MySQL Cluster(NDB)不是“装个 MySQL 再配个集群”就能跑起来的,它由 ndb_mgmd(管理节点)、ndbd 或 mysqld --ndbcluster(数据节点 + SQL 节点)三类进程组成,必须分角色部署、按顺序启动,且所有节点需共用同一份 config.ini。Ubuntu/Debian 上用 apt install mysql-cluster-community-server 安装的是旧版或阉割包,不可靠;建议手动解压官方 mysql-cluster-gpl-*.tar.gz 部署。
为什么不能直接 apt/yum 装 MySQL Cluster?
Ubuntu 官方源里的 mysql-cluster-community-server 包通常缺失 ndb_mgmd 和 ndbd 二进制文件,或者版本严重滞后(如停留在 7.6.x),无法与新版配置兼容。CentOS 的 EPEL 源也类似——它默认只提供标准 mysqld,不带 NDB 存储引擎支持。你执行 mysqld --help --verbose | grep ndb,如果没输出 ndbcluster,说明这个 mysqld 根本不支持 Cluster。
常见错误现象:
- 启动
ndb_mgmd报错:command not found - SQL 节点连不上管理节点,日志里反复出现
Unable to connect to management server -
SHOW ENGINES;查不到NDBCLUSTER引擎
管理节点必须最先启动,且 config.ini 路径不能错
管理节点不存数据,只管调度和配置分发,但它一旦挂掉,整个 Cluster 就无法新增/重启数据节点。它的配置文件 config.ini 必须放在 ndb_mgmd 启动时指定的路径下(通常是 /var/lib/mysql-cluster/config.ini),且权限要对(属主为运行用户,不能是 root 启动但配置归普通用户)。
关键点:
-
ndb_mgmd -f /var/lib/mysql-cluster/config.ini中的-f参数不能省,否则它会去找默认路径(往往不存在) -
[ndbd default]段里的DataMemory和IndexMemory必须足够大,否则数据节点启动后立刻退出,日志里只有Out of memory提示 - 所有节点 IP(包括本机)必须在
config.ini中明确定义,且虚拟机网络要能互通(推荐 Host-Only 或 Internal Network,避免 NAT 下端口映射干扰)
数据节点启动失败的三个高频原因
数据节点(ndbd)依赖管理节点存活、本地磁盘空间、以及内存分配策略。它不像 mysqld 那样有日志自动轮转,出问题基本靠 ndb_mgm 连上去查状态。
典型表现和对策:
-
ndbd启动后立即退出,ndb_mgm -e "show"显示该节点为Not connected:检查config.ini中对应[ndbd]的NodeId是否重复,或hostname是否写错(必须和hostname -i输出一致) - 日志里出现
Failed to allocate memory for DataMemory:调小DataMemory=80M到32M,或给虚拟机加内存(NDB 默认把全部数据放内存,不支持纯磁盘模式) -
ndbd卡在Starting状态不动:确认防火墙已关(ufw disable或systemctl stop ufw),且管理节点监听的 1186 端口可被该 IP 访问(telnet 192.168.x.x 1186测试)
SQL 节点连上后,NDB 引擎仍不可用?
即使 mysqld 成功启动、也能连上,CREATE TABLE t1 (...) ENGINE=NDBCLUSTER; 仍报错 Unknown storage engine 'NDBCLUSTER',说明 mysqld 编译时没启用 NDB 支持。
验证和修复方式:
- 确认你用的是官方 Cluster 包里的
mysqld,而不是系统自带的:运行which mysqld,应返回/usr/local/mysql/bin/mysqld类似路径,而非/usr/bin/mysqld - 启动时必须加
--ndbcluster参数(或在my.cnf的[mysqld]段写ndbcluster),否则它当普通 MySQL 用,完全忽略 NDB -
my.cnf中必须配置ndb-connectstring=192.168.x.x:1186(指向管理节点 IP+端口),缺一不可
最易被忽略的一点:NDB Cluster 对时间同步极其敏感。所有虚拟机节点必须运行 chrony 或 ntpd 并校准到同一时间源,哪怕差 2 秒,都可能导致数据节点拒绝加入集群,且错误日志里不提示时间问题,只显示连接超时。


















