Mysql8 NDB集群二进制解压安装配置图解

声明与简介

本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。本文主要介绍mysql的NDB集群的配置及操作。

:1 当前的NDB SQL节点采用二进制的方式(免安装)安装在VVMware虚拟机内。

       2 当前虚拟机内mysql运行在Linux的Centos 8内,版本号是 8.0.23、端口号3306。

       3 host_128是管理节点、Host_131、host_132是SQL节点、Host_129、host_130 是数据节点

NDB官方介绍

  • NDBCLUSTER (又称NDB)是一个内存存储引擎具有高可用性和数据持久性的特征。
  • Management node: 管理节点在集群中担当管理角色。它主要提供配置数据节点、启动、关闭节点和备份等方面的功能。.
  • Data node: 数据节点担当存储角色。针对NoOfReplicas参数如果它为2,则会对应4个数据节点,通过数据的冗余(存储更多数据镜像)来达到可高用的目的。
  • SQL node: 通过SQL节点客户端可以访问集群数据,区别于传统mysql server,这里的存储引擎是NDBCLUSTER,即可该节点的启动方式里带了NDB集群参数。

NDB工作流程

MySQL NDB Cluster Workflow:

Mysql8 NDB集群二进制方式免安装配置图解_linux

SQL节点安装

下载mysql-cluster二进制包

下载mysql-cluster-8.0.23并传送到CentOS服务器内。当前执行环境是其中一个SQL节点host_132。

Mysql8 NDB集群二进制方式免安装配置图解_mysql_02

解压mysql-cluster二进制包

# 切换到二进制包的目录并解压
cd /root/softwares/mysql/mysqlcluster
tar –zxvf mysql-cluster-8.0.23-linux-glibc2.12-x86_64.tar.gz

Mysql8 NDB集群二进制方式免安装配置图解_数据_03

配置mysql环境变量

#为方便mysql相关命令的引用,配置环境变量
vi /etc/profile
#export MYSQL_CLUSTER_HOME=/root/softwares/mysql/mysqlcluster/mysql-cluster-8.0.23-linux-glibc2.12-x86_64
#${MYSQL_CLUSTER_HOME}/bin 为新增部分,原有的保留
#export PATH=${JAVA_HOME}/bin:$PATH:${KETTLE_HOME}:${MYSQL_CLUSTER_HOME}/bin

Mysql8 NDB集群二进制方式免安装配置图解_linux_04

初始化mysql

# 切换到mysql-cluster主目录初始化mysql
cd mysql-cluster-8.0.23-linux-glibc2.12-x86_64/bin
# mysqld --initialize --user=mysql
mysqld --initialize --user=mysql --datadir=/data/mysql/
#临时密码要么在控制台要么在/var/log/mysqld.log内

Mysql8 NDB集群二进制方式免安装配置图解_linux_05

修改配置文件

这里 /etc/my.cnf需要配置

#目录位置供参考,修改需根据自己实际情况。
basedir=/root/softwares/mysql/mysqlcluster/mysql-cluster-8.0.23-linux-glibc2.12-x86_64/

datadir=/data/mysql/

log-error=/var/log/mysqld.log

pid-file=/data/pid/mysqld/mysqld.pid

#basedir=<path-to-mysql-installation-directory>,即mysql二进制文件的解压目录、

其中datadir、log-error、pid-file三个文件夹mysql用户都得有权限。以pid-file参数为例:

#创建pid目录和文件并赋权于mysql用户
mkdir -p /data/pid/mysqld
chown mysql:mysql /data/pid/mysqld
chmod +755 /data/pid/mysqld

配置mysql服务

#配置成linux 服务
cp ../support-files/mysql.server /etc/init.d/mysqld
service mysqld start

配置libtinfo.so链接

#链接libtinfo.so.5
ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5

客户端修改初始密码

#客户端登入并修改初始密码
mysql –uroot -p 'xG1m:9lsw3V;'
alter user root@localhost identified by 'root1234';

:同理配置另外个SQL节点(即host_131)重复以上操作。

