MySQL Cluster

352 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1、YUM方式安装MySQL Cluster

1.1 YUM方式安装MySQL Cluster

系统资源及组件规划:

节点名称系统名称CPU/ 内存网卡磁盘IP 地址OS
MGMTNodemaster2C/4Gens3364G192.168.0.10CentOS7
SQLNode1sqlnode12C/4Gens3364G192.168.0.11CentOS7
SQLNode2sqlnode22C/4Gens3364G192.168.0.12CentOS7
DATANode1datanode12C/4Gens3364G192.168.0.13CentOS7
DATANode2datanode22C/4Gens3364G192.168.0.14CentOS7

安装基本软件:

yum -y install vim lrzsz wget net-tools bash-completion yum-utils

image.png 设置NTP:

yum -y install chrony

image.png

systemctl start chronyd
systemctl enable chronyd
systemctl status chronyd

image.png

chronyc sources

image.png 设置SELinux、防火墙:

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

image.png 设置YUM源:

wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
wget -O /etc/yum.repos.d/epel.repo <http://mirrors.aliyun.com/repo/epel-7.repo>

image.png

yum -y install mysql80-community-release-el7-3.noarch.rpm

image.png

yum repolist enabled | grep "mysql.*-community.*"
yum-config-manager --enable mysql-cluster-8.0-community
yum repolist enabled | grep "mysql.*-community.*"

image.png 安装MySQL Cluster组件及依赖包:

管理节点:

yum -y install perl perl-Class-MethodMaker perl-DBI libaio numactl

image.png

yum -y install mysql-cluster-community-management-server mysql-cluster-community-client

image.png SQL节点:

yum -y install mysql-cluster-community-server

image.png 数据节点:

yum -y install mysql-cluster-community-data-node mysql-cluster-community-client

image.png 在管理节点上创建目录:

mkdir /etc/mysql-cluster
mkdir /var/lib/mysql

image.png 在管理节点上编辑MySQL Cluster配置文件:

cat > /etc/mysql-cluster/config.ini << EOF
[ndbd default]
noofreplicas=2

[ndb_mgmd]
nodeid=10
hostname=192.168.0.10
datadir=/var/lib/mysql

[mysqld]
nodeid=11
hostname=192.168.0.11

[mysqld]
nodeid=12
hostname=192.168.0.12

[ndbd]
nodeid=13
hostname=192.168.0.13
datadir=/var/lib/mysql

[ndbd]
nodeid=14
hostname=192.168.0.14
datadir=/var/lib/mysql
EOF

image.png 在SQL节点上编辑MySQL Cluster配置文件:

cat > /etc/my.cnf << EOF
[mysqld]
ndbcluster
ndb-connectstring=192.168.0.10

user=mysql
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
EOF

image.png 在SQL节点上启动MySQL:

systemctl start mysqld
systemctl status mysqld

image.png 在SQL节点上登录MySQL并设置密码:

grep 'temporary password' /var/log/mysqld.log
mysql -uroot -p

image.png

ALTER USER 'root'@'localhost' IDENTIFIED BY 'PassWord8.0!';

image.png 在SQL节点上关闭MySQL,集群初始化时,重新启动:

systemctl stop mysqld

image.png 在数据节点上创建目录:

mkdir /var/lib/mysql

image.png 在数据节点上编辑MySQL Cluster配置文件:

cat > /etc/my.cnf << EOF
[mysql_cluster]
ndb-connectstring=192.168.0.10
EOF

image.png

1.2 MySQL Cluster初始化/启动

初始化/启动顺序:管理服务器->存储节点->SQL节点

在管理节点上初始化/启动管理节点:

ndb_mgmd -f /etc/mysql-cluster/config.ini --initial

--initial仅在初始化过程中使用

image.png 在数据节点上初始化/启动数据节点:

ndbd --initial

--initial仅在初始化过程中使用

image.png 在SQL节点上启动MySQL:

systemctl start mysqld
systemctl status mysqld

image.png 在管理节点上查看MySQL Cluster状态:

ndb_mgm -e show

image.png 在任意SQL节点上创建数据库和表:

CREATE DATABASE db;
CREATE TABLE db.tb  (
  id int NOT NULL,
  name varchar(255) NULL,
  PRIMARY KEY (id)
) ENGINE=ndb;

image.png 在任意SQL节点上插入数据:

INSERT INTO db.tb (id,name) VALUES (1,'MySQL');

image.png 在任意SQL节点上查看数据库、表和数据:

