本文記錄基於 3 台伺服器(2 資料節點 + 1 管理節點)部署 MySQL Cluster 7.x/8.x 的完整流程。雖然資料節點僅 2 台,但管理節點必須獨立,否則任一資料節點故障會導致整個叢集不可用(Split-brain)。
| 角色 | 主機名 | IP | 備註 |
|---|---|---|---|
| Data Node 1 | mysql1.vmtest.net | 192.168.0.1 | 執行 ndbd |
| Data Node 2 | mysql2.vmtest.net | 192.168.0.2 | 執行 ndbd |
| Management Node | mysql3.vmtest.net | 192.168.0.3 | 僅需 ndb_mgmd/ndb_mgm,可關機但不建議 |
mysql 使用者/群組:groupadd mysql && useradd -g mysql mysqlndb* 二進制),非 Community Server 標準版。tar -zxvf mysql-cluster-gpl-8.0.xx-linux-glibc2.12-x86_64.tar.gz -C /usr/local
cd /usr/local
ln -s mysql-cluster-gpl-8.0.xx mysql
cd mysql
scripts/mysql_install_db --user=mysql
chown -R root .
chown -R mysql data
chgrp -R mysql .
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
# 此時「不要」啟動 mysqld
僅需提取管理工具:
mkdir /usr/src/mysql-mgm && cd /usr/src/mysql-mgm
tar -zxvf mysql-cluster-gpl-8.0.xx-linux-glibc2.12-x86_64.tar.gz
cd mysql-cluster-gpl-8.0.xx
mv bin/ndb_mgm bin/ndb_mgmd /usr/bin/
chmod +x /usr/bin/ndb_mg*
rm -rf /usr/src/mysql-mgm
mkdir -p /var/lib/mysql-cluster
cat > /var/lib/mysql-cluster/config.ini <<'EOF'
[NDBD DEFAULT]
NoOfReplicas=2
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Management Server
[NDB_MGMD]
HostName=192.168.0.3
# Data Nodes
[NDBD]
HostName=192.168.0.1
DataDir=/var/lib/mysql-cluster
[NDBD]
HostName=192.168.0.2
DataDir=/var/lib/mysql-cluster
# SQL Nodes (留空可動態加入)
[MYSQLD]
[MYSQLD]
EOF
啟動管理服務:
ndb_mgmd --config-file=/var/lib/mysql-cluster/config.ini
cat > /etc/my.cnf <<'EOF'
[mysqld]
ndbcluster
ndb-connectstring=192.168.0.3
[mysql_cluster]
ndb-connectstring=192.168.0.3
EOF
mkdir -p /var/lib/mysql-cluster
# 首次啟動或 config.ini 變更需加 --initial
/usr/local/mysql/bin/ndbd --initial
/etc/init.d/mysqld start
# 加入開機自啟
echo "/usr/local/mysql/bin/ndbd" >> /etc/rc.local
echo "/etc/init.d/mysqld start" >> /etc/rc.local
ndb_mgm
ndb_mgm> SHOW
預期輸出:
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.1 (Version: 8.0.xx, Nodegroup: 0, Master)
id=3 @192.168.0.2 (Version: 8.0.xx, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.3 (Version: 8.0.xx)
[mysqld(API)] 2 node(s)
id=4 (Version: 8.0.xx)
id=5 (Version: 8.0.xx)
| 操作 | 指令 |
|---|---|
| 查看節點狀態 | ndb_mgm -e SHOW |
| 單節點重啟 | ndb_mgm -e "2 RESTART" (id=2) |
| 全叢集關機 | ndb_mgm -e SHUTDOWN |
| 備份 | ndb_mgm -e "START BACKUP" (輸出至 DataDir/BACKUP/) |
| 查看事件日誌 | ndb_mgm -e "CLUSTERLOG STATISTICS=15" |
--initial,否則舊資料檔干擾啟動。caching_sha2_password,應用端驅動需支援或改用 mysql_native_password。MySQL Cluster (NDB) 提供真正的「共享無架構」高可用,寫入自動雙副本、單節點故障秒級切換、線上擴容無停機。部署關鍵在於:獨立管理節點、正確 config.ini、首次 --initial、防火牆與時鐘同步。掌握上述流程,即可在生產環境建立可靠的 MySQL 高可用叢集。