MySQL Cluster (NDB Cluster) 是 MySQL 針對分散式高可用、高擴展場景推出的儲存引擎架構。本文以 Windows Server 2003 SP2 為實驗環境,基於 MySQL Cluster 7.1.3 (對應 MySQL 5.1 系列) 詳細記錄叢集部署全流程,包含架構原理、節點規劃、配置檔編寫、服務啟動順序與管理測試。
MySQL Cluster 採用 Shared-Nothing (無共享) 架構,各節點擁有獨立記憶體與磁碟,無單點故障。叢集由三類邏輯節點組成:
ndb_mgmd.exe。ndbd.exe。通訊要求:節點間通訊未加密,需高速低延遲區域網路 (建議千兆以上),嚴禁跨公網或跨網段部署。

| 機器 | IP | 角色 |
|---|---|---|
| Node1 | 10.0.0.201 | MGM + SQL1 + NDBD1 |
| Node2 | 10.0.0.202 | SQL2 + NDBD2 |
最佳實踐提示:生產環境中 MGM 節點應獨立部署,避免與資料節點共機導致單點故障引發全叢集癱瘓。本實驗為演示簡化合併部署。
mysql-cluster-gpl-noinstall-7.1.3-win32.zip (官網 下載頁)。D:\mysql-cluster-gpl-noinstall-7.1.3-win32。D:\mysql-cluster-gpl-noinstall-7.1.3-win32\bin 加入系統環境變數 PATH (需重開 CMD 生效)。在 Node1 建立目錄 D:\mysql-cluster 及配置檔 config.ini:
[NDBD DEFAULT]
NoOfReplicas=1 # 單副本 (測試用,生產建議 2)
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Management Server
[NDB_MGMD]
hostname=10.0.0.201 # MGM IP
# Storage Engines (Data Nodes)
[NDBD]
hostname=10.0.0.201
datadir=D:\data
[NDBD]
hostname=10.0.0.202
datadir=D:\data
# SQL Engines (API Nodes)
[MYSQLD]
hostname=10.0.0.201
[MYSQLD]
hostname=10.0.0.202
關鍵參數說明:NoOfReplicas=1 表示資料不做同步複寫 (測試用);datadir 指定資料檔存放路徑,需提前建立 D:\data 目錄。
mysqld.exe -install mysql
在「服務」中將 mysql 設為「手動」。
my-small.ini 複製為 my.ini。D:\tmp。my.ini,在 [mysqld] 區段末尾添加:
# SQL Cluster Node
ndbcluster
ndb-connectstring=10.0.0.201 # 指向 MGM IP
my.ini 末尾新增 [mysql_cluster] 區段供資料節點使用:
[mysql_cluster]
ndb-connectstring=10.0.0.201
(亦可用 [ndbd] 區段,效果相同)。順序:MGM → NDBD → SQL (mysqld)
在 Node1 CMD 執行:
ndb_mgmd.exe -f D:\mysql-cluster\config.ini --configdir=D:\mysql-cluster
出現 ==CONFIRMED== 及 Id: 1, Command port: *:1186 表示成功。
兩台機器分別執行:
ndbd.exe --initial (會清空資料目錄重建)ndbd.exe (切勿加 --initial,否則資料全失)資料節點會自動連接 MGM 進行同步。
在兩台機器「服務」中啟動 mysql 服務,或執行 net start mysql。
使用 ndb_mgm.exe 客戶端連接 MGM:
ndb_mgm.exe
ndb_mgm> SHOW
啟動前:資料節點與 SQL 節點顯示 (not connected, accepting connect from ...)。
啟動後:所有節點顯示 @IP (mysql-5.1.44 ndb-7.1.3),資料節點標示 Nodegroup 與 Master。
ndb_mgm -e shutdown
或在 ndb_mgm 中輸入 SHUTDOWN。警告:此命令關閉 MGM 及所有 NDBD,SQL 節點需單獨關閉 (net stop mysql 或 mysqladmin -u root shutdown)。強制斷電會導致資料遺失。
ENGINE=NDBCLUSTER 資料表並插入資料,另一 SQL 節點即可查詢。Ctrl+C),驗證 SQL 節點仍可正常讀寫。注意:NDB 表必須有主鍵,否則引擎自動生成隱含主鍵佔用記憶體,易導致 OOM。
MySQL Cluster 部署複雜度高,但提供了真正的分散式高可用寫入能力。Windows 平台部署適合開發測試與小規模業務,生產核心業務強烈建議遷移至 Linux 平台 (更穩定、效能更優、工具鏈更豐富)。