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

MySQL Cluster 在 IBM 虛擬化環境部署實戰:VMware ESX + CentOS

     編輯:MySQL 綜合教學

環境拓撲

宿主機: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

啟動順序(關鍵!)

  1. 管理節點:`ndb_mgmd -f /usr/local/mysql-cluster/config.ini`
  2. 數據節點:`/usr/local/mysql/bin/ndbd --initial`(DB1、DB2 並行)
  3. 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
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
角色主機名IP規格
Data/SQL Node 1DB1192.168.20.2012 vCPU / 4GB RAM
Data/SQL Node 2DB2192.168.20.2022 vCPU / 4GB RAM
Management NodeMGM192.168.20.2031 vCPU / 1GB RAM