MySQL Cluster(NDB Cluster)以「無共享架構」提供 99.999% 高可用、亞秒級故障轉移、線性擴展能力。本文記錄雙機雙節點生產級部署全流程:架構解析、配置文件詳解、啟動驗證、測試用例、關閉流程,適合評估或落地 MySQL Cluster 的架構師與 DBA。
| 節點類型 | 進程 | 職責 | 啟動命令 |
|---|---|---|---|
| 管理節點 (MGM) | ndb_mgmd | 集群配置、日誌、啟停節點、備份協調 | ndb_mgmd -f config.ini |
| 數據節點 (NDB) | ndbd / ndbmtd | 存儲分片數據、複製、恢復、事務協調 | ndbd --initial |
| SQL 節點 (API) | mysqld | 接收客戶端請求、解析 SQL、路由至數據節點 | mysqld --ndbcluster |

| 角色 | IP | 部署節點 |
|---|---|---|
| 管理節點 1 | 10.1.6.205 | MGM |
| 數據節點 1 | 10.1.6.203 | NDB (NodeId=2) |
| 數據節點 2 | 10.1.6.205 | NDB (NodeId=3) |
| SQL 節點 1 | 10.1.6.203 | mysqld (NodeId=4) |
| SQL 節點 2 | 10.1.6.205 | mysqld (NodeId=5) |
網絡要求:專用子網、節點間免密 SSH、關閉防火牆/SELinux、時間同步 (NTP)
# 解壓 tar -C /usr/local -xzvf mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz ln -s /usr/local/mysql-cluster-gpl-7.2.6-linux2.6-x86_64 /usr/local/mysql # 建立用戶目錄 groupadd mysql && useradd -g mysql -r -s /sbin/nologin mysql mkdir -p /data/mysql/data /data/mysql/log chown -R mysql:mysql /data/mysql # 初始化(僅 SQL 節點需執行) /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/data
/etc/my.cnf[mysqld] basedir=/usr/local/mysql datadir=/data/mysql/data user=mysql port=3306 socket=/tmp/mysql.sock ndbcluster # 啟用 NDB 引擎 ndb-connectstring=10.1.6.205 # 管理節點 IP connect_timeout=300 [mysql_cluster] ndb-connectstring=10.1.6.205
/opt/cluster/config.ini[ndbd default] NoOfReplicas=2 # 副本數 = 數據節點數 / 片段數 DataMemory=80M # 數據內存 (按實際調整) IndexMemory=18M # 索引內存 [tcp default] portnumber=2202 # NDB 通訊端口 [ndb_mgmd] NodeId=1 hostname=10.1.6.205 datadir=/opt/cluster [ndbd] NodeId=2 hostname=10.1.6.203 datadir=/usr/local/mysql/data [ndbd] NodeId=3 hostname=10.1.6.205 datadir=/usr/local/mysql/data [mysqld] NodeId=4 hostname=10.1.6.203 [mysqld] NodeId=5 hostname=10.1.6.205 [mysqld] # 允許任意 API 節點接入 hostname=%
ndb_mgmd -f /opt/cluster/config.ini--initial):ndbd --initial(兩台並行啟動)mysqld_safe --defaults-file=/etc/my.cnf &ndb_mgm -e show # 輸出示例 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @10.1.6.203 (Nodegroup: 0, Master) id=3 @10.1.6.205 (Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @10.1.6.205 [mysqld(API)] 4 node(s) id=4 @10.1.6.203 id=5 @10.1.6.205 id=6,7 (not connected, accepting any host)
-- SQL 節點 1 建表(必須指定 ENGINE=NDB) CREATE TABLE dave (num INT) ENGINE=NDB; INSERT INTO dave VALUES (100); -- SQL 節點 2 查詢 SELECT * FROM dave; -- 返回 100 ✅
SELECT * FROM ndbinfo.memoryusage; -- 關注 used / total 比例,超 80% 需擴容 DataMemory/IndexMemory 並滾動重啟
# 1. 關閉集群(自動協調數據節點檢查點) ndb_mgm -e shutdown # 2. 關閉 SQL 節點 mysqladmin -uroot -p shutdown
Redo Log、Checkpoint、Backup 策略ndbinfo 表 + Prometheus Exporter + Grafana 儀表板ndb_mgm -e "START BACKUP" + 異地恢復驗證