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

MySQL Cluster 集群部署全流程:架構、配置與測試實戰

     編輯:MySQL 資料庫相關知識

項目背景與選型

某證券公司 OA 系統,初期 30 萬在線用戶,後擴容至 50 萬且全寫入場景。原 Master-Master-Slave 讀寫分離架構無法滿足高併發寫入需求,最終選型 MySQL Cluster (NDB 引擎):

  • 共無架構,無單點故障
  • 內存數據庫,極低延遲
  • 自動分片與副本,線性擴展
  • 支持多 SQL 節點負載均衡

核心概念

注意: 「節點」指進程,單機可跑多節點;生產建議物理隔離。

拓撲規劃(5 節點示例)

節點類型角色啟動命令
管理節點 (MGM)集群配置、啟停節點、備份、日誌ndb_mgmd
數據節點 (NDB)存儲數據、執行事務、自動分片ndbd / ndbmtd
SQL 節點 (API)MySQL Server 接入層,解析 SQL、路由到數據節點mysqld --ndbcluster
角色主機名IP
MGMndb_mgmd192.168.5.101
NDB1ndb1192.168.5.102
NDB2ndb2192.168.5.103
SQL1mysqld1192.168.5.104
SQL2mysqld2192.168.5.105

網絡要求: 僅限可信子網,TCP 通信無加密,禁跨公網。

安裝步驟(基於 mysql-max-5.0.24 二進制包)

1. 創建 mysql 用戶

groupadd mysql
useradd -g mysql mysql

2. 解包並初始化(SQL/NDB 節點共用)

tar zxf mysql-max-5.0.24-linux-i686.tar.gz
mv mysql-max-5.0.24-linux-i686 /usr/local/mysql
cd /usr/local/mysql
./scripts/mysql_install_db
chown -R mysql:mysql /usr/local/mysql

3. SQL 節點配置 /etc/my.cnf

[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
user = mysql
port = 3306
socket = /tmp/mysql.sock
ndbcluster
ndb-connectstring=192.168.5.101

[mysql_cluster]
ndb-connectstring=192.168.5.101

4. NDB 節點配置 /etc/my.cnf

[mysqld]
ndbcluster
ndb-connectstring=192.168.5.101

[mysql_cluster]
ndb-connectstring=192.168.5.101

5. 管理節點:僅提取管理工具

mkdir -p /usr/local/mysql/data
cp mysql-max-5.0.24-linux-i686/bin/ndb_mgm* /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql

6. 管理節點配置 /usr/local/mysql/config.ini

[ndbd default]
NoOfReplicas=1

[tcp default]
portnumber=2202  # 建議專用端口,非 3306

[ndb_mgmd]
hostname=192.168.5.101
datadir=/usr/local/mysql/data

[ndbd]
hostname=192.168.5.102
datadir=/usr/local/mysql/data

[ndbd]
hostname=192.168.5.103
datadir=/usr/local/mysql/data

[mysqld]
hostname=192.168.5.104

[mysqld]
hostname=192.168.5.105

啟動順序(關鍵)

  1. 管理節點: /usr/local/mysql/ndb_mgmd -f /usr/local/mysql/config.ini
  2. 數據節點(首次): /usr/local/mysql/bin/ndbd --initial(後續啟動去掉 --initial)
  3. SQL 節點: /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

驗證集群狀態

ndb_mgm -e show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.5.102 (Version: 5.0.24, Nodegroup: 0, Master)
id=3 @192.168.5.103 (Version: 5.0.24, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.5.101 (Version: 5.0.24)
[mysqld(API)] 2 node(s)
id=4 @192.168.5.104 (Version: 5.0.24)
id=5 @192.168.5.105 (Version: 5.0.24)

功能測試

1. 引擎驗證

-- SQL1
CREATE TABLE t1(a INT) ENGINE=NDB;
INSERT INTO t1 VALUES(100);

-- SQL2
SHOW TABLES;  -- 可見 t1
SELECT * FROM t1;  -- 可見 100

注意: NDB 表必須有主鍵,否則自動生成隱藏主鍵佔用內存。

2. 高可用測試

  • Kill NDB 節點 → 集群自動故障轉移,服務不中斷
  • Kill SQL 節點 → 客戶端連接另一 SQL 節點
  • MGM 節點無狀態,可多機部署配置文件與二進制

3. 性能壓測

擴容至 4 NDB 節點(雙副本雙分片),壓測一個月後上線。

安全關閉

# 關閉整個集群
ndb_mgm -e shutdown

# 關閉 SQL 節點
mysqladmin -uroot shutdown

總結

MySQL Cluster 通過共無架構、內存計算、自動分片解決了高併發寫入瓶頸。部署關鍵在於:拓撲規劃、配置文件一致性、啟動順序、NDB 表主鍵設計、網絡隔離。生產環境建議:多副本、跨機房部署、監控 ndb_mgm -e "ALL REPORT MEMORYUSAGE"、定期 ONLINE BACKUP。

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