本文記錄在 CentOS 6.5 (64-bit) 環境下,使用 mysql-cluster-advanced-7.3.7-linux-glibc2.5-x86_64.tar.gz 部署 5 節點 MySQL Cluster 的完整流程,包含 MGM 管理節點、2 個 NDB 資料節點、2 個 SQL 查詢節點。
| 角色 | 主機名 | IP 位址 |
|---|---|---|
| MGM (管理節點) | mgm-node | 192.168.100.211 |
| NDBD1 (資料節點) | ndbd1 | 192.168.100.212 |
| NDBD2 (資料節點) | ndbd2 | 192.168.100.213 |
| SQL1 (SQL 節點) | sql1 | 192.168.100.214 |
| SQL2 (SQL 節點) | sql2 | 192.168.100.215 |
yum -y install perl libaio ntpdate
service iptables stop chkconfig iptables off
rpm -qa | grep mysql rpm -e --allmatches --nodeps mysql-libs-5.1.71-1.el6.x86_64
cd /main tar zxvf mysql-cluster-advanced-7.3.7-linux-glibc2.5-x86_64.tar.gz mv mysql-cluster-advanced-7.3.7-linux-glibc2.5-x86_64 mysql
groupadd mysql useradd -g mysql -s /usr/sbin/nologin mysql chown -R mysql:mysql /main/mysql
/main/mysql/scripts/mysql_install_db --user=mysql --basedir=/main/mysql --datadir=/main/mysql/data
# 移除預設 my.cnf rm -rf /etc/my.cnf # 建立配置目錄 mkdir /main/mysql/etc chown mysql:mysql /main/mysql/etc # 編寫 config.ini vi /main/mysql/etc/config.ini
config.ini 關鍵內容:
[ndb_mgmd default] datadir = /main/mysql/data [ndbd default] NoOfReplicas = 2 DataMemory = 80M IndexMemory = 18M datadir = /main/mysql/data [ndb_mgmd] NodeId = 1 HostName = 192.168.100.211 [ndbd] NodeId = 11 HostName = 192.168.100.212 [ndbd] NodeId = 12 HostName = 192.168.100.213 [mysqld] NodeId = 81 HostName = 192.168.100.214 [mysqld] NodeId = 82 HostName = 192.168.100.215
vi /etc/my.cnf
[mysqld] ndbcluster ndb-connectstring = 192.168.100.211 [mysql_cluster] ndb-connectstring = 192.168.100.211
# 複製啟動腳本 cp -p /main/mysql/support-files/mysql.server /etc/init.d/mysqld # 編寫 my.cnf vi /etc/my.cnf
[mysqld] basedir = /main/mysql datadir = /main/mysql/data ndbcluster ndb-connectstring = 192.168.100.211 [mysql_cluster] ndb-connectstring = 192.168.100.211
嚴格遵循順序:MGM → NDBD → SQL
⚠ 首次啟動或配置變更後需加 --initial,否則會清空所有資料!
mkdir -p /usr/local/mysql/mysql-cluster ndb_mgmd -f /main/mysql/etc/config.ini --initial
檢查狀態:
ndb_mgm -e show
預期輸出顯示 2 個 NDB 節點、1 個 MGM、2 個 SQL 節點皆為 not connected, accepting connect 狀態。
ndbd --initial
service mysqld start
於任一 SQL 節點登入 MySQL:
mysql -uroot -p SHOW ENGINE NDB STATUS; CREATE DATABASE test_cluster; USE test_cluster; CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=NDBCLUSTER; INSERT INTO t1 VALUES (1),(2); SELECT * FROM t1;
若另一 SQL 節點可查詢到相同資料,代表叢集部署成功。
config.ini IP/NodeId、防火牆、/etc/hosts 解析。config.ini 並重啟 NDB(需 --initial)。my.cnf 已載入 ndbcluster 且二進制支援 NDB。本文僅涵蓋基礎部署;生產環境建議進一步調優 Redo log、Checkpoint、備份策略、監控告警等進階配置。