MySQL Cluster (NDB) 提供高可用、分片、內存運算特性。本文記錄在 CentOS 6.5 (32-bit) 上部署 5 節點 Cluster(1 管理、2 數據、2 SQL)的完整步驟,含套件移除、使用者建立、配置檔編寫、防火牆、啟動順序與驗證測試。
| 角色 | 主機名 | IP | NodeId |
|---|---|---|---|
| 管理節點 (MGM) | mgm | 192.168.1.71 | 1 |
| 數據節點 1 (NDBD1) | ndbd1 | 192.168.1.72 | 2 |
| 數據節點 2 (NDBD2) | ndbd2 | 192.168.1.73 | 3 |
| SQL 節點 1 (SQL1) | sql1 | 192.168.1.74 | 4 |
| SQL 節點 2 (SQL2) | sql2 | 192.168.1.75 | 5 |
| 預留 SQL 節點 | - | - | 6,7 |
# 移除系統自帶 MySQL rpm -qa | grep mysql rpm -e --nodeps mysql-libs-5.1.71-1.el6.i686 # 建立 mysql 用戶/組 groupadd mysql useradd -g mysql mysql # 解壓安裝包至 /usr/local/mysql cd /usr/local tar -xvf mysql-cluster-gpl-7.2.25-linux2.6-i686.tar.gz mkdir mysql mv mysql-cluster-gpl-7.2.25-linux2.6-i686/* mysql/ chown -R mysql:mysql mysql/ # 初始化系統表(管理/數據節點執行) cd /usr/local/mysql scripts/mysql_install_db --user=mysql # SQL 節點指定 datadir scripts/mysql_install_db --user=mysql --datadir=/var/mysql/data
mkdir -p /var/lib/mysql-cluster /var/mysql/data /var/mysql/log vim /var/lib/mysql-cluster/config.ini [NDBD DEFAULT] NoOfReplicas=2 [NDB_MGMD] NodeId=1 HostName=192.168.1.71 DataDir=/var/mysql/data [NDBD] NodeId=2 HostName=192.168.1.72 DataDir=/var/mysql/data [NDBD] NodeId=3 HostName=192.168.1.73 DataDir=/var/mysql/data [MYSQLD] NodeId=4 HostName=192.168.1.74 [MYSQLD] NodeId=5 HostName=192.168.1.75 # 預留空節點,防數據節點斷開重啟報錯 [MYSQLD] NodeId=6 [mysqld] NodeId=7
複製管理工具至 PATH:
cp /usr/local/mysql/bin/ndb_mgm /usr/local/bin/ cp /usr/local/mysql/bin/ndb_mgmd /usr/local/bin/ cp /var/lib/mysql-cluster/config.ini /usr/local/bin/
防火牆開放 Cluster 通訊埠(1186, 2202, 3306 等):
vim /etc/sysconfig/iptables # 加入規則後 /etc/init.d/iptables restart
mkdir -p /var/mysql/data /var/mysql/log vim /etc/my.cnf [mysqld] datadir=/var/mysql/data socket=/var/mysql/mysql.sock user=mysql symbolic-links=0 ndbcluster ndb-connectstring=192.168.1.71 [MYSQL_CLUSTER] ndb-connectstring=192.168.1.71 [NDB_MGM] connect-string=192.168.1.71 [mysqld_safe] log-error=/var/mysql/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld chmod +x /etc/rc.d/init.d/mysqld chkconfig --add mysqld mkdir -p /var/mysql/data /var/mysql/log chown -R mysql:mysql /var/mysql ln -s /usr/local/mysql/bin/mysql /usr/bin/ ln -s /var/mysql/mysql.sock /tmp/mysql.sock vim /etc/my.cnf [mysqld] datadir=/var/mysql/data socket=/var/mysql/mysql.sock user=mysql symbolic-links=0 log-bin=/var/mysql/log/mysql-bin.log max_connections=1000 binlog-ignore-db=mysql auto-increment-increment=2 auto-increment-offset=1 ndbcluster ndb-connectstring=192.168.1.71 [MYSQL_CLUSTER] ndb-connectstring=192.168.1.71 [NDB_MGM] connect-string=192.168.1.71 [mysqld_safe] log-error=/var/mysql/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial(首次或修改配置後必加 --initial)/usr/local/mysql/bin/ndbd --initialservice mysqld start關閉順序相反:SQL → 數據 → 管理。
ndb_mgm ndb_mgm> SHOW

預期輸出顯示 1 Management、2 Data Nodes (Starting/Started)、2 MySQLD 節點全部 Connected。
# SQL1 執行 mysql -e "CREATE DATABASE tianyuan; USE tianyuan; CREATE TABLE test(i INT, name VARCHAR(10)) ENGINE=ndbcluster; INSERT INTO test VALUES(1,'ceshi'); SELECT * FROM test;" # SQL2 驗證 mysql -e "SHOW DATABASES; USE tianyuan; SELECT * FROM test;"