MySQL NDB是一种高性能、高可靠性、可扩展的集群数据库,也称为MySQL Cluster。它是用于存储和操作大量数据的一种数据库引擎。MySQL NDB是一个完全分布式的数据库系统,它的所有数据和操作都是分布式进行的,可以有效地处理大规模数据的存储和查询。

MySQL NDB集群由多个节点组成,每个节点都是一个独立的MySQL服务器。节点之间互相通信,保证数据同步和负载均衡,使得整个集群能够高效地处理大并发量的请求。

MySQL NDB被广泛应用于需要高可用性、高可扩展性以及高性能的应用场景,如电信运营商、互联网公司、游戏公司等。 具体概念及架构介绍https://blog.csdn.net/nmmbwan/article/details/134625489?spm=1001.2014.3001.5502

1 服务器配置

管理节点(NDB-Mgm):172.16.10.19MySQL节点(NDB-Sql):172.16.10.22数据节点A NDB-Data1:172.16.10.23数据节点B(NDB-Data2):172.16.10.24

以下列表中给出了安装三种主要类型的 NDB Cluster 节点所需的组件: • 管理节点: management-server • 数据节点:data-node • SQL 节点:server、common、client

2 配置网络

修改debian的ip vi /etc/network/interfaces 修改ip地址

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface

auto lo

iface lo inet loopback

# The primary network interface

allow-hotplug ens192

iface ens192 inet static

address 172.16.10.22/24

gateway 172.16.10.1

# dns-* options are implemented by the resolvconf package, if installed

dns-nameservers 172.16.10.1

最后修改完成后重启网络systemctl restart networking.service

3 下载安装包

wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.2/mysql-cluster_8.2.0-1debian12_amd64.deb-bundle.tar

解压

tar xf mysql-cluster_8.2.0-1debian12_amd64.deb-bundle.tar

mysql-cluster_8.2.0-1debian12_amd64.deb-bundle.tar包含了所有节点组件的安装包,压缩包内文件如下

如果是其它系统直接访问https://dev.mysql.com/downloads/cluster/下载对应的版本即可

4 管理节点安装

要安装 NDB Cluster 管理服务器,只需安装management-server。将安装包 复制到管理节点的计算机,然后以系统 root 用户身份运行以下命令来安装它 ps.根据需要替换 显示的名称,并与 MySQL 网站下载的安装包 的名称相匹配,

dpkg -i mysql-cluster-community-management-server_8.2.0-1debian12_amd64.deb

将管理服务器 ndb_mgmd安装在 /usr/sbin目录中

5 sql节点安装

将server、common、client安装包复制到需要安装 NDB Cluster SQL 节点。用 root 用户身份执行以下命令来安装 server和common:

dpkg -i mysql-common_8.2.0-1debian12_amd64.deb

dpkg -i mysql-cluster-community-server_8.2.0-1debian12_amd64.deb

这将在目录中安装具有存储引擎支持的 MySQL 服务器二进制文件 ( mysqld ) 。它还安装所有需要的 MySQL 服务器支持文件和有用的 MySQL 服务器程序,包括 mysql.server和 mysqld_safe启动脚本(/usr/share/mysql和/usr/bin, respectively) 要管理 SQL 节点(MySQL 服务器),还应该安装client

dpkg -i mysql-cluster-community-client*

这会将mysql客户端和其他 MySQL 客户端程序(例如mysqladmin和 mysqldump )安装到/usr/bin 安装完成后使用如下命令查看当前版本

mysql --version

mysql Ver 8.2.0-cluster for Linux on x86_64 (MySQL Cluster Community Server - GPL)

6 安装datanode节点

数据节点只需安装 data-node ,将安装包复制到数据节点主机,并用 root 用户身份运行以下命令,并且在安装之前先安装前置依赖libclass-methodmaker-perl:

apt-get install libclass-methodmaker-perl

dpkg -i mysql-cluster-community-data-node_8.2.0-1debian12_amd64.deb

