MySQL Cluster(NDB Cluster)以「高可用、高即時、高冗餘、強擴展」著稱,採用無共享架構,無單點故障。本文記錄基於 MySQL Cluster 7.2.6 的最小化部署流程,涵蓋三大節點角色規劃、配置細節、啟動順序與驗證測試。
| 節點類型 | 角色 | 啟動命令 | 說明 |
|---|---|---|---|
| 管理節點 (MGM) | 叢集配置、日誌、啟停節點、備份管理 | ndb_mgmd | 必須最先啟動,其他節點從此獲取配置 |
| 數據節點 (NDB) | 儲存實際資料,支援分片與副本 | ndbd / ndbmtd | 數量 = 副本數 × 片段數,首次啟動需 --initial |
| SQL 節點 | 對外提供 MySQL 服務,接收應用請求 | mysqld | 需在 my.cnf 啟用 ndbcluster 引擎 |
tar -C /usr/local -xzvf mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz ln -s /usr/local/mysql-cluster-gpl-7.2.6 /usr/local/mysql cd /usr/local/mysql scripts/mysql_install_db --user=mysql chown -R mysql:mysql /usr/local/mysql
[mysqld] basedir=/usr/local/mysql/ datadir=/usr/local/mysql/data/ user=mysql port=3306 socket=/tmp/mysql.sock ndbcluster max_connect_errors=10000 ndb-connectstring=10.1.6.205 connect_timeout=300 [mysql_cluster] ndb-connectstring=10.1.6.205
[ndbd default] NoOfReplicas=2 DataMemory=80M IndexMemory=18M [tcp default] portnumber=2205 [ndb_mgmd] NodeId=1 hostname=10.1.6.205 datadir=/opt/cluster [ndbd] NodeId=2 hostname=10.1.6.203 datadir=/usr/local/mysql/data [ndbd] NodeId=3 hostname=10.1.6.205 datadir=/usr/local/mysql/data [mysqld] NodeId=4 hostname=10.1.6.203 [mysqld] NodeId=5 hostname=10.1.6.205 [mysqld] # 允許任意 IP 連接
/usr/local/mysql/bin/ndb_mgmd -f /opt/cluster/config.ini
# 兩台機器分別執行 /usr/local/mysql/bin/ndbd --initial
後續重啟直接用 ndbd。
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
/usr/local/mysql/bin/ndb_mgm -- NDB Cluster -- Management Client -- ndb_mgm> SHOW Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @10.1.6.203 (Nodegroup: 0, Master) id=3 @10.1.6.205 (Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @10.1.6.205 [mysqld(API)] 4 node(s) id=4 @10.1.6.203 id=5 @10.1.6.205 id=6,7 (not connected, accepting any host)
mysql> USE test; mysql> CREATE TABLE dave (num INT(10)) ENGINE=NDB; mysql> INSERT INTO dave VALUES (100); mysql> SELECT * FROM dave;
在 10.1.6.205 (SQL 節點 2) 查詢:
mysql> USE test; mysql> SELECT * FROM dave; +------+ | num | +------+ | 100 | +------+
mysql> SELECT * FROM ndbinfo.memoryusage; +---------+--------------+--------+------------+----------+-------------+ | node_id | memory_type | used | used_pages | total | total_pages | +---------+--------------+--------+------------+----------+-------------+ | 2 | Data memory | 851968 | 26 | 83886080 | 2560 | | 2 | Index memory | 212992 | 26 | 19136512 | 2336 | | 3 | Data memory | 851968 | 26 | 83886080 | 2560 | | 3 | Index memory | 212992 | 26 | 19136512 | 2336 | +---------+--------------+--------+------------+----------+-------------+
注意:DataMemory/IndexMemory 用盡會導致寫入失敗,需調整 config.ini 並重啟生效。
# 1. 關閉所有數據節點與管理節點 /usr/local/mysql/bin/ndb_mgm -e shutdown # 2. 關閉 SQL 節點 /usr/local/mysql/bin/mysqladmin -uroot -p shutdown
MySQL Cluster 部署雖步驟較多,但邏輯清晰:配置 → 啟動 MGM → 啟動 NDB (--initial) → 啟動 SQL → 驗證。掌握三大節點職責與啟動順序,即可快速建立高可用分佈式資料庫叢集。後續可整合 Keepalived + HAProxy 實現 SQL 節點負載均衡與自動故障轉移。