SHOW DATABASES;
DESCRIBE db.tb;
SELECT * FROM db.tb;

image.png

1.3 MySQL Cluster数据备份与恢复

MySQL Cluster数据备份:

在管理节点上备份数据:

ndb_mgm
start backup

image.png 在数据节点上查看备份文件:

ll /var/lib/mysql/BACKUP/BACKUP-1

image.png 在任意SQL节点上删除表:

DROP TABLE db.tb;

image.png  

MySQL Cluster数据恢复:

在管理节点上关闭管理和数据节点:

ndb_mgm
shutdown

image.png 在SQL节点上关闭MySQL:

systemctl stop mysqld

image.png 在管理节点上修改MySQL Cluster配置文件:

echo [mysqld] >> /etc/mysql-cluster/config.ini
echo [mysqld] >> /etc/mysql-cluster/config.ini

image.png 在管理节点上重新加载管理节点:

ndb_mgmd -f /etc/mysql-cluster/config.ini --reload

image.png 在数据节点上启动数据节点:

ndbd --initial

image.png 在SQL节点上启动MySQL:

systemctl start mysqld
systemctl status mysqld

image.png 在任意数据节点恢复表格式,此处数据节点ID为13:

ndb_restore -n13 -b1 -m -r --backup_path=/var/lib/mysql/BACKUP/BACKUP-1

image.png 在数据节点恢复数据,此处数据节点ID为13:

ndb_restore -n13 -b1 -r --backup_path=/var/lib/mysql/BACKUP/BACKUP-1

image.png 在数据节点恢复数据,此处数据节点ID为14:

ndb_restore -n14 -b1 -r --backup_path=/var/lib/mysql/BACKUP/BACKUP-1

image.png 在任意SQL节点上查看数据库、表和数据:

SHOW DATABASES;
DESCRIBE db.tb;
SELECT * FROM db.tb;

image.png 1.4 关闭MySQL Cluster

关闭顺序:SQL节点->管理节点

在SQL节点上关闭MySQL:

systemctl stop mysqld

image.png 在管理节点上关闭管理和数据节点:

ndb_mgm
shutdown

image.png

2、二进制方式安装MySQL Cluster

2.1 二进制方式安装MySQL Cluster

系统资源及组件规划:

节点名称****系统名称****CPU/ 内存****网卡****磁盘****IP 地址****OS
MGMTNodemaster2C/4Gens3364G192.168.0.10CentOS7
SQLNode1sqlnode12C/4Gens3364G192.168.0.11CentOS7
SQLNode2sqlnode22C/4Gens3364G192.168.0.12CentOS7
DATANode1datanode12C/4Gens3364G192.168.0.13CentOS7
DATANode2datanode22C/4Gens3364G192.168.0.14CentOS7

安装基本软件:

yum -y install vim lrzsz wget net-tools bash-completion

image.png 设置NTP:

yum -y install chrony

image.png

systemctl start chronyd
systemctl enable chronyd
systemctl status chronyd

image.png

chronyc sources

image.png 设置SELinux、防火墙:

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

image.png 在所有节点上下载并解压缩MySQL Cluster安装包:

下载地址:downloads.mysql.com/archives/cl…

tar -xf mysql-cluster-8.0.21-linux-glibc2.12-x86_64.tar.gz
mv mysql-cluster-8.0.21-linux-glibc2.12-x86_64 /usr/local/mysql

image.png 设置环境变量:

echo PATH=$PATH:/usr/local/mysql/bin/ >> /etc/profile
source /etc/profile

image.png 在管理节点上创建目录:

mkdir /usr/local/mysql/mysql-cluster

image.png 在管理节点上编辑MySQL Cluster配置文件:

cat > /usr/local/mysql/config.ini << EOF
[ndbd default]
noofreplicas=2

[ndb_mgmd]
nodeid=10
hostname=192.168.0.10
datadir=/usr/local/mysql/mysql-cluster

[mysqld]
nodeid=11
hostname=192.168.0.11

[mysqld]
nodeid=12
hostname=192.168.0.12

[ndbd]
nodeid=13
hostname=192.168.0.13
datadir=/usr/local/mysql/data

[ndbd]
nodeid=14
hostname=192.168.0.14
datadir=/usr/local/mysql/data
EOF

image.png 在SQL节点上创建MySQL用户和组:

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

image.png 在SQL节点上创建MySQL数据目录:

