MySQL Cluster 基於 NDB 存儲引擎,提供高可用、高冗餘、內存計算的分布式數據庫方案。本文記錄在 Windows Server 2003 環境下部署 MySQL Cluster 7.1.3(基於 MySQL 5.1)的完整流程,含節點規劃、配置文件、服務安裝、啟動順序與測試驗證。
| 節點類型 | 角色 | 進程 |
|---|---|---|
| 管理節點 (MGM) | 集群配置、日誌、仲裁 | ndb_mgmd.exe |
| 數據節點 (NDBD) | 數據存儲、同步、備份 | ndbd.exe |
| SQL 節點 (API) | 處理 SQL 請求、客戶端接入 | mysqld.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(免安裝二進制包)# 建立目錄
mkdir D:\mysql-cluster
mkdir D:\data
# 建立 config.ini
# 路徑:D:\mysql-cluster\config.ini
[NDBD DEFAULT]
NoOfReplicas=1
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Management Server
[NDB_MGMD]
hostname=10.0.0.201
# Storage Engines (Data Nodes)
[NDBD]
hostname=10.0.0.201
datadir=D:\data
[NDBD]
hostname=10.0.0.202
datadir=D:\data
# SQL Engines
[MYSQLD]
hostname=10.0.0.201
[MYSQLD]
hostname=10.0.0.202
# 1. 解壓至 D:\mysql-cluster-gpl-noinstall-7.1.3-win32
# 2. 將 bin 目錄加入系統 PATH
# 3. 安裝為 Windows 服務
mysqld.exe -install mysql
# 4. 服務管理器中設為「手動啟動」(避免依賴順序問題)
# 5. 複製配置模板
copy my-small.ini my.ini
# 6. 建立臨時目錄
mkdir D:\tmp
[mysqld]
# 啟用 NDB Cluster 引擎
ndbcluster
# 連接管理節點
ndb-connectstring=10.0.0.201
[mysql_cluster]
ndb-connectstring=10.0.0.201
ndb_mgmd.exe -f D:\mysql-cluster\config.ini --configdir=D:\mysql-cluster
輸出關鍵標記:==INITIAL== → ==CONFIRMED== 表示配置生效。
# 首次啟動必須加 --initial(初始化數據目錄)
ndbd.exe --initial
# 後續重啟僅需
ndbd.exe
警告:正常運行集群中執行 --initial 會**清空所有數據**!
net start mysql
# 或
service mysqld start
# 進入管理客戶端
ndb_mgm.exe
# 查看狀態
ndb_mgm> SHOW
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.0.0.201 (mysql-5.1.44 ndb-7.1.3, Nodegroup: 0, Master)
id=3 @10.0.0.202 (mysql-5.1.44 ndb-7.1.3, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.0.0.201 (mysql-5.1.44 ndb-7.1.3)
[mysqld(API)] 2 node(s)
id=4 @10.0.0.201 (mysql-5.1.44 ndb-7.1.3)
id=5 @10.0.0.202 (mysql-5.1.44 ndb-7.1.3)
# 關閉數據節點與管理節點
ndb_mgm -e shutdown
# 關閉 SQL 節點
net stop mysql
# 或
mysqladmin -u root shutdown
嚴禁:直接殺進程或關機,會導致內存數據未刷盤丟失。
-- Node1 創建 NDB 表並插入
CREATE TABLE city (
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=utf8;
INSERT INTO city VALUES (1, 'city-1'), (2, 'city-2');
-- Node2 查詢驗證同步
SELECT * FROM city;
-- 應返回 2 行數據
| 現象 | 原因 | 對策 |
|---|---|---|
| 數據節點無法連接 MGM | 防火牆 1186/2202 埠、config.ini IP 錯誤 | 開放埠、核對 hostname |
| 仲裁失敗節點被踢 | 網絡抖動、磁碟 IO 過高、內存不足 | 調整 HeartbeatInterval、增加內存 |
| SQL 節點報錯 Table doesn't exist | 建表未指定 ENGINE=ndbcluster | 補充引擎聲明 |
| 原有 MySQL Server 衝突 | 端口、服務名、數據目錄衝突 | 徹底卸載舊版 |