MySQL Cluster 採用 Shared-Nothing 分散式架構,NDB 儲存引擎將資料置於記憶體,提供無單點故障、高可用、高擴展性。核心組件:
ndb_mgmd,叢集協調、仲裁、配置分發。ndbd / ndbmtd,存儲資料分片、處理事務。mysqld,對外提供 MySQL 協議介面,路由請求至資料節點。| 角色 | 主機名 | IP |
|---|---|---|
| 管理節點 + 資料節點1 + SQL節點1 | myqClter1 | 192.168.55.15 |
| 資料節點2 + SQL節點2 | myqClter2 | 192.168.55.16 |
# 移除系統自帶 mysql-libs rpm -qa | grep mysql yum -y remove mysql-libs-5.1.71-1.el6.x86_64 # 建立 mysql 用戶 groupadd mysql useradd -r -g mysql mysql
tar -zxvf mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz mv mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64 /usr/local/mysql cd /usr/local/mysql chown -R root:mysql . chown -R mysql data/
scripts/mysql_install_db --user=mysql
cp support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqld
cp bin/ndb_mgm* /usr/local/bin/ mkdir -p /var/lib/mysql-cluster vi /var/lib/mysql-cluster/config.ini
[ndbd default] NoOfReplicas=2 DataMemory=200M IndexMemory=20M [tcp default] portnumber=2202 [ndb_mgmd] hostname=192.168.55.15 datadir=/var/lib/mysql-cluster/ [ndbd] hostname=192.168.55.15 datadir=/usr/local/mysql/data/ [ndbd] hostname=192.168.55.16 datadir=/usr/local/mysql/data/ [mysqld] hostname=192.168.55.15 [mysqld] hostname=192.168.55.16
cp support-files/my-default.cnf /etc/my.cnf vi /etc/my.cnf # 在 [mysqld] 下加入 ndbcluster # 在 [mysql_cluster] 下加入 ndb-connectstring=192.168.55.15
ndb_mgmd -f /var/lib/mysql-cluster/config.inindbd --initial(兩台均需執行,首次加 --initial)/etc/init.d/mysqld start防火牆:確保 1186 (管理)、2202 (資料節點通訊)、3306 (SQL) 端口開放。
ndb_mgm ndb_mgm> SHOW
正常輸出應顯示 2 個資料節點 STARTED、1 個管理節點、2 個 SQL 節點 connected。
# 連線 SQL 節點 1 建表插入 mysql -h 192.168.55.15 -p test CREATE TABLE beigang (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30)) ENGINE=NDBCLUSTER; INSERT INTO beigang VALUES (1, 'ndb t1'), (2, 'ndb t2'); # 連線 SQL 節點 2 查詢插入 mysql -h 192.168.55.16 -p test SELECT * FROM beigang; -- 可見 t1, t2 INSERT INTO beigang VALUES (3, 'ndb t3'); # 回節點 1 驗證 SELECT * FROM beigang; -- 可見 t1, t2, t3
# 關閉管理與資料節點 ndb_mgm -e shutdown # 關閉 SQL 節點 /etc/init.d/mysqld stop
ENGINE=NDB 或 NDBCLUSTER 的表才會分散儲存,其他引擎仍在本地 SQL 節點。DataMemory/IndexMemory 需依實際資料量規劃,不足會導致寫入失敗。MySQL Cluster 適合高併發、低延遲、資料量可控的記憶體密集型場景。部署複雜度較高,生產環境建議引入自動化部署工具,並建立完善的監控(ndbinfo、資訊表、Grafana)與備份策略。