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

MySQL NDB Cluster 兩節點高可用部署實戰:含管理節點、數據節點與 SQL 節點完整配置

     編輯:MySQL 資料庫相關知識

架構概覽

MySQL Cluster (NDB) 採用 **Shared-Nothing** 架構,最小高可用拓撲為:

  • 2 個數據節點 (ndbd/ndbmtd) — 存儲分片數據,同步雙副本。
  • 1 個管理節點 (ndb_mgmd) — 仲裁、配置分發、啟動協調。**集群啟動後理論可關閉,但生產強烈建議常駐**。
  • ≥1 個 SQL 節點 (mysqld) — 對外提供 MySQL 協議接入,本文雙數據節點各掛一個 SQL 節點。

本文環境:


Server1 (Data+SQL): 192.168.0.1  mysql1.vmtest.net
Server2 (Data+SQL): 192.168.0.2  mysql2.vmtest.net
Server3 (Mgmt)    : 192.168.0.3  mysql3.vmtest.net

軟體包選擇

必須使用 mysql-max 或 cluster 版本 (含 NDB 存儲引擎),Standard 版不支援。下載 mysql-cluster-gpl-7.x.x-linux-glibc2.12-x86_64.tar.gz (現代版本建議 7.6/8.0)。

步驟 1:管理節點部署 (Server3)


mkdir -p /opt/mysql-cluster /var/lib/mysql-cluster
cd /opt/mysql-cluster
tar xzf mysql-cluster-*.tar.gz
ln -s mysql-cluster-* mysqlc

# 僅提取管理工具
cp mysqlc/bin/ndb_mgm* /usr/local/bin/
chmod +x /usr/local/bin/ndb_mgm*

# 配置文件 /var/lib/mysql-cluster/config.ini
cat > /var/lib/mysql-cluster/config.ini <<'EOF'
[ndbd default]
NoOfReplicas=2
DataMemory=256M
IndexMemory=32M

[mysqld default]
[ndb_mgmd default]

[tcp default]

[ndb_mgmd]
HostName=192.168.0.3
NodeId=1

[ndbd]
HostName=192.168.0.1
NodeId=2
DataDir=/var/lib/mysql-cluster

[ndbd]
HostName=192.168.0.2
NodeId=3
DataDir=/var/lib/mysql-cluster

[mysqld]
NodeId=4
HostName=192.168.0.1

[mysqld]
NodeId=5
HostName=192.168.0.2
EOF

# 啟動管理節點
ndb_mgmd --config-file=/var/lib/mysql-cluster/config.ini --initial

步驟 2:數據節點 + SQL 節點部署 (Server1/Server2 同步執行)


# 安裝 MySQL Cluster 二進制 (同管理節點解壓路徑)
# 建立 mysql 用戶、目錄權限...
# 配置 /etc/my.cnf
cat > /etc/my.cnf <<'EOF'
[mysqld]
ndbcluster
ndb-connectstring=192.168.0.3
datadir=/var/lib/mysql
basedir=/opt/mysql-cluster/mysqlc
port=3306

[mysql_cluster]
ndb-connectstring=192.168.0.3
EOF

# 初始化數據節點 (僅首次或 config.ini 變更後)
mkdir -p /var/lib/mysql-cluster
/opt/mysql-cluster/mysqlc/bin/ndbd --initial

# 啟動 SQL 節點
/opt/mysql-cluster/mysqlc/bin/mysqld_safe --defaults-file=/etc/my.cnf &

步驟 3:驗證集群狀態


# Server3 執行
ndb_mgm -e show

預期輸出:


Connected to Management Server at: 192.168.0.3:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.1 (Version: 8.0.x, Nodegroup: 0, Master)
id=3 @192.168.0.2 (Version: 8.0.x, Nodegroup: 0)

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

[mysqld(API)] 2 node(s)
id=4 @192.168.0.1 (Version: 8.0.x)
id=5 @192.168.0.2 (Version: 8.0.x)

步驟 4:功能測試 (NDBCLUSTER 表引擎)


# Server1
mysql -u root -h 127.0.0.1 -e "CREATE DATABASE test; USE test; CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER; INSERT INTO ctest VALUES (1); SELECT * FROM ctest;"

# Server2 驗證同步
mysql -u root -h 127.0.0.1 -e "USE test; INSERT INTO ctest VALUES (2); SELECT * FROM ctest;"
# 應看到 1,2 兩行

步驟 5:破壞性測試 (驗證 HA)


# Server1 拔網線或 kill -9 ndbd 進程
# Server2 查詢仍正常
# Server3 ndb_mgm -e show 觀察 Node 2 狀態變為 "not started"

# 故障恢復
# Server1 重啟 ndbd (無需 --initial)
ndbd
# 集群自動同步增量數據,幾秒內恢復同步

生產級優化清單

項目建議
DataMemory/IndexMemory按數據量規劃,預留 30% 緩衝,避免 OOM
NoOfReplicas生產建議 2,極高可用可 3 (需 3 數據節點)
網絡專用 VLAN/交換機跑 Cluster 通訊,MTU 9000 Jumbo Frame
磁碟NDB 數據目錄掛載 NVMe/SSD,Redo/Undo 日誌分盤
監控Prometheus mysqld_exporter + ndb_mgm -e "ALL REPORT MEMORYUSAGE" 定時抓取
備份ndb_mgm -e "START BACKUP" 線上熱備,配合 ndb_restore 恢復

總結

MySQL NDB Cluster 提供真正的 **同步多主高可用**,但運維複雜度遠超主從/半同步複制。兩數據節點 + 一管理節點是最小 HA 閉環,**管理節點請保持常駐** 以應對網絡分區仲裁。若業務能接受最終一致性,Galera Cluster (PXC) 或 MGR 往往是更輕量的選擇。

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