| 角色 | 主機名 | IP | 規格 |
| Data/SQL Node 1 | DB1 | 192.168.20.201 | 2 vCPU / 4GB RAM |
| Data/SQL Node 2 | DB2 | 192.168.20.202 | 2 vCPU / 4GB RAM |
| Management Node | MGM | 192.168.20.203 | 1 vCPU / 1GB RAM |
宿主機:IBM x3560 + VMware ESX 4.0,Guest OS:CentOS 5.3 32bit
數據節點部署(DB1/DB2 同步)
# 1. 依賴與用戶
yum install -y gcc gcc-c++ make ncurses-devel libaio-devel
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 2. 二進制包部署(MySQL-max-5.0.24-linux-i686.tar.gz)
tar -xzf MySQL-max-5.0.24-linux-i686.tar.gz -C /usr/local/
ln -s /usr/local/MySQL-max-5.0.24-linux-i686 /usr/local/mysql
# 3. 初始化
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql
chown -R root .
chown -R mysql data
chgrp -R mysql .
# 4. 服務註冊
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
# 5. 設密碼
./bin/mysqladmin -u root password '123456'
# 6. 停服務改配置
service mysqld stop
cat >> /etc/my.cnf <<'EOF'
[mysqld]
ndbcluster
ndb-connectstring=192.168.20.203
[mysql_cluster]
ndb-connectstring=192.168.20.203
EOF
管理節點部署(MGM)
# 僅提取管理工具
mkdir -p /usr/local/mysql-cluster
cd /usr/local/mysql-cluster
tar -xzf /path/to/MySQL-max-5.0.24-linux-i686.tar.gz
cp MySQL-max-5.0.24-linux-i686/bin/ndb_mgm* /usr/local/bin/
chmod +x /usr/local/bin/ndb_mgm*
# 配置 config.ini
cat > /usr/local/mysql-cluster/config.ini <<'EOF'
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=200M
IndexMemory=100M
[TCP DEFAULT]
portnumber=2202
[NDB_MGMD]
hostname=192.168.20.203
datadir=/usr/local/mysql-cluster
[NDBD]
hostname=192.168.20.201
datadir=/usr/local/mysql/data
[NDBD]
hostname=192.168.20.202
datadir=/usr/local/mysql/data
[MYSQLD]
hostname=192.168.20.201
[MYSQLD]
hostname=192.168.20.202
EOF
啟動順序(關鍵!)
- 管理節點:`ndb_mgmd -f /usr/local/mysql-cluster/config.ini`
- 數據節點:`/usr/local/mysql/bin/ndbd --initial`(DB1、DB2 並行)
- SQL 節點:`service mysqld start`(DB1、DB2)
關鍵坑點:防火牆與 SELinux
錯誤現象:`Unable to connect with connect string ... error=2350`,日誌顯示 `Could not connect to ndb_mgmd`
**根因**:CentOS 預設開啟 `iptables` + `SELinux`,阻斷節點間通訊(1186、2202、動態端口)
**解決**:
# 關閉防火牆
service iptables stop
chkconfig iptables off
# 關閉 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 重啟 OS 生效
驗證叢集
ndb_mgm -e show
# 應顯示 2 ndbd、1 ndb_mgmd、2 mysqld(API)
功能測試
# DB1 建表插入(引擎必須指定 NDBCLUSTER)
mysql -uroot -p123456 -e "USE test; CREATE TABLE mingxing(name CHAR(3)) ENGINE=NDB; INSERT INTO mingxing VALUES('jay'),('cyl'),('ldh');"
# DB2 查詢
mysql -uroot -p123456 -e "USE test; SELECT * FROM mingxing;"
# 應返回 jay、cyl、ldh
重要限制
- **庫級不同步**:`CREATE DATABASE` 不會跨節點同步,雙邊需手動建同名庫
- **表引擎強制 NDB**:非 NDB 表不參與叢集同步
- **不支援外鍵/全文索引/空間索引**(5.0 版本限制)
- **記憶體模型**:資料全內存,`DataMemory`/`IndexMemory` 必須足夠,否則 OOM
版本選型建議
- MySQL 5.1+ 內建 Cluster,無需單獨 `-max` 包
- 生產建議 **MySQL Cluster 7.5/7.6/8.0** 系列,支援更多特性、效能更強
- 虛擬化環境預留 20%+ 記憶體給宿主機,避免 ballooning 導致客體 OOM
- 上一篇文章: MySQL Cluster 雙節點高可用部署:三節點架構防單點故障
- 下一篇文章: MySQL 主從同步實戰:GTID 模式部署、驗證、切換與運維全流程
Copyright ©
程式碼之家 All Rights Reserved