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

MySQL Cluster 雙機最小化部署實戰:NDB 存儲引擎雙節點架構

     編輯:MySQL 資料庫相關知識

架構說明

MySQL Cluster (NDB) 採用 **Share-Nothing** 內存數據庫架構,最小生產集群需 4 節點(2 管理 + 2 數據 + 2 SQL),本文演示**雙機模擬**(單機承擔管理+SQL+數據),僅供開發測試/教學,生產嚴禁。

節點規劃

主機IP角色
ndb1192.168.1.100ndb_mgmd (管理) + ndbd (數據) + mysqld (SQL)
ndb2192.168.1.200ndbd (數據) + mysqld (SQL)

軟件獲取

wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.6/mysql-cluster-gpl-7.6.19-linux-glibc2.12-x86_64.tar.gz
tar zxf mysql-cluster-gpl-*.tar.gz
mv mysql-cluster-gpl-* /usr/local/mysql-cluster
ln -s /usr/local/mysql-cluster /usr/local/mysql

注意:必須使用 **Cluster 版本**(含 ndb_mgmd、ndbd、ndb_mgm),標準 MySQL Server 不包含 NDB 組件。

配置文件

管理節點配置:/var/lib/mysql-cluster/config.ini

[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=512M
IndexMemory=128M
MaxNoOfConcurrentOperations=100000

[TCP DEFAULT]
SendBufferMemory=2M
ReceiveBufferMemory=2M

[NDB_MGMD]
NodeId=1
HostName=192.168.1.100
DataDir=/var/lib/mysql-cluster

[NDBD]
NodeId=2
HostName=192.168.1.100
DataDir=/usr/local/mysql/data

[NDBD]
NodeId=3
HostName=192.168.1.200
DataDir=/usr/local/mysql/data

[MYSQLD]
NodeId=4
HostName=192.168.1.100

[MYSQLD]
NodeId=5
HostName=192.168.1.200

SQL/數據節點通用配置:/etc/my.cnf

[mysqld]
ndbcluster
ndb-connectstring=192.168.1.100
default-storage-engine=NDBCLUSTER

[mysql_cluster]
ndb-connectstring=192.168.1.100

首次啟動流程

  1. 管理節點 (ndb1):
    mkdir -p /var/lib/mysql-cluster
    ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
  2. 數據節點 (兩台):
    ndbd --initial (僅首次使用 --initial)
  3. SQL 節點 (兩台):
    mysqld --initialize-insecure --user=mysql (首次)
    systemctl start mysqld 或 /usr/local/mysql/support-files/mysql.server start

驗證集群狀態

ndb_mgm -e "SHOW"
-- 預期輸出:
Connected to Management Server at: 192.168.1.100:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.1.100  (Version: 7.6.19, Nodegroup: 0, Master)
id=3 @192.168.1.200  (Version: 7.6.19, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.100  (Version: 7.6.19)
[mysqld(SQL)] 2 node(s)
id=4 @192.168.1.100  (Version: 7.6.19)
id=5 @192.168.1.200  (Version: 7.6.19)

數據驗證

# ndb1 建表寫入
mysql -u root -e "
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE city (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(35) NOT NULL,
  country CHAR(3) NOT NULL,
  population INT NOT NULL
) ENGINE=NDBCLUSTER;
INSERT INTO city VALUES (1,'Kabul','AFG',1780000),(2,'Qandahar','AFG',237500);
"

# ndb2 讀取驗證
mysql -u root -e "USE testdb; SELECT * FROM city;"

安全關閉與重啟順序

# 關閉
ndb_mgm -e "SHUTDOWN"        # 管理節點發送關閉信號,數據節點自動跟隨
systemctl stop mysqld        # 兩台停止 SQL 節點

# 重啟(順序嚴格)
# 1. 管理節點
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
# 2. 數據節點
ndbd                       # 無 --initial
# 3. SQL 節點
systemctl start mysqld

配置參數解析

區塊關鍵參數說明
NDBD DEFAULTNoOfReplicas副本數,決定節點組數量,生產建議 2
DataMemory數據內存,含行數據、索引、重做日誌,佔物理內存 70-80%
IndexMemory哈希/有序索引內存,通常 10-20% DataMemory
NDB_MGMDDataDir管理節點日誌/检查點目錄
NDBDDataDir數據節點本地數據文件目錄
MYSQLDHostNameSQL 節點 IP,允許同一主機多實例

生產部署核心差異

  • 最小 4 物理機:2 管理節點(異機房)、2 數據節點(每組 1 主 1 備)、≥2 SQL 節點
  • 專用網絡:管理/數據/客戶端三平面隔離 VLAN,MTU 9000
  • 內存鎖定:memlock_unlimited、關閉 Swap、NUMA 綁定
  • 監控體系:ndb_mgm -e "ALL REPORT MEMORYUSAGE"、ndbinfo 表、Prometheus Exporter
  • 備份策略:ndb_mgm -e "START BACKUP" 線程熱備、異地歸檔
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved