首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Cluster 7.2.4 多節點集群部署全紀錄:管理/數據/SQL 三節點架構實戰

     編輯:MySQL 綜合教學

架構規劃

角色主機名IP架構進程
管理節點 (MGM)erpdbtest192.168.32.2232位ndb_mgmd, ndb_mgm
數據節點 1dbs1202.122.32.6864位ndbd
數據節點 2dbs2202.38.128.15364位ndbd
SQL 節點 1dbs1202.122.32.6864位mysqld
SQL 節點 2dbs2202.38.128.15364位mysqld

複製因子 NoOfReplicas=2:兩數據節點互為備份,單點故障不丟數據。

前置環境準備 (所有節點)

# 關閉防火牆
service iptables stop
chkconfig --level 35 iptables off

# 關閉 SELinux
vim /etc/selinux/config
# SELINUX=permissive 或 disabled
# 重啟生效

# 卸載舊 MySQL
rpm -qa | grep -i mysql | xargs rpm -e --nodeps
rm -rf /etc/my.cnf /var/lib/mysql

1. 管理節點部署 (192.168.32.22)

# 解壓 32 位包
tar -zxvf mysql-cluster-gpl-7.2.4-linux2.6-i686.tar.gz

# 創建目錄
mkdir -p /usr/local/mysql/bin /usr/local/mysql/ndbdata /var/lib/mysql-cluster /usr/local/mysql/cluster-conf

# 拷貝二進制
cp mysql-cluster-gpl-7.2.4-linux2.6-i686/bin/ndb_mgmd /usr/local/mysql/bin/
cp mysql-cluster-gpl-7.2.4-linux2.6-i686/bin/ndb_mgm  /usr/local/mysql/bin/

# 環境變量
echo 'PATH=$PATH:/usr/local/mysql/bin' >> ~/.bash_profile && source ~/.bash_profile

