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

MySQL Cluster (NDB) 雙節點高可用叢集部署全紀錄(含管理節點)

     編輯:MySQL 資料庫相關知識

架構概覽

本文記錄基於 3 台伺服器(2 資料節點 + 1 管理節點)部署 MySQL Cluster 7.x/8.x 的完整流程。雖然資料節點僅 2 台,但管理節點必須獨立,否則任一資料節點故障會導致整個叢集不可用(Split-brain)。

角色主機名IP備註
Data Node 1mysql1.vmtest.net192.168.0.1執行 ndbd
Data Node 2mysql2.vmtest.net192.168.0.2執行 ndbd
Management Nodemysql3.vmtest.net192.168.0.3僅需 ndb_mgmd/ndb_mgm,可關機但不建議

前置準備(所有節點)

  • 作業系統:Linux(建議同版本),關閉 SELinux、iptables/firewalld 或開放 1186、2202、3306 埠。
  • 建立 mysql 使用者/群組:groupadd mysql && useradd -g mysql mysql
  • 下載 MySQL Cluster 套件(含 ndb* 二進制),非 Community Server 標準版。

1. 資料節點安裝 MySQL Cluster(Server1、Server2 同步執行)

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

2. 管理節點部署(Server3)

僅需提取管理工具:

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

3. 資料節點配置並啟動(Server1、Server2)

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

4. 驗證叢集狀態(Server3)

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)

5. 常見運維指令

操作指令
查看節點狀態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"

關鍵避坑指南

  1. NoOfReplicas=2 固定,代表每個資料分片有 2 份副本,對應 2 個資料節點。
  2. 管理節點不可與資料節點同機,否則單點故障導致仲裁失效。
  3. 首次啟動或 config.ini 變更 必須加 --initial,否則舊資料檔干擾啟動。
  4. 防火牆:資料節點間需通 TCP 1186、2202、3306;管理節點需 1186。
  5. 時鐘同步:三節點必須 NTP 同步,時間偏差 > 2 秒會導致心跳失效。
  6. MySQL 8.0+ 預設使用 caching_sha2_password,應用端驅動需支援或改用 mysql_native_password。

總結

MySQL Cluster (NDB) 提供真正的「共享無架構」高可用,寫入自動雙副本、單節點故障秒級切換、線上擴容無停機。部署關鍵在於:獨立管理節點、正確 config.ini、首次 --initial、防火牆與時鐘同步。掌握上述流程,即可在生產環境建立可靠的 MySQL 高可用叢集。

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