MySQL Cluster(NDB Cluster)是 MySQL 官方提供的分散式、高可用、記憶體內運算的叢集解決方案。本文以雙伺服器(SerA: 192.168.1.50、SerB: 192.168.1.8)為例,詳細記錄從原始碼編譯安裝、管理節點與資料節點配置、叢集啟動驗證的完整流程,實現任意單節點故障時服務不中斷的高可用目標。
# 1. 建立使用者與群組
groupadd mysql
useradd -g mysql mysql
# 2. 解壓與目錄整理
cd /tmp/package
tar -zxvf MySQL-6.0.0-alpha.tar.gz
mv mysql-6.0.0-alpha mysql
cd mysql
# 3. 編譯安裝(關鍵參數:啟用 NDB Cluster、分區、InnoDB)
./configure \
--prefix=/usr/local \
--with-extra-charsets=complex \
--with-plugin-ndbcluster \
--with-plugin-partition \
--with-plugin-innobase \
--with-unix-socket-path=/usr/local/var/mysql.sock
make && make install
# 4. 建立關鍵執行檔軟連結
ln -s /usr/local/libexec/ndbd /usr/bin
ln -s /usr/local/libexec/ndb_mgmd /usr/bin
ln -s /usr/local/libexec/ndb_cpcd /usr/bin
ln -s /usr/local/libexec/mysqld /usr/bin
ln -s /usr/local/libexec/mysqlmanager /usr/bin
# 5. 初始化系統資料庫
mysql_install_db --user=mysql
config.ini 關鍵解析配置檔位於 /var/lib/mysql-cluster/config.ini,核心區段說明:
NoOfReplicas=2:雙副本,確保單節點掛掉不丟資料DataMemory=128M、IndexMemory=24M:根據資料量調整,生產環境需依實際容量規劃StopOnError=0:節點錯誤不自動停止,提升可用性ArbitrationRank=2:關鍵參數,啟用仲裁機制,確保單節點故障時叢集仍能判斷分區完整性PortNumber=63132 指定叢集通訊埠my.cnf 重點[mysqld]
datadir=/usr/local/var
socket=/usr/local/var/mysql.sock
old_passwords=1
default-storage-engine=ndbcluster
ndbcluster
ndb-connectstring=192.168.1.50,192.168.1.8
[ndbd]
connect-string=192.168.1.50,192.168.1.8
[ndb_mgm]
connect-string=192.168.1.50,192.168.1.8
[ndb_mgmd]
config-file=/var/lib/mysql-cluster/config.ini
[mysql.server]
user=mysql
basedir=/usr/local/
[mysqld_safe]
log-error=/var/log/mysqld.log
ndb_mgmd --ndb_nodeid=1,SerB 執行 ndb_mgmd --ndb_nodeid=2)ndbd)mysqld_safe &)ndb_mgm -e "SHOW" 確認所有節點狀態為 STARTED注意:啟動管理節點時會出現「arbitrator 與 db node 同主機」警告,生產環境建議將管理節點與資料節點分離部署以消除單點風險。
MySQL Cluster 現已發展至 8.0 系列,支援更多功能(如線上 schema 變更、更佳效能)。新專案建議直接採用 MySQL 8.0+ 的 NDB Cluster,並參考官方文件調整配置參數(如 DataMemory 支援動態調整、新增 ndb_dist_privileges 等)。