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

MySQL Cluster (NDB) 部署實戰:管理節點、數據節點與 SQL 節點配置全記錄

     編輯:MySQL 資料庫相關知識

MySQL Cluster (NDB) 部署實戰

MySQL Cluster 基於 NDB 存儲引擎,提供共享無架構、自動分片、高可用 (99.999%)、單點故障秒級故障轉移。本文記錄單機多端口模擬三節點 (管理、數據×2、SQL) 部署全流程,供學習與測試參考。生產環境必須跨物理機部署。

架構角色

節點類型進程職責
管理節點 (MGM)ndb_mgmd集群配置、啟動協調、狀態監控、仲裁
數據節點 (NDB)ndbd / ndbmtd存儲數據/索引、同步複寫、事務協調、檢查點
SQL 節點 (API)mysqld接收客戶端 SQL、解析優化、轉發 NDB API 請求

啟動順序:ndb_mgmd → ndbd → mysqld

一、軟體準備

# 下載 MySQL Cluster 通用二進制包 (含 ndb_mgmd, ndbd, mysqld)
wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.6/mysql-cluster-gpl-7.6.10-linux-glibc2.12-x86_64.tar.gz
tar -zxvf mysql-cluster-gpl-*.tar.gz
cd mysql-cluster-gpl-*

# 建立工作目錄
mkdir -p /opt/mysql-cluster/{mgmd,ndbd1,ndbd2,mysqld}/{data,logs,conf}

二、管理節點配置 /opt/mysql-cluster/mgmd/conf/config.ini

[NDBD DEFAULT]
NoOfReplicas=2                  # 兩副本,需至少 2 數據節點
DataMemory=512M                 # 數據內存 (含索引)
IndexMemory=128M                # 索引內存 (舊版參數,新版合併)
MaxNoOfTables=2048
MaxNoOfOrderedIndexes=512

[TCP DEFAULT]
# PortNumber=2202               # 建議使用默認 1186,免配置

[NDB_MGMD]
HostName=192.168.0.10           # 管理節點 IP
NodeId=1
DataDir=/opt/mysql-cluster/mgmd/data
LogDestination=FILE:filename=/opt/mysql-cluster/mgmd/logs/mgmd.log

[NDBD]
HostName=192.168.0.11           # 數據節點 1 IP
NodeId=2
DataDir=/opt/mysql-cluster/ndbd1/data

[NDBD]
HostName=192.168.0.12           # 數據節點 2 IP
NodeId=3
DataDir=/opt/mysql-cluster/ndbd2/data

[MYSQLD]
HostName=192.168.0.13           # SQL 節點 IP
NodeId=4
# 可配置多個 [MYSQLD] 區段對應多個 SQL 節點

三、數據節點配置 /opt/mysql-cluster/ndbd1/conf/my.cnf (ndbd2 同理修改路徑/NodeId)

[mysqld]
ndbcluster                      # 啟用 NDB 存儲引擎
ndb-connectstring=192.168.0.10:1186  # 管理節點 IP:Port

[mysql_cluster]
ndb-connectstring=192.168.0.10:1186

# 可選:MySQL 服務參數
datadir=/opt/mysql-cluster/ndbd1/data
port=3306
socket=/tmp/mysql_ndbd1.sock

四、SQL 節點配置 /opt/mysql-cluster/mysqld/conf/my.cnf

[mysqld]
ndbcluster
ndb-connectstring=192.168.0.10:1186
datadir=/opt/mysql-cluster/mysqld/data
port=3306
socket=/tmp/mysql_cluster.sock
# 一般 MySQL 參數...
key_buffer_size=32M
innodb_buffer_pool_size=64M    # InnoDB 仍可用於非 NDB 表

五、啟動流程

# 1. 啟動管理節點 (首次加 --initial 初始化元數據)
cd /opt/mysql-cluster
bin/ndb_mgmd -f mgmd/conf/config.ini --initial --configdir=mgmd/conf

# 2. 驗證管理節點
bin/ndb_mgm -e "SHOW"
# 應顯示 2 個 NDB 節點 "not connected, accepting connect",1 個 MGM 節點 connected

# 3. 啟動數據節點 (首次加 --initial 格式化本地數據目錄)
bin/ndbd --defaults-file=ndbd1/conf/my.cnf --initial
bin/ndbd --defaults-file=ndbd2/conf/my.cnf --initial

# 4. 驗證數據節點就緒
bin/ndb_mgm -e "SHOW"
# 兩個 NDB 節點應變為 "connected",顯示 Nodegroup、Master 角色

# 5. 初始化 SQL 節點系統表
bin/mysqld --defaults-file=mysqld/conf/my.cnf --initialize-insecure --user=mysql
# 或已有數據目錄直接啟動
bin/mysqld --defaults-file=mysqld/conf/my.cnf &

# 6. 驗證 SQL 節點接入
bin/ndb_mgm -e "SHOW"
# 應顯示 [MYSQLD(API)] 1 node(s) connected

六、建表與驗證

# 連接 SQL 節點
mysql -h 192.168.0.13 -P 3306 -u root

# 必須指定 ENGINE=NDB
CREATE DATABASE test_cluster;
USE test_cluster;
CREATE TABLE t1 (
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR(50)
) ENGINE=NDB;

INSERT INTO t1 VALUES (1, 'node1'), (2, 'node2');
SELECT * FROM t1;

# 觀察數據分片分佈
ndb_mgm -e "ALL REPORT MEMORYUSAGE"
ndb_mgm -e "ALL DUMP 1000"  # 打印分片映射

七、關鍵運維命令

# 管理客戶端
ndb_mgm -h 192.168.0.10 -p 1186

# 狀態總覽
ndb_mgm -e "SHOW"

# 節點重啟 (滾動重啟不停服)
ndb_mgm -e "2 RESTART"   # 重啟 NodeId=2 數據節點

# 內存使用報告
ndb_mgm -e "ALL REPORT MEMORYUSAGE"

# 備份 (線上熱備,不加鎖)
ndb_mgm -e "START BACKUP 1"  # 備份 ID=1
# 備份文件生成在各數據節點 DataDir/BACKUP/BACKUP-/

# 恢復
ndb_restore -b 1 -n 2 -m -r /opt/mysql-cluster/ndbd1/data/BACKUP/BACKUP-1/

# 關閉集群
ndb_mgm -e "SHUTDOWN"

八、生產環境關鍵注意事項

  1. 硬體隔離:管理節點極輕量可共用;數據節點獨享 CPU/內存/磁碟 (SSD/NVMe);SQL 節點無狀態可水平擴展。
  2. 內存規劃:DataMemory + IndexMemory ≤ 物理內存 80%,預留 OS、NDB 進程、檢查點緩衝。
  3. 網絡專用:集群內部通訊走專用 VLAN/交換機,MTU 9000 (Jumbo Frame) 減少封包分片。
  4. 仲裁機制:ArbitrationRank、ArbitrationTimeout 防腦裂,奇數節點或仲裁器 (mgmd) 決定存活分區。
  5. 版本選擇:MySQL Cluster 7.6/8.0 LTS,避開開發版。NDB 表不支援外鍵、全文、GIS、觸發器 (8.0 部分支援)。
  6. 監控指標:DataMemoryUsage、IndexMemoryUsage、RedoLogSpace、TransactionLatency、NodeState。

MySQL Cluster 以共享無架構實現真正的線性擴展與極致高可用,但運維複雜度遠超主從/InnoDB Cluster。適用於電信級計費、遊戲狀態、會話存儲等強一致、高併發、容錯要求極高的核心業務。學習階段單機多端口驗證流程,生產務必跨機房多可用區部署。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved