NDB 儲存引擎特性
- In-Memory:資料主要駐留記憶體,高吞吐、低延遲。
- 高可用:同步多副本、自動故障轉移、無單點故障。
- 強一致:兩階段提交保證跨節點 ACID。
三大核心節點類型
| 節點 | 角色 | 啟動命令 | 關鍵參數 |
| 管理節點 (MGM) | 叢集配置分發、節點啟停、備份協調、日誌收集 | ndb_mgmd -f config.ini | 必須最先啟動 |
| 資料節點 (Data Node) | 儲存實際資料、執行查詢片段、同步複寫 | ndbd 或 ndbmtd (多執行緒) | 數量 = 片段數 × 副本數 |
| SQL 節點 (API Node) | 對外提供 MySQL 介面、解析 SQL、分發查詢計畫到資料節點 | mysqld --ndbcluster | 可任意擴展,無狀態 |
最小部署拓撲
┌─────────────┐
│ MGM Node │ (1個,建議奇數用於仲裁)
└──────┬──────┘
│ 管理通道
┌──────┴──────┐
│ Data Node 1 │──┐
└─────────────┘ │ 同步複寫 (2副本)
┌─────────────┐ │
│ Data Node 2 │──┘
└─────────────┘
│
▼
┌─────────────┐
│ SQL Node │ (應用連接入口,可多個負載均衡)
└─────────────┘
配置管理:單一配置檔
- 所有節點配置集中在
config.ini (由 MGM 管理)。
- 節點啟動時從 MGM 拉取配置,動態變更需 Rolling Restart。
- 關鍵區段:
[ndbd default]、[ndb_mgmd]、[ndbd]、[mysqld]、[tcp default]。
客戶端類型
- 標準 MySQL 客戶端:PHP/JAVA/Python 等現有應用無感接入,透過 SQL 節點存取。
- 管理客戶端:
ndb_mgm 連接 MGM,執行 SHOW、START/BACKUP、DUMP 等運維指令。
常見誤區與避坑
⚠️ 節點 ≠ 機器:單機可運行多節點進程;生產建議跨機房部署資料節點,MGM 部署獨立機器。
- 大表需合理分片 (
PARTITION BY KEY),避免單分片過大導致重平衡緩慢。
DiskData 表可將非索引欄位存磁碟,節省記憶體,但查詢需命中索引。
- 備份使用
ndb_mgm -e "START BACKUP",線上熱備、不鎖表。