#SCP到其它SQL节点(当前演示环境指的是host_131),做以上类似操组。
scp -r mysql-cluster-8.0.23-linux-glibc2.12-x86_64 root@host_132:/root/softwares/mysql/mysqlcluster/

Data数据节点安装

拷贝数据节点命令

#Data 节点数据节点,每个data节点上都要执行以下操作。当前执行环境为sql节点的host_132。
scp -r ./ndbd root@host_129:/usr/local/bin/
scp -r ./ndbmtd root@host_129:/usr/local/bin/

Mysql8 NDB集群二进制方式免安装配置图解_linux_06

management 节点安装

拷贝管理节点命令

#拷贝管理节点命令,当前执行环境为host_132
scp -r ./ndb_mgm* root@host_128:/usr/local/bin/

Mysql8 NDB集群二进制方式免安装配置图解_mysql_07

配置NDB集群

配置SQL数据节点my.cnf

数据节点、SQL节点里的/etc/my.cnf里新增ndbcluser相关配置。这里的ndb-connectstring即对应管理节点IP即host_128。

ndbcluster

[mysql_cluster]

ndb-connectstring=192.168.111.128

如果数据节点无/etc/my.cnf,需要手动创建。该文件的权限见:

Mysql8 NDB集群二进制方式免安装配置图解_数据_08

配置management 节点

#创建配置NDB管理节点配置文件
mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
vi config.ini
#详细见下文

[ndbd default]

# Options affecting ndbd processes on all data nodes:

NoOfReplicas=1    # Number of fragment replicas

DataMemory=98M    # How much memory to allocate for data storage

[ndb_mgmd]

# Management process options:

HostName=192.168.111.128          # Hostname or IP address of management node

DataDir=/var/lib/mysql-cluster  # Directory for management node log files

[ndbd]

# Options for data node "A":

                                # (one [ndbd] section per data node)

HostName=192.168.111.129          # Hostname or IP address

NodeId=2                        # Node ID for this data node

DataDir=/data/mysql   # Directory for this data node's data files

[ndbd]

# Options for data node "B":

HostName=192.168.111.130          # Hostname or IP address

NodeId=3                        # Node ID for this data node

DataDir=/data/mysql   # Directory for this data node's data files

[mysqld]

# SQL node options:

HostName=192.168.111.131          # Hostname or IP address

                                # (additional mysqld connections can be

                                # specified for this node for various

                                # purposes such as running ndb_restore)

[mysqld]

# SQL node options:

HostName=192.168.111.132          # Hostname or IP address

配置libtinfo.so链接

#登入host_128管理节点,链接libtinfo.so.5
ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5

启动管理节点

启动管理节点

#启动管理节点host_128上启动管理进程
cd /usr/local/bin
./ndb_mgmd --initial -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
##查看管理节点相关进程已启动
ps aux|grep ndb_mgmd

Mysql8 NDB集群二进制方式免安装配置图解_数据库_09

启动数据节点

#host_129、host_130两数据节点上启动进程。
cd /usr/local/bin
./ndbd

Mysql8 NDB集群二进制方式免安装配置图解_linux_10

Mysql8 NDB集群二进制方式免安装配置图解_数据库_11

启动SQL 节点

#host_131、host_132两sql节点启动服务
service mysqld start

Mysql8 NDB集群二进制方式免安装配置图解_SQL_12

Mysql8 NDB集群二进制方式免安装配置图解_数据_13

管理节点查看状态

#host_128管理节点查看NDB集群状态
cd /usr/local/bin
./ndb_mgm;
Show;

Mysql8 NDB集群二进制方式免安装配置图解_数据_14

:这里因为防火墙的原因,集群的数据节点和SQL节点并未加入。

关闭管理节点数据节点防火墙

#关闭防火墙或考虑永久关闭
systemctl stop firewalld.service

关闭管理节点、数据节点的防火墙后再查看NDB集群的状态。

Mysql8 NDB集群二进制方式免安装配置图解_SQL_15

验证NDB集群

数据库同步

-- 在一个sql节点上创建数据库和表,在另外个sql节点上查看。比如这里在host_131上创建数据test_ndb,并在当前节点host_131上查询系统表。

