NDB Cluster 三角色分離:
ntpdate[mysqld]
ndbcluster
ndb-connectstring=192.168.1.110
bind-address=0.0.0.0
default-storage-engine=ndbcluster
[mysql_cluster]
ndb-connectstring=192.168.1.110
[ndbd default]
NoOfReplicas=2
DataMemory=100M
IndexMemory=50M
MaxNoOfTables=256
[ndb_mgmd]
NodeId=1
HostName=192.168.1.110
DataDir=/var/lib/mysql-cluster
[ndbd]
NodeId=2
HostName=192.168.1.110
DataDir=/var/lib/mysql-cluster
[ndbd]
NodeId=3
HostName=192.168.1.101
DataDir=/var/lib/mysql-cluster
[mysqld]
NodeId=4
HostName=192.168.1.110
[mysqld]
NodeId=5
HostName=192.168.1.101
關鍵參數:NoOfReplicas=2 兩副本,節點數必須是副本數倍數;DataMemory/IndexMemory 預分配,不可動態擴容。
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initialndbd --initial (首次) / ndbd (後續)systemctl start mysqlndb_mgm
ndb_mgm> SHOW
Connected to Management Server at: 192.168.1.110:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.1.110 (Version: 5.0.75, Nodegroup: 0, Master)
id=3 @192.168.1.101 (Version: 5.0.51, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.110 (Version: 5.0.75)
[mysqld(API)] 2 node(s)
id=4 @192.168.1.110 (Version: 5.0.75)
id=5 @192.168.1.101 (Version: 5.0.51)
成功標誌:所有節點 STARTED,Nodegroup 一致,版本兼容。
-- 任一 SQL 節點
CREATE DATABASE test_cluster;
USE test_cluster;
CREATE TABLE t1 (id INT PRIMARY KEY, val VARCHAR(20)) ENGINE=NDBCLUSTER;
INSERT INTO t1 VALUES (1,'a'),(2,'b');
SELECT * FROM t1;
-- 另一 SQL 節點自動可見
SELECT * FROM t1; -- 返回相同結果
注意:表必須指定 ENGINE=NDBCLUSTER,否則為本地 InnoDB 表不參與複製。
| 現象 | 原因 | 解決 |
|---|---|---|
| 數據節點啟動卡在 "Starting" | 無法連接管理節點 | 檢查 config.ini HostName、防火牆 1186/2202 端口 |
| SQL 節點報 "Unknown storage engine 'ndbcluster'" | 未編譯 NDB 支持 | 安裝 mysql-cluster-gpl 包,非社區版 |
| 版本不一致警告 | 節點間版本差異 | 統一版本,滾動升級 |
| 內存不足報錯 | DataMemory/IndexMemory 耗盡 | 擴容內存、調大參數、刪除數據 |
ndb_mgm -e "START BACKUP" (線上熱備)ndb_mgm -e "2 RESTART" (NodeId 2)ndb_mgmd --reload、新節點 ndbd --initialndb_mgm -e "ALL REPORT MEMORYUSAGE"