MySQL8 NDB Cluster安装部署

1、NDB Cluster介绍

MySQL NDB Cluster 使用 MySQL 服务器和 NDB存储引擎,NDBCLUSTER (也称为NDB)是一种内存存储引擎,提供高可用性和数据持久性功能。NDB Cluster将MySQL服务器与NDB的内存集群存储引擎集成在一起。NDB集群由一组主机组成,每个主机运行一个或多个进程。这些被称为节点的进程可以包括MySQL服务器(用于访问NDB数据)、数据节点(用于存储数据)、一个或多个管理服务器。

(1)管理节点(Management node):此类节点的作用是管理 NDB Cluster 中的其他节点,执行提供配置数据、启动和停止节点以及运行备份等功能。因为这种节点类型管理其他节点的配置,所以应该首先启动这种类型的节点,然后再启动任何其他节点。使用命令ndb_mgmd启动管理节点

(2)数据节点(Data node):NDB Cluster的核心功能,用于保存数据、索引,控制事务。插入的数据按照主键的哈希值分散到不同的节点组里面保存(每个节点组保存部分数据),另外每个节点组内,数据会复制到不同的数据节点上以实现冗余

(3)SQL节点(SQL node):相当于增加了NDB存储引擎的MySQL服务器,数据节点作为NDB存储引擎使用,如果使用其它的MySQL存储引擎,例如InnoDB,MyISAM等,数据将会保存在SQL节点上;应用程序通过SQL节点访问数据节点,使用方法与通常的MySQL一样,SQL节点会自动找到正确的数据节点将数据找回

2、环境规划

节点类型

IP

主机名

占用端口

管理节点

172.16.80.56

mgr0

1186

数据节点

172.16.80.57

172.16.80.58

mgr1

mgr2

2202

SQL节点

172.16.80.59

mgr3

3306,33060

3、下载MySQL NDB Cluster

社区版MySQL :: Download MySQL Cluster

商业版https://edelivery.oracle.com/osdc/faces/SoftwareDelivery

选择glibc二进制安装包:

4、所有节点初始化

(1)卸载已存在的mysql客户端

rpm -qa|grep mysql

rpm -qa|grep mariadb

rpm -e *** 卸载

(2)创建mysql目录

lvcreate -L 300G -n lvmysql vgtest

mkfs.xfs /dev/vgtest/lvmysql

mount /dev/vgtest/lvmysql /mysql

(3)创建mysql用户和组

groupadd -g 512 mysql

useradd -u 512 -g 512 -d /mysql mysql

chown -R mysql.mysql /mysql

(4)解压glibc包到/mysql

su - mysql

cd /mysql

tar -xvf /soft/mysql-cluster-commercial-8.0.29-linux-glibc2.12-x86_64.tar.gz

mv mysql-cluster-commercial-8.0.29-linux-glibc2.12-x86_64 mysql-cluster-8.0.29

mkdir /mysql/data

(5)配置环境变量

vi /etc/profile

export MYSQL_CLUSTER_HOME=/mysql/mysql-cluster-8.0.29

export PATH="$PATH:${MYSQL_CLUSTER_HOME}/bin"

5、管理节点配置

(1)配置config.ini

cat /mysql/config.ini

[ndbd default]

# Options affecting ndbd processes on all data nodes:

NoOfReplicas=2 # Number of fragment replicas,指定了每一份数据被冗余存储在不同节点上面的份数,

#该参数一 般至少应该被设置成2,分段的数目为数据节点总数除以NoOfReplicas

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

BackupDataDir=/mysql/backup #数据节点备份目录

[ndb_mgmd]

# 管理节点:

HostName=172.16.80.56

DataDir=/mysql/data

[ndbd]

# 数据节点 "A":

HostName=172.16.80.57

NodeId=2

DataDir=/mysql/data

[ndbd]

# 数据节点 "B":

HostName=172.16.80.58

NodeId=3

DataDir=/mysql/data

[mysqld]

# SQL节点:

HostName=172.16.80.59

(2)配置my.cnf

cat /mysql/my.cnf

[mysqld]

# Options for mysqld process:

ndbcluster # run NDB storage engine

datadir=/mysql/data

basedir=/mysql/mysql-cluster-8.0.29

[mysql_cluster]

# Options for NDB Cluster processes:

ndb-connectstring=172.16.80.56 # location of management server

(3)初始化并启动管理节点

ndb_mgmd --defaults-file=/mysql/my.cnf --initial --config-file /mysql/config.ini --configdir=/mysql

(4)重启管理节点并查看集群状态

ndb_mgm

show

shutdown

exit

正常启动管理节点:

ndb_mgmd --defaults-file=/mysql/my.cnf --config-file /mysql/config.ini --configdir=/mysql

6、数据节点配置(两个数据节点均执行)

(1)配置my.cnf

cat /mysql/my.cnf

[mysql_cluster]

# Options for NDB Cluster processes:

ndb-connectstring=172.16.80.56 # location of management server

(2)启动两个ndbd数据节点

ndbd --defaults-file=/mysql/my.cnf

7、MySQL节点配置

(1)创建必要目录

su - mysql

mkdir -p /mysql/log

(2)创建my.cnf

cat /mysql/my.cnf

[mysqld]

# Options for mysqld process:

ndbcluster # run NDB storage engine

datadir=/mysql/data

basedir=/mysql/mysql-cluster-8.0.29

log-error=/mysql/log/mysqld.log

pid-file=/mysql/mysqld.pid

[mysql_cluster]

# Options for NDB Cluster processes:

ndb-connectstring=172.16.80.56 # location of management server

(3)创建/etc/my.cnf软链接

ln -s /mysql/my.cnf /etc/my.cnf

(4)创建mysqld服务并启动

cp /mysql/mysql-cluster-8.0.29/support-files/mysql.server /etc/init.d/mysqld

service mysqld status

service mysqld start

(5)重置root密码

查看临时密码/mysql/log/mysqld.log

mysql -uroot -p

alter user root@localhost identified by 'R00t_123';

exit

mysql -uroot -pR00t_123

show engines;

8、起停测试

停止顺序:

SQL节点-->数据节点-->管理节点

启动顺序:

管理节点-->数据节点-->SQL节点

停止命令:

service mysqld stop(SQL节点)

ndb_mgm -e shutdown(管理节点)

启动命令:

ndb_mgmd --defaults-file=/mysql/my.cnf --config-file /mysql/config.ini --configdir=/mysql(管理节点)

ndbd --defaults-file=/mysql/my.cnf (所有数据节点)

service mysqld start(SQL节点)

9、创建NDB表测试

(1)创建InnoDB表

create database ndb_test;

use ndb_test;

CREATE TABLE `test1` (

`id` int NOT NULL AUTO_INCREMENT,

`name` varchar(10),

PRIMARY KEY (`id`)

) ENGINE=InnoDB;

发现InnoDB表是被建在SQL节点上的

(2)创建ndb表

CREATE TABLE `test2` (

`id` int NOT NULL AUTO_INCREMENT,

`name` varchar(10) ,

PRIMARY KEY (`id`)

) ENGINE=ndbcluster/ndb;

(3)测试两种表的insert/select速度

DROP PROCEDURE IF EXISTS repeatCourse;

DELIMITER $

CREATE PROCEDURE repeatCourse()

BEGIN

DECLARE i INT DEFAULT 1;

WHILE i < 400000 DO

insert into ndb_test.test2 values(null,i);

SET i = i + 1;

END WHILE;

END $

DELIMITER ;

CALL repeatCourse();

似乎是ndb表的速度更快

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值