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.19
- MySQL节点(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节点执行命令 重启数据节点