这会将ndbd和 ndbmtd数据节点二进制文件安装在 /usr/sbin. 其中任何一个都可用于在此主机上运行数据节点进程。

7 NDB Cluster 的初始配置

通过创建和编辑配置文件来手动配置已安装的 NDB Cluster。 对于我们的四节点、四主机 NDB Cluster(请参阅 集群节点和主机),需要编写四个配置文件,每个节点主机一个。

每个数据节点或 SQL 节点都需要一个 my.cnf文件,该文件提供两条信息:一个连接字符串,告诉节点在哪里找到管理节点;以及一行告诉该主机(托管数据节点的机器)上的 MySQL 服务器启用存储引擎NDBCLUSTER。 管理节点需要配置config.ini 文件,告诉它要维护多少个分片副本、为每个数据节点上的数据和索引分配多少内存、在哪里找到数据节点、将数据保存到每个数据节点上的磁盘上以及在哪里保存找到任何 SQL 节点。

7.1 配置数据节点和SQL节点

数据节点的配置文件my.cnf应位于该/etc目录中。(如果该文件不存在,则创建该文件。)例如:

vi /etc/my.cnf

然后添加如下内容:

[mysqld]

# Options for mysqld process:

ndbcluster # run NDB storage engine

[mysql_cluster]

# Options for NDB Cluster processes:

ndb-connectstring=172.16.10.19 # location of management server

输入上述信息后,保存该文件并退出文本编辑器。 然后创建目录

mkdir -p /usr/local/mysql/data

对托管数据节点1、数据节点2和 SQL 节点的都执行此操作 。

7.2 配置管理节点

配置管理节点的第一步是创建可以在其中找到配置文件的目录,然后创建文件本身。例如(运行为 root):

$> mkdir /var/lib/mysql-cluster

$> cd /var/lib/mysql-cluster

$> vi config.ini

添加如下内容:

[ndbd default]

# Options affecting ndbd processes on all data nodes:

NoOfReplicas=2 # Number of fragment replicas

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

[ndb_mgmd]

# Management process options:

HostName=172.16.10.19 # 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=172.16.10.23 # Hostname or IP address

NodeId=2 # Node ID for this data node

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

[ndbd]

# Options for data node "B":

HostName=172.16.10.24 # Hostname or IP address

NodeId=3 # Node ID for this data node

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

[mysqld]

# SQL node options:

HostName=172.16.10.22 # Hostname or IP address

# (additional mysqld connections can be

# specified for this node for various

# purposes such as running ndb_restore)

8 NDB Cluster 的初始启动

8.1 启动

配置完成后,启动集群。每个集群节点进程必须在其所在的主机上单独启动。应首先启动管理节点,然后是数据节点,最后是 SQL 节点:

8.1.1 管理节点启动

在管理主机上,输入以下命令来启动管理节点进程:

$> ndb_mgmd --initial -f /var/lib/mysql-cluster/config.ini

8.1.2 数据节点启动

在每个数据节点主机上,运行以下命令来启动 ndbd进程:

$> ndbd

集群现在应该可以运行。可以通过sql节点调用ndb_mgm管理节点客户端来测试是否正常启动。 在sql节点上执行ndb_mgm进入命令行执行show或者直接执行ndb_mgm -e show

SQL 节点在此处被引用为 ,这反映了mysqld进程充当 NDB Cluster API 节点的 [mysqld(API)]事。

8.2 初始密码

使用mysqld --initialize-insecure 服务器不会生成密码或将其标记为过期,并写入警告消息: [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option. 即可免密登录

8.3 设置远程访问

依次执行如下命令

mysql -u root -p

use mysql

SELECT user, host FROM mysql.user WHERE user='root';

update user set Host='%' where User='root'; #设置root远程访问

flush privileges;

现在即可使用mysql工具例如navicat远程连接数据库了

8.4使用数据库

在 NDB Cluster 中处理数据库表和数据与在标准 MySQL 中处理数据库表和数据没有太大区别。要注意两点:

对于要在集群中复制的表,它必须使用 NDBCLUSTER存储引擎。要指定这一点,请在创建表时 使用ENGINE=NDBCLUSTER或 选项:ENGINE=NDB

CREATE TABLE tbl_name (col_name column_definitions) ENGINE=NDBCLUSTER;

或者,对于使用不同存储引擎的现有表,使用ALTER TABLE 更改要使用的表 NDBCLUSTER:

ALTER TABLE tbl_name ENGINE=NDBCLUSTER;

navicat查看表使用引擎如下:

每个NDBCLUSTER表都有一个主键。如果用户在建表时没有定义主键,NDBCLUSTER 存储引擎会自动生成一个隐藏主键。这样的键与任何其他表索引一样占用空间。

8.5 查看表空间

在sql节点中执行如下命令:

all report memoryusage

9 日志

管理节点日志:/var/lib/mysql-cluster/ndb_1_cluster.log

数据节点日志:/usr/local/mysql/data/ndb_2_out.log /usr/local/mysql/data/ndb_3_out.log

10 关机

root@NDB-Sql:~# ndb_mgm -e shutdown

11问题及解决办法

11.1 初始化失败

2023-11-25T05:33:30.101040Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting. 2023-11-25T05:33:30.101070Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it. 2023-11-25T05:33:30.101132Z 0 [ERROR] [MY-010119] [Server] Aborting

在这种情况下,请删除或重命名数据目录,然后重试。 删除初始化目录再次进行初始化:

rm -rf /var/lib/mysql/*

你可以重新运行 --initialize 选项来初始化 MySQL 数据目录:

mysqld --initialize --datadir=/var/lib/mysql/

11.2 启动失败

查看systemctl status mysql查看mysql状态,报错如下:

x mysql.service - MySQL Cluster Community Server

Loaded: loaded (/lib/systemd/system/mysql.service; enabled; preset: enabled)

Active: failed (Result: exit-code) since Sat 2023-11-25 13:45:46 CST; 1min 7s ago

Duration: 2h 35min 59.122s

Docs: man:mysqld(8)

http://dev.mysql.com/doc/refman/en/using-systemd.html

Process: 45839 ExecStartPre=/usr/share/mysql-8.2/mysql-systemd-start pre (code=exited, status=0/SUCCESS)

Process: 45875 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)

Main PID: 45875 (code=exited, status=1/FAILURE)

Status: "Server shutdown complete (with return value = 1)"

Error: 13 (Permission denied)

CPU: 488ms

Nov 25 13:45:45 NDB-Sql systemd[1]: Starting mysql.service - MySQL Cluster Community Server...

Nov 25 13:45:46 NDB-Sql systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE

Nov 25 13:45:46 NDB-Sql systemd[1]: mysql.service: Failed with result 'exit-code'.

Nov 25 13:45:46 NDB-Sql systemd[1]: Failed to start mysql.service - MySQL Cluster Community Server.

修改文件夹访问权限

root@NDB-Sql:~# chown -R mysql:mysql /var/lib/mysql

11.3 修改配置文件后,怎么重新加载

先修改管理节点中配置文件 然后执行ndb_mgmd --reload -f /var/lib/mysql-cluster/config.ini

8.5.4 表空间数据要满了怎么扩容 如果data usage使用率过高就需要修改管理节点配置文件

vi /var/lib/mysql-cluster/ config.ini

11.4 表空间数据要满了怎么扩容

如果data usage使用率过高就需要修改管理节点配置文件

vi /var/lib/mysql-cluster/ config.ini

[ndbd default]

# Options affecting ndbd processes on all data nodes:

NoOfReplicas=2 # Number of fragment replicas

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

DataMemory=98M修改为更大值 然后重启整个集群,在sql节点上进入ndb_mgm命令行执行shutdown或者直接执行ndb_mgm -e shutdown 然后重新加载配置文件

ndb_mgmd --reload -f /var/lib/mysql-cluster/config.ini

在sql节点执行命令 重启数据节点

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。