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

MySQL Cluster 集群搭建完整實戰:架構解析、節點配置與故障測試

     編輯:MySQL 資料庫相關知識

MySQL Cluster (NDB) 提供 99.999% 高可用性、記憶體內運算、無共享架構。本文記錄 5 節點 (1 管理 + 2 資料 + 2 SQL) 完整部署流程,含配置檔、啟動順序與雙向同步測試。

一、架構核心概念

三類節點角色

  • 管理節點 (MGM): 叢集配置、仲裁、監控,單點即可
  • 資料節點 (NDBD): 核心儲存與同步,≥2 節點實現高可用,節點越多同步越慢
  • SQL 節點 (API): 對外服務入口,可部署於 Web 伺服器或獨立主機,增加節點提升並發吞吐

NDB 引擎特性

  • 記憶體內運算,無磁碟 I/O 瓶頸,速度極快
  • 資料規模受限於叢集總記憶體 (建議單節點 8-16GB)
  • 分散式架構,理論上 2 節點即可解決單點故障

優缺點權衡

優點缺點
跨地理位置部署、擴展性佳、冗余度高、低成本高可用資料量受記憶體限制、斷電風險、網路延遲影響效能

二、實驗環境規劃 (5 台 CentOS 6.4 VM)

角色主機名IP
管理節點mgm-node192.168.124.141
資料節點 1data-node-1192.168.124.142
資料節點 2data-node-2192.168.124.143
SQL 節點 1sql-node-1192.168.124.144
SQL 節點 2sql-node-2192.168.124.145

三、公共前置配置 (所有節點)

# 1. 安裝 MySQL Cluster
cd /root/Downloads
tar -xvzf mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64 /usr/local/mysql

# 2. 關閉防火牆與 SELinux
chkconfig --level 35 iptables off
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
reboot

四、管理節點配置 (192.168.124.141)

mkdir /var/lib/mysql-cluster
cat > /var/lib/mysql-cluster/config.ini << 'EOF'
[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M

[ndb_mgmd]
NodeId=1
hostname=192.168.124.141
datadir=/var/lib/mysql-cluster

[ndbd]
NodeId=2
hostname=192.168.124.142
datadir=/usr/local/mysql/data

[ndbd]
NodeId=3
hostname=192.168.124.143
datadir=/usr/local/mysql/data

[mysqld]
NodeId=4
hostname=192.168.124.144

[mysqld]
NodeId=5
hostname=192.168.124.145
EOF

# 安裝管理工具
cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
chmod +x /usr/local/bin/ndb_mgm*

五、資料節點配置 (142, 143 同步執行)

# 1. 建立使用者
groupadd mysql; useradd -g mysql mysql

# 2. 配置 my.cnf
cat > /etc/my.cnf << 'EOF'
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
user=mysql
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]
ndb-connectstring=192.168.124.141
EOF

# 3. 初始化系統資料庫
cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

# 4. 設定目錄權限
chown -R root .
chown -R mysql:mysql /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql/sock
chgrp -R mysql .

# 5. 註冊服務
cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server

六、SQL 節點配置 (144, 145 同步執行)

# my.cnf 差異:啟用 ndbcluster 引擎
cat > /etc/my.cnf << 'EOF'
[client]
socket=/usr/local/mysql/sock/mysql.sock

[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
ndb-connectstring=192.168.124.141

[mysql_cluster]
ndb-connectstring=192.168.124.141
EOF

# 後續初始化、權限、服務註冊步驟同資料節點

七、叢集啟動順序 (關鍵!)

  1. 管理節點: ndb_mgmd -f /var/lib/mysql-cluster/config.ini (可用 ndb_mgm 監控)
  2. 資料節點 (首次): /usr/local/mysql/bin/ndbd --initial (後續啟動不可加 --initial)
  3. SQL 節點: /usr/local/mysql/bin/mysqld_safe --user=mysql &

八、雙向同步測試驗證

測試一:建表與資料同步

-- SQL 節點 1 執行
CREATE DATABASE aa;
USE aa;
CREATE TABLE ctest2 (i INT) ENGINE=NDB; -- 必須指定 NDB 引擎
INSERT INTO ctest2 VALUES (1);
SELECT * FROM ctest2;

-- SQL 節點 2 驗證
SHOW DATABASES;
USE aa;
SELECT * FROM ctest2; -- 應看到同步資料

測試二:節點故障恢復同步

  1. 關閉資料節點 1
  2. SQL 節點 2 寫入新資料
  3. 重啟資料節點 1 (ndbd --initial + service mysqld start)
  4. 驗證資料節點 1 同步回寫入期間的資料

九、關閉叢集順序

# 1. 管理節點關閉所有
ndb_mgm -e shutdown

# 2. SQL 節點停止服務
/etc/init.d/mysql.server stop
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved