知道相关概念后,实际上手搭建一把。因为现在有Docker这个工具,吃螃蟹现在也方便多了,感谢无私的程序员,下面是基于Docker+docker-compose这两个工具搭建的环境
部署运行
管理节点
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
  | 
mysql-ndb-mgm:
  image: mysql/mysql-cluster:8.0
  container_name: mysql-ndb-mgm
  hostname: mgm
  net: host
  restart: always
  environment:
    - TZ=Asia/Shanghai
  volumes:
    - ./hosts:/etc/hosts
    - ./mgm_data:/var/lib/mysql
    - ./mysql-cluster.cnf:/etc/mysql-cluster.cnf
    - ./my.cnf:/etc/my.cnf
  command:
    ndb_mgmd --ndb-nodeid=1 --initial
  | 
 
 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  | 
[tcp default]
SendBufferMemory=2M
ReceiveBufferMemory=2M
[ndbd default]
NoOfReplicas=2
LockPagesInMainMemory=1
DataMemory=3456M
NoOfFragmentLogFiles=300
MaxNoOfConcurrentOperations=100000
SchedulerSpinTimer=400
SchedulerExecutionTimer=100
RealTimeScheduler=1
TimeBetweenGlobalCheckpoints=1000
TimeBetweenEpochs=200
RedoBuffer=32M
MaxNoOfTables=1024
MaxNoOfOrderedIndexes=256
Datadir=/var/lib/mysql
[ndb_mgmd]
NodeId=1
Hostname=mgm
Datadir=/var/lib/mysql
[ndbd]
NodeId=2
Hostname=128.0.100.174
LockExecuteThreadToCPU=1
LockMaintThreadsToCPU=0
[ndbd]
NodeId=3
Hostname=ndb1
LockExecuteThreadToCPU=1
LockMaintThreadsToCPU=0
[mysqld]
NodeId=4
Hostname=mysql1
  | 
 
my.cnf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
  | 
[mysqld]
ndbcluster
ndb-use-exact-count=0
ndb-index-stat-enable=0
ndb-force-send=1
optimizer-switch=engine_condition_pushdown=on
ndb-connectstring=mgm
user=mysql
  
[mysql_cluster]
ndb-connectstring=mgm
  | 
 
 
数据节点
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
  | 
mysql-ndb-mgm:
  image: mysql/mysql-cluster:8.0
  container_name: mysql-ndb-ndbd
  net: host
  restart: always
  environment:
    - TZ=Asia/Shanghai
  volumes:
    - ./ndbd_data:/var/lib/mysql
    - ./my.cnf:/etc/my.cnf
    - ./hosts:/etc/hosts
  command:
    ndbd --ndb-nodeid=2
  | 
 
SQL节点
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
  | 
mysql-ndb-mysql:
  image: mysql/mysql-cluster:8.0
  container_name: mysql-ndb-mysql
  net: host
  restart: always
  environment:
    - TZ=Asia/Shanghai
    - MYSQL_ROOT_PASSWORD=1234qwer
  volumes:
    - ./hosts:/etc/hosts
    - ./mysql_data:/var/lib/mysql
    - ./my.cnf:/etc/my.cnf
  command:
    mysqld --ndb-nodeid=4
  | 
 
将相关容器启动起来就可以了。启动顺序为管理节点—>数据节点—>MySQL节点
后续操作
- 
创建SQL用户
1
2
3
  | 
CREATE USER admin@'%' IDENTIFIED WITH mysql_native_password BY 'admin';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';
FLUSH PRIVILEGES;
  | 
 
 
- 
查看分区情况
1
2
3
4
5
6
7
  | 
SELECT
partition_name part,  
partition_expression expr,  
partition_description descr,  
table_rows  
FROM information_schema.partitions 
WHERE table_schema = schema() AND table_name='test'; 
  | 
 
 
增加节点
增加SQL节点很简单。
第一步 要修改管理节点的mysql-cluster.conf文件
第二步 是要重启数据节点,所有的数据节点都要重启
第三步 启动新的MySQL节点即可。新节点会连接至集群,同步数据至本地