首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL NDB Cluster 搭建實戰:管理節點、數據節點與 SQL 節點三層架構部署

     編輯:MySQL 資料庫相關知識

架構總覽

NDB Cluster 三角色分離:

  • ndb_mgmd (管理節點):集群配置、啟動協調、狀態監控
  • ndbd/ndbmtd (數據節點):存儲分片數據、執行事務、冗余副本
  • mysqld (SQL 節點):接收客戶端 SQL、解析優化、路由至數據節點

環境準備

  • 兩台 Ubuntu 9.04:
    — Node1 (管理+數據+SQL):192.168.1.110
    — Node2 (數據+SQL):192.168.1.101
  • 同版本 MySQL Cluster 5.0.x(GP 版不支持 NDB)
  • 關閉 AppArmor/SELinux,同步時間 ntpdate

配置文件

/etc/mysql/my.cnf (兩節點同樣)

[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

/var/lib/mysql-cluster/config.ini (僅管理節點)

[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 預分配,不可動態擴容。

啟動順序(嚴格)

  1. 管理節點:ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
  2. 數據節點:ndbd --initial (首次) / ndbd (後續)
  3. SQL 節點:systemctl start mysql

驗證集群狀態

ndb_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)
  • 在線加節點:修改 config.ini、ndb_mgmd --reload、新節點 ndbd --initial
  • 監控:ndb_mgm -e "ALL REPORT MEMORYUSAGE"

版本演進提示

  • MySQL 5.1/5.5/5.6/5.7:NDB 7.x 系列
  • MySQL 8.0:NDB 8.0 系列,支援更大內存、更多節點、JSON、GIS
  • 生產建議:最少 3 台物理機 (1 管理 + 2 數據 + 2 SQL 可共置),生產環境推薦 4+ 數據節點
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved