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

MySQL NDB Cluster 叢集部署完整操作手冊

     編輯:MySQL 綜合教學

MySQL NDB Cluster 叢集部署完整操作手冊

MySQL NDB Cluster 是共享無架構的記憶體內資料庫叢集,提供 99.999% 高可用、自動分片、線性擴展。本文記錄基於 MySQL Cluster 7.3 (MySQL 5.6 基礎) 的三節點生產級部署全過程。

一、架構角色

角色進程功能本文節點
Management Nodendb_mgmd叢集配置、狀態監控、仲裁192.168.9.243 (sqltest03)
Data Nodendbd / ndbmtd儲存資料分片、同步複寫、記憶體運算192.168.9.241/242 (sqltest01/02)
SQL NodemysqldSQL 接口、查詢解析、連接 Data Node192.168.9.241/242 (同機部署)

關鍵概念:

  • Node Group:Data Node 分組,組內資料同步複寫(NoOfReplicas 決定組數)
  • Partition:資料按主鍵哈希自動分片分布到各 Node Group
  • NDBCLUSTER Engine:只有 ENGINE=NDBCLUSTER 的表才進入叢集共享儲存

二、環境準備(三台機器同步執行)

# 關閉防火牆/開放端口 3306, 1186, 2202, 2203
systemctl stop firewalld; systemctl disable firewalld

# 建立用戶與目錄
groupadd mysql; useradd -r -g mysql mysql
mkdir -p /usr/local/mysql /u01/mysql/data
chown -R mysql.mysql /usr/local/mysql /u01/mysql/data

三、安裝 MySQL Cluster 二進位包

# 下載 mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz
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/
chown -R mysql.mysql /usr/local/mysql/

# 環境變數
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
source /etc/profile

# 拷貝啟動腳本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld

四、管理節點配置 (sqltest03)

mkdir -p /var/lib/mysql-cluster
cat > /var/lib/mysql-cluster/config.ini <<'EOF'
[ndbd default]
NoOfReplicas=1
DataMemory=2048M
IndexMemory=512M

[tcp default]

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

[ndbd]
hostname=192.168.9.241
datadir=/u01/mysql/data
NodeId=2

[ndbd]
hostname=192.168.9.242
datadir=/u01/mysql/data
NodeId=3

[mysqld]
hostname=192.168.9.241
NodeId=4

[mysqld]
hostname=192.168.9.242
NodeId=5
EOF

# 啟動管理服務
ndb_mgmd -f /var/lib/mysql-cluster/config.ini

驗證:ndb_mgm -e show 應顯示 2 個 Data Node、2 個 SQL Node 皆為 not connected, accepting connect。

五、Data Node + SQL Node 配置 (sqltest01、sqltest02 同步執行)

1. my.cnf

cat > /etc/my.cnf <<'EOF'
[mysqld]
ndbcluster
basedir=/usr/local/mysql
datadir=/u01/mysql/data
port=3306

[mysql_cluster]
ndb-connectstring=192.168.9.243
EOF

2. 初始化資料目錄

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/u01/mysql/data --user=mysql

3. 啟動 Data Node(首次加 --initial)

ndbd --initial

管理端 ndb_mgm -e show 應顯示對應 NodeId 狀態變為 starting 進而 Nodegroup: 0, *。

4. 啟動 SQL Node

mysqld_safe --user=mysql &

管理端再次 show,SQL Node 應顯示 @IP (mysql-5.6.x ndb-7.3.x)。

六、功能驗證

# sqltest01 建表測試
mysql -uroot -p -e "
CREATE DATABASE mydb1;
USE mydb1;
CREATE TABLE mytb1 (id INT, birthdate DATETIME, pername CHAR(10)) ENGINE=NDBCLUSTER;
INSERT INTO mytb1 VALUES (1,'2013-01-23 09:45:10','pengzitong'),(2,'2007-07-09 09:45:10','pengzixin');
"

# sqltest02 驗證同步
mysql -uroot -p -e "USE mydb1; SELECT * FROM mytb1;"

兩節點資料一致,叢集部署成功。

七、關閉叢集

# 管理節點關閉叢集
ndb_mgm -e shutdown

# 各 SQL Node 關閉 mysqld
mysqladmin -uroot -p shutdown

八、生產環境關鍵調優參數

參數建議值說明
DataMemory物理記憶體 60~70%存放資料與索引,預留 OS 與 ndbd 進程記憶體
IndexMemoryDataMemory 10~15%哈希索引、有序索引記憶體
MaxNoOfConcurrentOperations100000+併發操作上限,防止「Too many active operations」
RedoBuffer32M~64MRedo log 緩衝,大事務需調大
MaxNoOfExecutionThreadsCPU 核心數 (ndbmtd)多執行緒 Data Node 進程,利用多核
HeartbeatIntervalDbDb1500節點心跳間隔(ms),網路抖動環境可調大
ArbitrationTimeout3000仲裁超時(ms),避免腦裂誤判

九、備份與恢復

# 線上備份(管理端)
ndb_mgm -e "START BACKUP 1"  # 同步快照,備份編號 1
ndb_mgm -e "ABORT BACKUP 1"  # 取消備份

# 恢復
ndb_restore -c 192.168.9.243 -n 2 -b 1 -r /u01/mysql/data/BACKUP/BACKUP-1
# -n: 目標 Data Node ID, -b: 備份編號, -r: 恢復路徑

十、常見坑點與避坑指南

  1. 版本不匹配:Management、Data、SQL 節點必須相同 MySQL Cluster 版本
  2. NodeId 衝突:config.ini 明確指定 NodeId,避免自動分配導致重啟後角色變更
  3. 記憶體不足:DataMemory + IndexMemory < 物理記憶體 80%,否則 OOM Killer 殺進程
  4. 單點管理節點:生產建議雙管理節點(config.ini 兩個 [ndb_mgmd] 區塊)
  5. 非 NDBCLUSTER 表:普通 InnoDB/MyISAM 表不進入叢集,僅存在本地 SQL Node
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved