MySQL NDB Cluster 部署示例

MySQL NDB Cluster 是内存集群数据库,可将数据分组分片冗余,由参数NoOfReplicas控制。

MySQL NDB Cluster 部署示例_第1张图片

 

MySQL NDB Cluster 有三种类型的群集节点:

管理节点:管理NDB群集中的其他节点,如配置、启动和停止节点、监控、备份等功能。

数据节点:存储集群数据,NDB虽是内存数据库,也可定义表空间存储[# of node groups] = [# of data nodes] / NoOfReplicas

SQL节点:访问群集数据的节点。对于NDB群集,SQL节点是使用NDBCLUSTER存储引擎的传统MySQL服务器。

MySQL NDB Cluster 部署示例_第2张图片

以上工具,只需要到官网下载一个软件包: mysql-cluster-gpl-7.6.12-linux-glibc2.12-x86_64.tar.gz

管理节点,需要服务端和客户的命令ndb_mgmd 和 ndb_mgm,已经设置配置文件 config.ini

数据节点,需要配置my.cnf,需要管理命令 ndbd 和 ndbmtd

SQL节点,需要配置my.cnf,只存储定义不存储数据,只需 mysqld 初始化即可,不需要下载MySQL。

 

更多参考:MySQL NDB Cluster 8.0

下载配置:

su - mysql
tar -zxvf mysql-cluster-gpl-7.6.12-linux-glibc2.12-x86_64.tar.gz
mv mysql-cluster-gpl-7.6.12-linux-glibc2.12-x86_64 /data/mysql-cluster
echo 'export PATH=$PATH:/data/mysql-cluster/bin' >> ~/.bashrc
source ~/.bashrc

管理节点配置:需要服务端和客户的命令ndb_mgmd 和 ndb_mgm,此处配置(1个ndb_mgmd;4个ndbd;2个mysqld)

mkdir -p /data/mysql-cluster/ndb_data
mkdir -p /data/mysql_ndb_data{21,22,23,24}

cat << EOF > /data/mysql-cluster/config.ini
[ndb_mgmd default]
DataDir=/data/mysql-cluster/ndb_data #MGM节点日志文件的目录
[ndb_mgmd]
NodeId=1
PortNumber=2200
HostName=192.168.1.82
[ndbd default]
NoOfReplicas=2
DataMemory=128M
[ndbd]
NodeId=21
ServerPort=2221
HostName=192.168.1.82
DataDir=/data/mysql_ndb_data21
[ndbd]
NodeId=22
ServerPort=2222
HostName=192.168.1.82
DataDir=/data/mysql_ndb_data22
[ndbd]
NodeId=23
ServerPort=2223
HostName=192.168.1.82
DataDir=/data/mysql_ndb_data23
[ndbd]
NodeId=24
ServerPort=2224
HostName=192.168.1.82
DataDir=/data/mysql_ndb_data24
[mysqld]
NodeId=11
HostName=192.168.1.82
[mysqld]
NodeId=12
HostName=192.168.1.82
EOF

#启动管理节点(默认端口1186),初始化以后若重启不需要initial了
/data/mysql-cluster/bin/ndb_mgmd -f /data/mysql-cluster/config.ini --initial

#查看或关闭
netstat -tuplna | grep ndb_mgmd
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e 'show'
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e 'all status'
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e shutdown

每个数据节点或SQL节点都需要一个my.cnf文件,该文件需要配置 管理节点的连接字符串和启用NDBCLUSTER存储引擎参数

数据节点 & SQL节点 my.cnf 配置:

for port in {3306..3307}
do
cat << EOF > /data/mysql${port}/my.cnf
[client]
port = ${port}
socket = /data/mysql${port}/tmp/mysql.sock
[mysqld]
port = ${port}
server_id = 82${port}
basedir =/data/mysql${port}
datadir =/data/mysql${port}/data
log-bin=/data/mysql${port}/binlog/mysql-bin
log-error =/data/mysql${port}/mysqld.log
pid-file =/data/mysql${port}/mysqld.pid
socket =/data/mysql${port}/tmp/mysql.sock
plugin-dir=/data/mysql/5.7/lib/plugin
innodb_buffer_pool_size = 512M
autocommit = 1
character_set_server=utf8
transaction_isolation = READ-COMMITTED
lower_case_table_names=1
explicit_defaults_for_timestamp = 1
binlog_format = row
symbolic-links=0
skip-external-locking
ndbcluster
#default-storage-engine=ndbcluster
#default-tmp-storage-engine=ndb
#ndb-connectstring=192.168.1.82:2200
[mysqld_safe]
log-error=/data/mysql${port}/mysqld.log
pid-file=/data/mysql${port}/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.1.82:2200
EOF
done

MySQL NDB Cluster 启动顺序:首先是管理节点,然后是数据节点,最后是SQL节点

数据节点启动:默认端口为2202。现在直接启动 (本测试4个节点都在本地,所以要执行4次初始化)

/data/mysql-cluster/bin/ndbd -c 192.168.1.82:2200 --initial
netstat -tuplna | grep ndbd

初始化SQL节点 并切动服务 (此初始化2个SQL节点)

#初始化SQL节点
/data/mysql-cluster/bin/mysqld --defaults-file=/data/mysql3306/my.cnf --initialize --user=mysql
/data/mysql-cluster/bin/mysqld --defaults-file=/data/mysql3307/my.cnf --initialize --user=mysql

#启动SQL节点服务
/data/mysql-cluster/bin/mysqld_safe --defaults-file=/data/mysql3306/my.cnf 2>&1 > /dev/null &
/data/mysql-cluster/bin/mysqld_safe --defaults-file=/data/mysql3307/my.cnf 2>&1 > /dev/null &

#查看节点情况
ps -aef | grep mysqld
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e 'show'
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e 'all status'

MySQL NDB Cluster 部署示例_第3张图片

连接2个SQL几点更改root密码:

#连接实例更改root密码
/data/mysql-cluster/bin/mysql -P 3306 -u root -p -S /data/mysql3306/tmp/mysql.sock
/data/mysql-cluster/bin/mysql -P 3307 -u root -p -S /data/mysql3307/tmp/mysql.sock

ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql';
flush privileges;
create user root@'192.168.1.%' IDENTIFIED by 'mysql';
grant all privileges on *.* to root@'192.168.1.%';
flush privileges;
select Host,User from mysql.user;

创建测试表,默认创建内存表,创建磁盘表需要指定表空间存储。创建表如不创建主键,则会自动创建隐藏主键。登录任意一个SQL 节点创建表,其他SQL实例也可以访问(创建表需指定 ENGINE = NDBCLUSTER或ENGINE = NDB)

#创建内存表
create database test;
use test;
create table tab(id int,name varchar(10)) engine=NDB;
insert into tab values(1,'ndbd21');
insert into tab values(2,'ndbd21');
select * from tab;

#创建磁盘表,创建UNDO表空间和数据表空间
create logfile group lg_1
add undofile 'undofile_1.log'
initial_size 16m
undo_buffer_size 2m
engine ndbcluster;

create tablespace ts_1 
add datafile 'datafile_1.dat'
use logfile group lg_1
initial_size 32m
engine ndbcluster;

create table tab2(id int,name varchar(10)) engine=NDB tablespace ts_1 storage disk;
insert into tab2 values(1,'ndbd21');
insert into tab2 values(2,'ndbd21');
select * from tab2;

 

【新增2个节点】

参考:Adding NDB Cluster Data Nodes Online: Detailed Example

#1.更改管理配置文件,增加2个ndbd节点选项
mkdir -p /data/mysql_ndb_data{25,26}

cat << EOF > /data/mysql-cluster/config.ini
[ndb_mgmd default]
DataDir=/data/mysql-cluster/ndb_data
[ndb_mgmd]
NodeId=1
PortNumber=2200
HostName=192.168.1.82
[ndbd default]
NoOfReplicas=2
DataMemory=128M
[ndbd]
NodeId=21
ServerPort=2221
HostName=192.168.1.82
DataDir=/data/mysql_ndb_data21
[ndbd]
NodeId=22
ServerPort=2222
HostName=192.168.1.82
DataDir=/data/mysql_ndb_data22
[ndbd]
NodeId=23
ServerPort=2223
HostName=192.168.1.82
DataDir=/data/mysql_ndb_data23
[ndbd]
NodeId=24
ServerPort=2224
HostName=192.168.1.82
DataDir=/data/mysql_ndb_data24
[ndbd]
NodeId=25
ServerPort=2225
HostName=192.168.1.82
DataDir=/data/mysql_ndb_data25
[ndbd]
NodeId=26
ServerPort=2226
HostName=192.168.1.82
DataDir=/data/mysql_ndb_data26
[mysqld]
NodeId=11
HostName=192.168.1.82
[mysqld]
NodeId=12
HostName=192.168.1.82
EOF

#2.停止管理服务(ndb_mgmd: NodeId=1)
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e '1 STOP'

#3.启动管理服务
/data/mysql-cluster/bin/ndb_mgmd -f /data/mysql-cluster/config.ini --reload

#4.对现有数据节点执行滚动重启(starting 完成再执行下一个)
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e '21 restart'
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e '22 restart'
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e '23 restart'
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e '24 restart'

#5.重启sql节点服务
/data/mysql-cluster/bin/mysqladmin -uroot -pmysql shutdown -S /data/mysql3306/tmp/mysql.sock
/data/mysql-cluster/bin/mysqladmin -uroot -pmysql shutdown -S /data/mysql3307/tmp/mysql.sock

/data/mysql-cluster/bin/mysqld_safe --defaults-file=/data/mysql3306/my.cnf 2>&1 > /dev/null &
/data/mysql-cluster/bin/mysqld_safe --defaults-file=/data/mysql3307/my.cnf 2>&1 > /dev/null &

#6.初始化数据节点(新增2节点,此处执行2次)
/data/mysql-cluster/bin/ndbd -c 192.168.1.82:2200 --initial

#7.创建新的节点组
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e 'create nodegroup 25,26'

#8.重新分布集群数据
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e 'all report memory'
/data/mysql-cluster/bin/ndb_desc -c 192.168.1.82:2200 -d test -t tab -p

/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e 'show'
/data/mysql-cluster/bin/ndb_mgm -c 192.168.1.82:2200 -e 'all status'

 

 

 

 

 

 

 

你可能感兴趣的:(MYSQL,MYSQL,高可用性)