CREATE DATABASE test_ndb CHARACTER SET utf8 COLLATE utf8_general_ci;
SELECT @@hostname,SCHEMA_NAME AS `Database` FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='test_ndb';

Mysql8 NDB集群二进制方式免安装配置图解_数据库_16

-- 在另外个sql节点host132上执行数据库系统表查询,可见元数据已同步。
SELECT @@hostname,SCHEMA_NAME AS `Database` FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='test_ndb';

Mysql8 NDB集群二进制方式免安装配置图解_linux_17

NDB引擎表

-- 在一个Sql节点Host_132上执行表创建和插入操作,当前表的存储引擎是NDB
CREATE TABLE `City_NDB` (
  `ID` int(11) NOT NULL auto_increment,
  `Name` char(35) NOT NULL default '',
  `CountryCode` char(3) NOT NULL default '',
  `District` char(20) NOT NULL default '',
  `Population` int(11) NOT NULL default '0',
  PRIMARY KEY  (`ID`)
) ENGINE=NDBCLUSTER DEFAULT CHARSET=utf8;

INSERT INTO `City_NDB ` VALUES (1,'Kabul','AFG','Kabol',1780000);
INSERT INTO `City_NDB M` VALUES (2,'Qandahar','AFG','Qandahar',237500);
INSERT INTO `City_NDB ` VALUES (3,'Herat','AFG','Herat',186800);
Use test_ndb;
-- 分别在两个SQL节点执行数据检索,会看到表数据会同步。
SELECT @@hostname,A.* FROM City_NDB A;

Mysql8 NDB集群二进制方式免安装配置图解_mysql_18

Mysql8 NDB集群二进制方式免安装配置图解_数据库_19

:表的引擎也可以通过修改的方式更新成NDBCLUSTER。如:

-- 修改表的存储引擎为NDBCLUSTER的示例
ALTER TABLE City ENGINE=NDBCLUSTER;

非NDB引擎表 

-- 仅在一个sql节点host_130上执行表创建,这里的引擎指定为MyISAM
CREATE TABLE `City_MyISAM` (
  `ID` int(11) NOT NULL auto_increment,
  `Name` char(35) NOT NULL default '',
  `CountryCode` char(3) NOT NULL default '',
  `District` char(20) NOT NULL default '',
  `Population` int(11) NOT NULL default '0',
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `City_MyISAM` VALUES (1,'Kabul','AFG','Kabol',1780000);
INSERT INTO `City_MyISAM` VALUES (2,'Qandahar','AFG','Qandahar',237500);
INSERT INTO `City_MyISAM` VALUES (3,'Herat','AFG','Herat',186800);

-- 分别在两个SQL节点执行数据检索
SELECT @@hostname,A.* FROM City_MyISAM A;

Host_131上执行结果: 

Mysql8 NDB集群二进制方式免安装配置图解_数据库_20

Host_132上执行则报错,因为非NDB引擎,表的元数据无法同步。

Mysql8 NDB集群二进制方式免安装配置图解_linux_21

节点故障

假设下线sql节点host_131,查看下集群状态,此时只有host_132可以访问。

#sql节点host_131上执行服务停止命令
service mysqld stop;

Mysql8 NDB集群二进制方式免安装配置图解_mysql_22

-- 另一sql节点host_132通过客户端访问
SELECT @@hostname,A.* FROM City_NDB A;

Mysql8 NDB集群二进制方式免安装配置图解_linux_23

 同理数据节点也有类似结论。

关闭集群

如果是shell环境则可以通过如下命令关闭

#关闭管理节点
ndb_mgm -e shutdown

如果已经进入ndb_mgm则输入shutdown即可。该命令会停止管理节点和数据节点的NDB的相关进程。而SQL节点则需要手动的可通过如下命令停止:

#关闭mysql 服务
mysqladmin shutdown 
#service mysqld stop

开启集群

#Step 1: 启动management管理节点(host_128)
cd /usr/local/bin
./ndb_mgmd --initial -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/

#Step 2: 启动data数据节点(host_129、host_130)
cd /usr/local/bin
./Ndbd

#启动sql节点(host_131、host_132)
mysqld_safe &
#service mysqld start