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

Windows 下 MySQL Cluster 部署全流程:從節點規劃、配置檔編寫到驗證與關機操作規範

     編輯:MySQL 資料庫相關知識

架構規劃:最小高可用拓撲 (5 節點邏輯,可合併部署)

邏輯角色主機名IP說明
管理節點 (MGM)db1192.168.0.10仲裁、配置分發、狀態監控,輕量
SQL 節點 1 (API)db2192.168.0.20接收客戶端連線、解析 SQL、路由到資料節點
SQL 節點 2 (API)db3192.168.0.30高可用備援、讀寫分離入口
資料節點 1 (NDBD)db4192.168.0.40儲存實際資料、索引、處理事務
資料節點 2 (NDBD)db5192.168.0.50雙副本 (NoOfReplicas=2),自動分片

資源受限時:可將 MGM+SQL1+NDBD1 合併部署在 db1,SQL2+NDBD2 合併在 db3,但生產環境強烈建議物理隔離。

軟體獲取與安裝

  1. 下載:mysql-cluster-gpl-7.x.x-win32.msi (官網 MySQL Cluster 專用版,非 Community Server)
  2. 五台主機分別執行安裝,預設路徑 D:\Program Files\MySQL\MySQL Server 7.x\
  3. 安裝完成不要啟動服務,先配置

管理節點配置 (db1: 192.168.0.10)

# 建立目錄與配置檔
mkdir C:\mysql\mysql-cluster
notepad C:\mysql\mysql-cluster\config.ini

config.ini 完整內容:

[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=512M
IndexMemory=128M

[MYSQLD DEFAULT]

[NDB_MGMD DEFAULT]

[TCP DEFAULT]

# 管理節點
[NDB_MGMD]
HostName=192.168.0.10
NodeId=1

# 資料節點 1
[NDBD]
HostName=192.168.0.40
NodeId=2
DataDir=E:\mysql-cluster\data

# 資料節點 2
[NDBD]
HostName=192.168.0.50
NodeId=3
DataDir=E:\mysql-cluster\data

# SQL 節點
[MYSQLD]
HostName=192.168.0.20
NodeId=4

[MYSQLD]
HostName=192.168.0.30
NodeId=5

關鍵點:NodeId 顯式指定避免衝突;DataDir 須預先建立;DataMemory/IndexMemory 依實際記憶體規劃 (留 20% 給 OS)。

SQL/資料節點共通配置 (my.ini)

在各節點 MySQL 安裝目錄下的 my.ini 末尾追加:

ndbcluster
ndb-connectstring=192.168.0.10

[mysql_cluster]
ndb-connectstring=192.168.0.10

確保 my.ini 中 basedir/datadir 指向正確路徑。

啟動序列 (順序嚴格不可亂)

  1. 管理節點 (db1):
    cd "D:\Program Files\MySQL\MySQL Server 7.x\bin"
    ndb_mgmd.exe -f "C:\mysql\mysql-cluster\config.ini" --initial
  2. 資料節點 (db4, db5):
    ndbd.exe --initial

    --initial 僅首次啟動或結構變更使用,後續重啟移除 此參數。

  3. SQL 節點 (db2, db3):
    net start mysql

驗證叢集狀態

# 進入管理客戶端
ndb_mgm.exe

# 顯示拓撲
ndb_mgm> SHOW
Connected to Management Server at: 192.168.0.10:1186
Cluster Configuration
[ndbd(NDB)]     2 node(s)
id=2    @192.168.0.40  (Version: 7.x.x, Nodegroup: 0, Master)
id=3    @192.168.0.50  (Version: 7.x.x, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.10  (Version: 7.x.x)

[mysqld(API)]   2 node(s)
id=4    @192.168.0.20  (Version: 7.x.x)
id=5    @192.168.0.30  (Version: 7.x.x)

關鍵檢查:兩個 NDBD 同屬 Nodegroup 0、狀態正常、SQL 節點已連線。

建立 NDB 表與測試資料同步

在任一 SQL 節點 (如 db2) 執行:

CREATE DATABASE test;
USE test;
CREATE TABLE city (
    id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL DEFAULT ''
) ENGINE=ndbcluster DEFAULT CHARSET=utf8mb4;

INSERT INTO city VALUES (1, 'city1'), (2, 'city2');

在另一 SQL 節點 (db3) 驗證:

USE test;
SELECT * FROM city;
-- 應返回 city1, city2,證明跨節點同步正常

核心鐵律:ENGINE=ndbcluster,否則為本地表不參與叢集。

關機與維護規範

# 正常關機 (確保資料落盤)
ndb_mgm.exe -e "SHUTDOWN"

# 強制關機 (僅緊急)
# 1. 關閉 SQL 節點: net stop mysql
# 2. 關閉資料節點: ndb_mgm> 2 STOP / 3 STOP
# 3. 關閉管理節點: ndb_mgm> 1 STOP

⚠️ 切勿直接關機或殺進程,NDB 需正常關機完成 Checkpoint、Redo Log 落盤,否則重啟需漫長恢復甚至資料不一致。

常見問題速查

現象原因解決
資料節點卡在 Starting無法連線管理節點、NodeId 衝突、防火牆攔截 1186/2202 埠檢查 config.ini HostName、防火牆、telnet 1186
SQL 節點不顯示在 SHOWmy.ini 缺 ndbcluster/ndb-connectstring、版本不匹配補全配置、重啟 SQL 服務、確認版本一致
建表報錯 Unknown storage engine未載入 ndbcluster 插件my.ini 加 ndbcluster、重啟驗證 SHOW ENGINES
資料不同步表非 ndbcluster、網路分區、資料節點故障檢查引擎、ndb_mgm> ALL REPORT MEMORY、網路連通性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved