| 角色 | 主機名 | IP | 進程 |
|---|---|---|---|
| 管理節點 | Server3 | 192.168.245.13 | ndb_mgmd |
| 資料節點 | Server1 | 192.168.245.11 | ndbd |
| 資料節點 | Server2 | 192.168.245.12 | ndbd |
| SQL 節點 | Server1/2/3 | 同上 | mysqld --ndb-cluster |
複製因子 NoOfReplicas=2,兩資料節點互為備份,單點故障不丟資料。
[mysqld]
ndbcluster
ndb-connectstring=192.168.245.13
[mysql_cluster]
ndb-connectstring=192.168.245.13
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=10M
IndexMemory=25M
MaxNoOfTables=256
MaxNoOfOrderedIndexes=256
MaxNoOfUniqueHashIndexes=128
[NDB_MGMD]
Id=1
HostName=192.168.245.13
DataDir=/var/lib/mysql-cluster
[NDBD]
Id=2
HostName=192.168.245.11
DataDir=/var/lib/mysql-cluster
[NDBD]
Id=3
HostName=192.168.245.12
DataDir=/var/lib/mysql-cluster
[MYSQLD]
Id=4
HostName=192.168.245.13
[MYSQLD]
Id=5
HostName=192.168.245.11
[MYSQLD]
Id=6
HostName=192.168.245.12
sudo /etc/init.d/mysql-ndb-mgm startsudo /etc/init.d/mysql-ndb start(兩台同步啟動)sudo /etc/init.d/mysql start(三台)ndb_mgm -e show
# 輸出應顯示:
# [ndbd(NDB)] 2 node(s) - 皆為 STARTED
# [ndb_mgmd(MGM)] 1 node(s)
# [mysqld(API)] 3 node(s)
-- 任一 SQL 節點建表(必須指定 ENGINE=NDBCLUSTER)
CREATE DATABASE cluster;
USE cluster;
CREATE TABLE city (
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL DEFAULT ''
) ENGINE=NDBCLUSTER DEFAULT CHARSET=utf8;
INSERT INTO city VALUES (1, 'Shenzhen'), (2, 'Guangdong');
-- 另一 SQL 節點查詢
SHOW DATABASES; -- 看見 cluster
USE cluster;
SELECT * FROM city; -- 看見同步資料
CREATE DATABASE 再 USE 才能看見同步表。Server ID 衝突:The slave I/O thread stops because master and slave have equal MySQL Server ids
→ 修改各節點 my.cnf server-id 為唯一值,重啟。