mkdir /usr/local/mysql/data
mkdir /usr/local/mysql/logs

image.png 在SQL节点上设置MySQL目录属主、属组及权限:

chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql/logs

image.png 在SQL节点上编辑MySQL Cluster配置文件:

cat > /etc/my.cnf << EOF
[mysqld]
ndbcluster
ndb-connectstring=192.168.0.10

user=mysql
symbolic-links=0
socket=/tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
pid-file=/usr/local/mysql/mysqld.pid
log-error=/usr/local/mysql/logs/mysqld.log
EOF

image.png 在SQL节点上初始化MySQL:

mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

image.png 在SQL节点上配置systemd管理MySQL:

cat > /usr/lib/systemd/system/mysqld.service << EOF

[Unit]

Description=MySQL Server

Documentation=man:mysqld
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF

image.png 在SQL节点上启动MySQL:

systemctl start mysqld
systemctl status mysqld

image.png 在SQL节点上登录MySQL并设置密码:

grep 'temporary password' /usr/local/mysql/logs/mysqld.log
mysql -u root -p

image.png

ALTER USER 'root'@'localhost' IDENTIFIED BY 'PassWord8.0!';

image.png

在SQL节点上关闭MySQL,集群初始化时,重新启动:

systemctl stop mysqld

image.png 在数据节点上创建目录:

mkdir /usr/local/mysql/data

image.png 在数据节点上编辑MySQL Cluster配置文件:

cat > /etc/my.cnf << EOF
[mysql_cluster]
ndb-connectstring=192.168.0.10
EOF

image.png

2.2 MySQL Cluster初始化/启动

初始化/启动顺序:管理服务器->存储节点->SQL节点

在管理节点上初始化/启动管理节点:

ndb_mgmd -f /usr/local/mysql/config.ini --initial

--initial仅在初始化过程中使用

image.png 在数据节点上初始化/启动数据节点:

ndbd --initial

--initial仅在初始化过程中使用

image.png 在SQL节点上启动MySQL:

systemctl start mysqld
systemctl status mysqld

image.png 在管理节点上查看MySQL Cluster状态:

ndb_mgm -e show

image.png 在任意SQL节点上创建数据库和表:

CREATE DATABASE db;
CREATE TABLE db.tb  (
  id int NOT NULL,
  name varchar(255) NULL,
  PRIMARY KEY (id)
) ENGINE=ndbcluster;

image.png 在任意SQL节点上插入数据:

INSERT INTO db.tb (id,name) VALUES (1,'MySQL');

image.png 在任意SQL节点上查看数据库、表和数据:

SHOW DATABASES;
DESCRIBE db.tb;
SELECT * FROM db.tb;

image.png

2.3 MySQL Cluster数据备份与恢复

MySQL Cluster数据备份:

在管理节点上备份数据:

ndb_mgm
start backup

image.png 在数据节点上查看备份文件:

ll /usr/local/mysql/data/BACKUP/BACKUP-1

image.png 在任意SQL节点上删除表:

DROP TABLE db.tb;

image.png MySQL Cluster数据恢复:

在管理节点上关闭管理和数据节点:

ndb_mgm
shutdown

image.png 在SQL节点上关闭MySQL:

systemctl stop mysqld

image.png 在管理节点上修改MySQL Cluster配置文件:

echo [mysqld] >> /usr/local/mysql/config.ini
echo [mysqld] >> /usr/local/mysql/config.ini

image.png 在管理节点上重新加载管理节点:

ndb_mgmd -f /usr/local/mysql/config.ini --reload

image.png 在数据节点上启动数据节点:

ndbd --initial

image.png 在SQL节点上启动MySQL:

systemctl start mysqld
systemctl status mysqld

image.png 在任意数据节点恢复表格式,此处数据节点ID为13:

ndb_restore -n13 -b1 -m -r --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1

image.png 在数据节点恢复数据,此处数据节点ID为13:

ndb_restore -n13 -b1 -r --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1

image.png 在数据节点恢复数据,此处数据节点ID为14:

ndb_restore -n14 -b1 -r --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1

image.png 在任意SQL节点上查看数据库、表和数据:

SHOW DATABASES;
DESCRIBE db.tb;
SELECT * FROM db.tb;

image.png

2.4 关闭MySQL Cluster

关闭顺序:SQL节点->管理节点

在SQL节点上关闭MySQL:

systemctl stop mysqld

image.png 在管理节点上关闭管理和数据节点:

ndb_mgm
shutdown

image.png