# 配置文件 config.ini
cat > /usr/local/mysql/cluster-conf/config.ini <<'EOF'
[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M

[ndb_mgmd]
id=1
hostname=192.168.32.22
DataDir=/var/lib/mysql-cluster

[ndbd]
id=11
HostName=202.122.32.68
DataDir=/usr/local/mysql/ndbdata

[ndbd]
id=12
HostName=202.38.128.153
DataDir=/usr/local/mysql/ndbdata

[mysqld]
id=21
HostName=202.122.32.68

[mysqld]
id=22
HostName=202.38.128.153

[mysqld]
id=23  # 預留空節點供動態擴容
EOF

2. 數據節點部署 (dbs1, dbs2)

# 解壓 64 位包
tar -zxvf mysql-cluster-gpl-7.2.4-linux2.6-x86_64.tar.gz

# 目錄與二進制
mkdir -p /usr/local/mysql/bin /usr/local/mysql/ndbdata
cp mysql-cluster-gpl-7.2.4-linux2.6-x86_64/bin/ndbd /usr/local/mysql/bin/
echo 'PATH=$PATH:/usr/local/mysql/bin' >> ~/.bash_profile && source ~/.bash_profile

# 連接管理節點配置 /etc/my.cnf
cat > /etc/my.cnf <<'EOF'
[mysql_cluster]
ndb-connectstring=192.168.32.22
EOF

3. SQL 節點部署 (dbs1, dbs2)

# 解壓 64 位包作為 MySQL Server
tar -zxvf mysql-cluster-gpl-7.2.4-linux2.6-x86_64.tar.gz
mv mysql-cluster-gpl-7.2.4-linux2.6-x86_64 /usr/local/mysql

# 用戶與權限
groupadd mysql && useradd -g mysql mysql
chown -R mysql:mysql /usr/local/mysql

# 初始化數據目錄
cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
cd /usr/local/mysql
scripts/mysql_install_db --user=mysql

# 服務註冊
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld && chkconfig --level 35 mysqld on

# 環境變量
echo 'PATH=$PATH:/usr/local/mysql/bin' >> ~/.bash_profile && source ~/.bash_profile

# 配置 NDB 連接 /etc/my.cnf
cat >> /etc/my.cnf <<'EOF'
[mysqld]
ndbcluster
ndb-connectstring=192.168.32.22
port=3306
socket=/tmp/mysql.sock
EOF

4. 啟動驗證全流程

啟動順序:管理 → 數據 → SQL

# 管理節點
ndb_mgmd -f /usr/local/mysql/cluster-conf/config.ini
# 首次或配置變更需刪除舊緩存
# rm /var/lib/mysql-cluster/ndb_1_config.bin.1

# 數據節點 (兩台並行)
ndbd --initial  # 首次必加 --initial
ndbd            # 後續啟動

# SQL 節點 (兩台並行)
service mysqld start
# 或 /etc/rc.d/init.d/mysqld start

驗證集群狀態

# 管理節點執行
ndb_mgm -e show

正常輸出:

Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=11 @202.122.32.68  (mysql-5.5.19 ndb-7.2.4, Nodegroup: 0, Master)
id=12 @202.38.128.153 (mysql-5.5.19 ndb-7.2.4, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.32.22  (mysql-5.5.19 ndb-7.2.4)

[mysqld(API)] 3 node(s)
id=21 @202.122.32.68  (mysql-5.5.19 ndb-7.2.4)
id=22 @202.38.128.153 (mysql-5.5.19 ndb-7.2.4)
id=23 (not connected, accepting connect from any host)

功能驗證:建表同步測試

# SQL 節點 1
mysql -uroot -p
CREATE DATABASE ndbtest;
USE ndbtest;
CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=ndbcluster DEFAULT CHARSET=gbk;
INSERT INTO t1 VALUES (),(),();

# SQL 節點 2
mysql -uroot -p
USE ndbtest;
SELECT * FROM t1;  -- 應看到 3 行
SHOW TABLES;       -- 應看到 t1
⚠️ 必須指定 ENGINE=ndbcluster,否則建立的是本地 InnoDB 表,不同步。

關閉集群

# 順序:SQL → 管理
service mysqld stop  # 兩個 SQL 節點
ndb_mgm -e shutdown  # 管理節點發送關閉指令,數據節點自動停止
# rm /var/lib/mysql-cluster/ndb_1_config.bin.1  # 配置變更時清理

核心運維避坑指南

現象原因對策
一台 ndbd 停,另一台也跟著停NoOfReplicas=2 但只有一組節點組,單點故障導致集群不可用確保兩數據節點同時在線;生產建議 4 數據節點 (2 節點組)
同時執行 ndbd --initial 導致數據全丟--initial 會清空數據目錄重做滾動重啟:一台 --initial 完成同步後,再重啟另一台
修改 config.ini 後重啟不生效管理節點緩存舊配置 ndb_1_config.bin.1重啟管理節點前刪除該文件
建庫建表不同步NDB 不自動發現 DDL (舊版本)每個 SQL 節點手動 CREATE DATABASE ...; FLUSH TABLES;
配置文件順序錯誤導致節點 ID 衝突[mysqld]/[ndbd] 區塊內 id 必須在 HostName 之前統一模板:id → HostName → 其他參數

關鍵目錄結構速查


/usr/local/mysql/
├── bin/              # ndb_mgmd, ndb_mgm, ndbd, mysqld
├── ndbdata/          # 數據節點數據目錄
├── cluster-conf/     # config.ini
/var/lib/mysql-cluster/  # 管理節點日誌/緩存
/etc/my.cnf           # 數據/SQL 節點連接串

總結

MySQL Cluster 7.2.4 部署核心在於:**拓撲規劃清晰、版本架構匹配、配置文件 id/HostName 順序正確、啟動順序嚴格、首次必加 --initial、配置變更清緩存**。掌握 ndb_mgm -e show 狀態解讀,建立標準化運維手冊,可將集群部署從「玄學」變為「標準動作」。

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