第22章MySQL NDB Cluster 8.0

目录

22.1 NDB群集概述
22.1.1 NDB集群核心概念
22.1.2 NDB群集节点,节点组,副本和分区
22.1.3 NDB群集硬件,软件和网络要求
22.1.4 NDB集群的新增功能
22.1.5 NDB 8.0中添加,弃用或删除的选项,变量和参数
22.1.6使用InnoDB的MySQL服务器与NDB集群的比较
22.1.7 NDB集群的已知限制
22.2 NDB群集安装
22.2.1 NDB群集自动安装程序
22.2.2在Linux上安装NDB集群
22.2.3在Windows上安装NDB集群
22.2.4 NDB集群的初始配置
22.2.5 NDB集群的初始启动
22.2.6带表和数据的NDB集群示例
22.2.7安全关闭和重启NDB集群
22.2.8升级和降级NDB集群
22.3 NDB集群的配置
22.3.1 NDB集群的快速测试设置
22.3.2 NDB集群配置参数,选项和变量概述
22.3.3 NDB群集配置文件
22.3.4与NDB集群使用高速互连
22.4 NDB群集程序
22.4.1 ndbd - NDB集群数据节点守护程序
22.4.2 ndbinfo_select_all - 从ndbinfo表中选择
22.4.3 ndbmtd - NDB簇数据节点守护进程(多线程)
22.4.4 ndb_mgmd - NDB群集管理服务器守护程序
22.4.5 ndb_mgm - NDB集群管理客户端
22.4.6 ndb_blob_tool - 检查并修复NDB集群表的BLOB和TEXT列
22.4.7 ndb_config - 提取NDB群集配置信息
22.4.8 ndb_delete_all - 从NDB表中删除所有行
22.4.9 ndb_desc - 描述NDB表
22.4.10 ndb_drop_index - 从NDB表中删除索引
22.4.11 ndb_drop_table - 删除NDB表
22.4.12 ndb_error_reporter - NDB错误报告实用程序
22.4.13 ndb_import - 将CSV数据导入NDB
22.4.14 ndb_index_stat - NDB索引统计工具
22.4.15 ndb_move_data - NDB数据复制实用程序
22.4.16 ndb_perror - 获取NDB错误消息信息
22.4.17 ndb_print_backup_file - 打印NDB备份文件内容
22.4.18 ndb_print_file - 打印NDB磁盘数据文件内容
22.4.19 ndb_print_frag_file - 打印NDB片段列表文件内容
22.4.20 ndb_print_schema_file - 打印NDB模式文件内容
22.4.21 ndb_print_sys_file - 打印NDB系统文件内容
22.4.22 ndb_redo_log_reader - 检查并打印群集重做日志的内容
22.4.23 ndb_restore - 恢复NDB群集备份
22.4.24 ndb_select_all - 从NDB表打印行
22.4.25 ndb_select_count - 打印NDB表的行计数
22.4.26 ndb_setup.py - 为NDB群集启动基于浏览器的自动安装程序
22.4.27 ndb_show_tables - 显示NDB表的列表
22.4.28 ndb_size.pl - NDBCLUSTER大小要求估算器
22.4.29 ndb_top - 查看NDB线程的CPU使用情况信息
22.4.30 ndb_waiter - 等待NDB群集到达给定状态
22.4.31 NDB群集程序常用选项 - NDB群集程序常用选项
22.5 NDB集群管理
22.5.1 NDB集群启动阶段摘要
22.5.2 NDB集群管理客户端中的命令
22.5.3 NDB集群的在线备份
22.5.4 NDB集群的MySQL服务器使用情况
22.5.5执行NDB集群的滚动重新启动
22.5.6在NDB集群中生成的事件报告
22.5.7 NDB集群日志消息
22.5.8 NDB集群单用户模式
22.5.9快速参考:NDB集群SQL语句
22.5.10 ndbinfo:NDB群集信息数据库
22.5.11 NDB集群的INFORMATION_SCHEMA表
22.5.12 NDB群集安全问题
22.5.13 NDB群集磁盘数据表
22.5.14在NDB集群中使用ALTER TABLE进行在线操作
22.5.15在线添加NDB集群数据节点
22.5.16分布式MySQL权限(不支持)
22.5.17 NDB API统计计数器和变量
22.6 NDB群集复制
22.6.1 NDB群集复制:缩写和符号
22.6.2 NDB群集复制的一般要求
22.6.3 NDB群集复制中的已知问题
22.6.4 NDB集群复制架构和表
22.6.5准备NDB群集以进行复制
22.6.6启动NDB集群复制(单一复制通道)
22.6.7使用两个复制通道进行NDB群集复制
22.6.8使用NDB群集复制实现故障转移
22.6.9使用NDB群集复制的NDB群集备份
22.6.10 NDB群集复制:多主机和循环复制
22.6.11 NDB群集复制冲突解决方案
22.7 NDB群集发行说明

MySQL NDB Cluster 是适用于分布式计算环境的高可用性,高冗余版本的MySQL。 最近的NDB Cluster版本系列使用版本8的 NDB 存储引擎(也称为 NDBCLUSTER )来支持在群集中运行带有MySQL服务器和其他软件的多台计算机。 NDB Cluster 8.0现已作为开发人员里程碑版本(DMR)从版本8.0.13开始提供,它包含了8.0版的 NDB 存储引擎。 NDB Cluster 7.6是当前的GA版本,使用7.6版本 NDB 以前的GA版本仍然可用于生产,NDB Cluster 7.5和NDB Cluster 7.4合并 NDB 版本分别为7.5和7.4。 使用 NDB 存储引擎 版本7.2的NDB Cluster 7.2 是以前仍在维护的GA版本; 7.2鼓励用户升级到NDB 7.5或NDB 7.6。 不再支持或维护NDB 7.1和以前的发行版系列

NDB Oracle构建的标准MySQL Server 8.0二进制文件中不包含 存储引擎的 支持 相反,来自Oracle的NDB Cluster二进制文件的用户应升级到支持平台的NDB Cluster的最新二进制版本 - 这些版本包括适用于大多数Linux发行版的RPM。 从源构建的NDB Cluster 8.0用户应使用为MySQL 8.0提供的源,并使用提供NDB支持所需的选项进行构建。 (可以获得源的位置将在本节后面列出。)

重要

MySQL NDB Cluster不支持InnoDB集群,必须使用带有 InnoDB 存储引擎的 MySQL Server 8.0 以及NDB集群分发中未包含的其他应用程序 进行部署 MySQL Server 8.0二进制文件不能与MySQL NDB Cluster一起使用。 有关部署和使用InnoDB集群的更多信息,请参阅 第21章, InnoDB集群 22.1.6节,“MySQL服务器使用的是InnoDB与NDB集群相比” ,论述之间的差异 NDB InnoDB 存储引擎。

本章包含有关通过8.0.17-ndb-8.0.17发布的NDB Cluster 8.0版本的信息,该版本目前作为开发人员预览版提供。 NDB Cluster 7.6是最新的通用可用性版本,建议用于新部署; 有关NDB Cluster 7.6的信息,请参阅 NDB Cluster 7.6中的新增功能 有关NDB Cluster 7.5的类似信息,请参阅 NDB Cluster 7.5中的新增功能 NDB Cluster 7.4和7.3是以前在生产中仍然支持的GA版本; 请参阅 MySQL NDB Cluster 7.3和NDB Cluster 7.4 NDB Cluster 7.2是之前的GA版本系列,仍然可以维护,但我们建议新的生产部署使用NDB Cluster 7.6。 有关NDB Cluster 7.2的更多信息,请参阅 MySQL NDB Cluster 7.2

支持的平台。  NDB Cluster目前可在许多平台上使用和支持。 有关操作系统版本,操作系统分发版和硬件平台的特定组合的可用支持级别,请参阅 https://www.mysql.com/support/supportedplatforms/cluster.html

可用性。  NDB Cluster二进制和源代码包可从 https://dev.mysql.com/downloads/cluster/ 获得支持的平台

NDB群集版本号。  NDB 8.0遵循与MySQL Server 8.0系列发行版相同的发布模式,从MySQL 8.0.13和MySQL NDB Cluster 8.0.13开始。 在本 手册 和其他MySQL文档中,我们使用以 NDB 开头的版本号标识这些以及后来的NDB Cluster版本 此版本号是 NDBCLUSTER NDB 8.0版本中使用 存储引擎的版本号,与NDB Cluster 8.0版本所基于的MySQL 8.0服务器版本相同。

NDB Cluster软件中使用的版本字符串。  MySQL NDB Cluster发行 提供 mysql 客户端 显示的版本字符串 使用以下格式:

mysql- mysql_server_version-cluster

mysql_server_version 表示NDB Cluster发行版所基于的MySQL Server的版本。 对于所有NDB簇8.0版本,这是 ,这里 是版本号。 从源代码构建 或使用等效项将 后缀 添加 到版本字符串。 (请参见 第22.2.2.4节“在Linux上从源代码构建NDB集群” 第22.2.3.2节“在Windows上从源代码编译和安装NDB集群” 。)您可以在 mysql 客户端中 看到此格式 ,如此处所示: 8.0.n n -DWITH_NDBCLUSTER -cluster

外壳> mysql
欢迎使用MySQL监视器。命令以;结尾; 或\ g。
您的MySQL连接ID是2
服务器版本:8.0.17-群集源分发

输入'help;' 或'\ h'寻求帮助。输入'\ c'清除缓冲区。

MySQL的> SELECT VERSION()\G
*************************** 1。排******************** *******
VERSION():8.0.17-cluster
1排(0.00秒)

使用MySQL 8.0的NDB Cluster的第一个版本是NDB 8.0.13,它使用MySQL 8.0.13。

其他NDB Cluster程序显示的版本字符串通常不包含在MySQL 8.0发行版中,使用以下格式:

mysql- mysql_server_versionndb-ndb_engine_version

mysql_server_version 表示NDB Cluster发行版所基于的MySQL Server的版本。 对于所有NDB簇8.0版本,这是 ,这里 是版本号。 此版本的NDB Cluster软件使用 存储引擎 的版本 对于所有NDB 8.0版本,此编号与MySQL Server版本相同。 您可以 ndb_mgm 客户端 中看到 命令 输出中使用的此格式 ,如下所示: 8.0.n n ndb_engine_version NDB SHOW

ndb_mgm> SHOW
连接到Management Server:localhost:1186
群集配置
---------------------
[ndbd(NDB)] 2个节点
id = 1 @ 10.0.10.6(mysql-8.0.18 ndb-8.0.17-ndb-8.0.17,Nodegroup:0,*)
id = 2 @ 10.0.10.8(mysql-8.0.18 ndb-8.0.17-ndb-8.0.17,Nodegroup:0)

[ndb_mgmd(MGM)] 1个节点
id = 3 @ 10.0.10.2(mysql-8.0.18 ndb-8.0.17-ndb-8.0.17)

[mysqld(API)] 2个节点
id = 4 @ 10.0.10.10(mysql-8.0.18 ndb-8.0.17-ndb-8.0.17)
id = 5(未连接,接受来自任何主机的连接)

与标准MySQL 8.0版本的兼容性。  虽然许多标准的MySQL模式和应用程序可以使用NDB Cluster,但使用NDB Cluster运行时,未修改的应用程序和数据库模式可能会略微不兼容或性能不佳(请参见 第22.1.7节“NDB集群的已知限制”) )。 大多数问题都可以克服,但这也意味着您不太可能切换现有的应用程序数据存储区 - 例如, MyISAM 或者 InnoDB - 使用 NDB 存储引擎而不允许更改模式的可能性,查询和应用程序。 没有编译 mysqld NDB 支持(即,没有 -DWITH_NDBCLUSTER_STORAGE_ENGINE 或它的别名 构建 -DWITH_NDBCLUSTER )不能作为 使用它构建 mysqld的 替代品

NDB Cluster开发源代码树。  也可以从 https://github.com/mysql/mysql-server 访问NDB Cluster开发树

维护在 https://github.com/mysql/mysql-server 的NDB Cluster开发源 是根据GPL许可的。 有关使用Git获取MySQL源代码并自行构建它们的信息,请参见 第2.9.3节“使用开发源代码树安装MySQL”

注意

与MySQL Server 8.0一样,NDB Cluster 8.0版本是使用 CMake 构建的

NDB Cluster 7.5和NDB Cluster 7.6可作为通用可用性(GA)版本提供; 建议将NDB 7.6用于新部署。 NDB Cluster 7.4和NDB Cluster 7.3是以前的GA版本,在生产中仍然受支持。 NDB 7.2是以前的GA版本系列,仍然保留; 不再建议用于新部署。 有关NDB 7.6中添加的主要功能的概述,请参阅 NDB Cluster 7.6中的新增功能 有关NDB Cluster 7.5的类似信息,请参阅 NDB Cluster 7.5中的新增功能 有关以前的NDB Cluster版本的信息,请参阅 MySQL NDB Cluster 7.3和NDB Cluster 7.4 以及 MySQL NDB Cluster 7.2

随着NDB Cluster不断发展,本章内容可能会进行修订。 有关NDB Cluster的更多信息,请访问MySQL网站 http://www.mysql.com/products/cluster/

其他资源。  有关NDB Cluster的更多信息,请访问以下位置:

22.1 NDB群集概述

NDB Cluster 是一种在无共享系统中实现内存数据库 集群 的技术。 无共享架构使系统能够使用非常便宜的硬件,并且对硬件或软件的特定要求最低。

NDB Cluster的设计不会出现任何单点故障。 在无共享系统中,每个组件都应具有自己的内存和磁盘,并且不建议或不支持使用共享存储机制,如网络共享,网络文件系统和SAN。

NDB Cluster将标准MySQL服务器与称为内存的集群存储引擎 NDB (代表 N etwork D ata B ase 集成在一起 在我们的文档中,该术语 NDB 指的是特定于存储引擎的设置部分,而 MySQL NDB Cluster 指的是一个或多个MySQL服务器与 NDB 存储引擎的组合。

NDB群集由一组称为 主机 的计算机组成 ,每台 计算机 运行一个或多个进程。 这些称为 节点的 过程 可以包括MySQL服务器(用于访问NDB数据),数据节点(用于存储数据),一个或多个管理服务器,以及可能的其他专用数据访问程序。 这里显示了NDB集群中这些组件的关系:

图22.1 NDB群集组件

In this cluster, three MySQL servers (mysqld program) are SQL nodes that provide access to four data nodes (ndbd program) that store data. The SQL nodes and data nodes are under the control of an NDB management server (ndb_mgmd program). Various clients and APIs can interact with the SQL nodes - the mysql client, the MySQL C API, PHP, Connector/J, and Connector/NET. Custom clients can also be created using the NDB API to interact with the data nodes or the NDB management server. The NDB management client (ndb_mgm program) interacts with the NDB management server.

所有这些程序共同构成一个NDB集群(参见 第22.4节“NDB集群程序” 。当数据由 NDB 存储引擎存储时,表(和表数据)存储在数据节点中。这些表可直接从集群中的所有其他MySQL服务器(SQL节点)。因此,在集群中存储数据的工资单应用程序中,如果一个应用程序更新了员工的工资,则查询此数据的所有其他MySQL服务器都可以立即看到此更改。

尽管NDB Cluster SQL节点使用 mysqld 服务器守护程序,但它在许多关键方面 与MySQL 8.0发行版提供 mysqld 二进制文件不同,并且两个版本的 mysqld 不可互换。

此外,未连接到NDB群集的MySQL服务器无法使用 NDB 存储引擎,也无法访问任何NDB群集数据。

存储在NDB Cluster的数据节点中的数据可以进行镜像; 群集可以处理单个数据节点的故障,而不会因为丢失事务状态而导致少量事务中止。 由于事务性应用程序需要处理事务失败,因此这不应成为问题的根源。

可以停止并重新启动各个节点,然后可以重新加入系统(群集)。 滚动重启(其中所有节点依次重新启动)用于进行配置更改和软件升级(请参见 第22.5.5节“执行NDB群集的滚动重新启动” )。 滚动重启也用作在线添加新数据节点的过程的一部分(请参见 第22.5.15节“在线添加NDB群集数据节点” )。 有关数据节点的详细信息,它们在NDB集群中的组织方式以及它们如何处理和存储NDB集群数据,请参见 第22.1.2节“NDB集群节点,节点组,副本和分区”

可以使用 NDB NDB群集管理客户端中的 -native 功能和 NDB群集分发中包含 ndb_restore 程序 来完成备份和还原NDB群集数据库 有关更多信息,请参见 第22.5.3节“NDB集群的在线备份” 第22.4.23节“ ndb_restore - 还原NDB集群备份” 您还可以在 mysqldump 和MySQL服务器中 使用为此目的提供的标准MySQL功能 有关 更多信息 请参见 第4.5.4节“ mysqldump - 数据库备份程序”

NDB Cluster节点可以采用不同的传输机制进行节点间通信; 在大多数实际部署中使用TCP / IP超过标准100 Mbps或更快的以太网硬件。

22.1.1 NDB集群核心概念

NDBCLUSTER (也称为 NDB )是一种内存存储引擎,提供高可用性和数据持久性功能。

NDBCLUSTER 存储引擎可以与一系列故障切换和负载平衡选项进行配置,但最简单的是开始在集群级别的存储引擎。 NDB Cluster的 NDB 存储引擎包含一整套数据,仅依赖于集群内部的其他数据。

NDB Cluster Cluster 部分是独立于MySQL服务器配置的。 在NDB群集中,群集的每个部分都被视为一个 节点

注意

在许多情况下,术语 节点 用于表示计算机,但在讨论NDB群集时,它意味着一个 过程 可以在一台计算机上运行多个节点; 对于运行一个或多个群集节点的计算机,我们使用术语 群集主机

有三种类型的集群节点,在最小的NDB集群配置中,将至少有三个节点,每种节点中的一种:

  • 管理节点 :此类 节点 的作用是管理NDB集群中的其他节点,执行诸如提供配置数据,启动和停止节点以及运行备份等功能。 由于此节点类型管理其他节点的配置,因此应首先在任何其他节点之前启动此类型的节点。 使用命令 ndb_mgmd 启动MGM节点

  • 数据节点 :此类节点存储群集数据。 存在与副本一样多的数据节点,乘以片段的数量(请参见 第22.1.2节“NDB群集节点,节点组,副本和分区” )。 例如,如果有两个副本,每个副本有两个片段,则需要四个数据节点。 一个副本足以用于数据存储,但不提供冗余; 因此,建议使用2个(或更多)副本来提供冗余,从而提供高可用性。 使用命令 ndbd 启动数据节点 (请参见 第22.4.1节“ ndbd - NDB集群数据节点守护程序” )或 ndbmtd (参见 22.4.3 节“ ndbmtd - NDB集群数据节点守护进程(多线程)” )。

    NDB Cluster表通常完全存储在内存中而不是磁盘上(这就是我们将NDB Cluster称为 内存 数据库的原因)。 但是,一些NDB Cluster数据可以存储在磁盘上; 有关更多信息 请参见 第22.5.13节“NDB集群磁盘数据表”

  • SQL节点 :这是一个访问集群数据的节点。 对于NDB Cluster,SQL节点是使用 NDBCLUSTER 存储引擎 的传统MySQL服务器 SQL节点是 使用 选项 启动 mysqld 进程 ,本章的其他地方对此进行了解释,可能还有其他MySQL服务器选项。 --ndbcluster --ndb-connectstring

    SQL节点实际上只是一种特殊类型的 API节点 ,它指定访问NDB集群数据的任何应用程序。 API节点的另一个示例 是用于还原群集备份 ndb_restore 实用程序。 可以使用NDB API编写此类应用程序。 有关NDB API的基本信息,请参阅NDB API 入门

重要

期望在生产环境中使用三节点设置是不现实的。 这种配置不提供冗余; 要从NDB Cluster的高可用性功能中受益,您必须使用多个数据和SQL节点。 强烈建议使用多个管理节点。

有关 NDB群集中节点,节点组,副本和分区 之间关系的简要介绍,请参见 第22.1.2节“NDB群集节点,节点组,副本和分区”

群集的配置涉及配置群集中的每个单独节点以及在节点之间设置各个通信链路。 NDB Cluster目前的设计目的是使数据节点在处理器功率,内存空间和带宽方面是同质的。 此外,为了提供单点配置,集群的所有配置数据作为一个整体位于一个配置文件中。

管理服务器管理群集配置文件和群集日志。 集群中的每个节点都从管理服务器检索配置数据,因此需要一种方法来确定管理服务器所在的位置。 当数据节点中发生有趣事件时,节点将有关这些事件的信息传输到管理服务器,然后管理服务器将信息写入集群日志。

此外,可以有任意数量的集群客户端进程或应用程序。 这些包括标准MySQL客户端, NDB 特定API程序和管理客户端。 这些将在接下来的几段中描述。

标准MySQL客户端。  NDB Cluster可以与用PHP,Perl,C,C ++,Java,Python,Ruby等编写的现有MySQL应用程序一起使用。 此类客户端应用程序将SQL语句发送到作为NDB Cluster SQL节点的MySQL服务器并从其接收响应,其方式与它们与独立MySQL服务器交互的方式非常相似。

可以修改使用NDB群集作为数据源的MySQL客户端,以利用与多个MySQL服务器连接的能力来实现负载平衡和故障转移。 例如,使用Connector / J 5.0.6及更高版本的Java客户端可以使用 jdbc:mysql:loadbalance:// URL(在Connector / J 5.1.7中进行了改进)来透明地实现负载平衡; 有关将Connector / J与NDB Cluster一起使用的更多信息,请参阅 将Connector / J与NDB Cluster一起使用

NDB客户端程序。  可以编写客户端程序 NDBCLUSTER ,使用 NDB API (高级C ++ API) 直接从 存储引擎 访问NDB Cluster数据 ,绕过可能连接到群集的任何MySQL服务器 此类应用程序可能对于不需要SQL数据接口的专用目的很有用。 有关更多信息,请参阅 NDB API

NDB 也可以使用 NDB Cluster Connector for Java 为NDB Cluster编写特定的Java应用程序 此NDB集群连接器包括 ClusterJ ,这是一种高级数据库API,类似于对象关系映射持久性框架,如Hibernate和JPA,它们直接连接 NDBCLUSTER ,因此不需要访问MySQL服务器。 NDB Cluster for ClusterJPA 也提供支持 ,一个利用ClusterJ和JDBC优势的NDB集群的OpenJPA实现; 使用ClusterJ(绕过MySQL服务器)执行ID查找和其他快速操作,而使用JDBC通过MySQL服务器发送可以从MySQL的查询优化器中受益的更复杂的查询。 有关 详细信息 请参阅 Java和NDB Cluster 以及 ClusterJ API和数据对象模型

NDB Cluster还支持使用Node.js用JavaScript编写的应用程序。 MySQL Connector for JavaScript包括用于直接访问 NDB 存储引擎和MySQL服务器的 适配器 使用此连接器的应用程序通常是事件驱动的,并且使用与ClusterJ采用的方式类似的域对象模型。 有关更多信息,请参阅 适用于JavaScript的MySQL NoSQL Connector

用于NDB群集的Memcache API,作为 memcached 1.6及更高版本 的可加载 ndbmemcache 存储引擎实现,可用于提供使用memcache协议访问的持久NDB群集数据存储。

标准的 memcached 缓存引擎包含在NDB Cluster 8.0发行版中。 每个 memcached 服务器都可以直接访问存储在NDB Cluster中的数据,但也能够在本地缓存数据并从本地缓存中提供(某些)请求。

有关更多信息,请参阅 NDB群集的ndbmemcache-Memcache API

管理客户。  这些客户端连接到管理服务器,并提供用于正常启动和停止节点,启动和停止消息跟踪(仅限调试版本),显示节点版本和状态,启动和停止备份等命令。 此类程序的一个示例是 随NDB Cluster提供 ndb_mgm 管理客户端(请参见 第22.4.5节“ ndb_mgm - NDB群集管理客户端” )。 可以使用 MGM API 编写此类应用程序, MGM API 是一种直接与一个或多个NDB Cluster管理服务器通信的C语言API。 有关更多信息,请参阅 MGM API

Oracle还提供了MySQL Cluster Manager,它提供了一个高级命令行界面,简化了许多复杂的NDB Cluster管理任务,例如重新启动具有大量节点的NDB Cluster。 MySQL Cluster Manager客户端还支持用于获取和设置大多数节点配置参数的值的命令,以及 与NDB Cluster相关的 mysqld 服务器选项和变量。 有关 更多信息, 请参阅“ MySQL™Cluster Manager 1.4.7用户手册”

事件日志。  NDB群集按类别(启动,关闭,错误,检查点等),优先级和严重性记录事件。 有关所有可报告事件的完整列表,请参见 第22.5.6节“在NDB群集中生成的事件报告” 事件日志属于此处列出的两种类型:

  • 群集日志 :记录整个群集的所有所需可报告事件。

  • 节点日志 :为每个单独节点保留的单独日志。

注意

在正常情况下,仅保留和检查群集日志是必要且充分的。 只需要为应用程序开发和调试目的查阅节点日志。

检查点。  一般来说,当数据保存到磁盘时,据说 已到达 检查点 更具体的是NDB Cluster,检查点是所有已提交事务存储在磁盘上的时间点。 关于 NDB 存储引擎,有两种类型的检查点一起工作以确保维持集群数据的一致视图。 这些显示在以下列表中:

  • 本地检查点(LCP) :这是一个特定于单个节点的检查点; 但是,LCP或多或少同时发生在集群中的所有节点上。 LCP通常每隔几分钟发生一次; 精确的间隔会有所不同,并取决于节点存储的数据量,群集活动的级别以及其他因素。

    NDB 8.0支持部分LCP,可以在某些条件下显着提高性能。 请参阅 启用部分LCP并控制其使用的存储量的配置 EnablePartialLcp RecoveryWork 配置参数 的说明

  • 全局检查点(GCP) :每隔几秒就会发生一次GCP,此时所有节点的事务都已同步,并且重做日志被刷新到磁盘。

有关本地检查点和全局检查点创建的文件和目录的详细信息,请参阅 NDB群集数据节点文件系统目录文件

22.1.2 NDB群集节点,节点组,副本和分区

本节讨论NDB群集分割和复制数据以进行存储的方式。

在接下来的几段中将讨论一些理解这一主题的核心概念。

数据节点。  一个 ndbd ndbmtd 进程,它存储一个或多个 副本 - 即 分配给该节点所属的节点组 分区 副本 (本节稍后讨论)。

每个数据节点应位于单独的计算机上。 虽然也可以在一台计算机上托管多个数据节点进程,但通常不建议这样的配置。

当引用 ndbd ndbmtd 进程 ,术语 节点 数据节点 通常可互换使用 ; 如上所述,管理节点( ndb_mgmd 进程)和SQL节点( mysqld 进程)在本讨论中如此指定。

节点组。  节点组由一个或多个节点组成,并存储分区或 副本 (请参阅下一项)。

NDB群集中的节点组数量不能直接配置; 它是数据节点数量和副本数量( NoOfReplicas 配置参数)的函数,如下所示:

[节点组数] = [数据节点数] / NoOfReplicas

因此,具有4个数据节点的NDB簇如果 NoOfReplicas config.ini 文件中 设置为1 则具有4个节点组 ,2个节点组if NoOfReplicas 设置为2,并且1个节点组if NoOfReplicas 设置为4.副本将在本节稍后讨论; 有关更多信息 NoOfReplicas ,请参见 第22.3.3.6节“定义NDB集群数据节点”

注意

NDB群集中的所有节点组必须具有相同数量的数据节点。

您可以在线将新节点组(以及新数据节点)添加到正在运行的NDB集群中; 有关更多信息 请参见 第22.5.15节“在线添加NDB集群数据节点”

划分。  这是群集存储的数据的一部分。 每个节点负责保留分配给它的任何分区的至少一个副本(即,至少一个副本)。

NDB Cluster默认使用的分区数取决于数据节点的数量和数据节点使用的LDM线程数,如下所示:

[分区数] = [数据节点数] * [LDM线程数]

使用运行 ndbmtd的 数据节点时 ,LDM线程的数量由设置控制 MaxNoOfExecutionThreads 使用 ndbd时 ,只有一个LDM线程,这意味着与参与集群的节点一样多的集群分区。 这也是使用时的情况下 ndbmtd MaxNoOfExecutionThreads 设置为3或更小。 (您应该知道LDM线程的数量随着此参数的值而增加,但不是严格线性的,并且在设置它时还有其他限制; MaxNoOfExecutionThreads 有关详细信息 ,请参阅说明 。)

NDB和用户定义的分区。  NDB群集通常会 NDBCLUSTER 自动 分区 表。 但是,也可以对表使用用户定义的分区 NDBCLUSTER 这受到以下限制:

  1. 生产中只 支持 KEY LINEAR KEY 分区方案 NDB

  2. 可以为任何 NDB 显式定义的最大分区数 ,NDB群集中的节点组数量正如本节前面所讨论的那样确定。 ndbd 用于数据节点进程时,设置 无效; 在这种情况下,为了执行该计算,可以将其视为等于1。 8 * MaxNoOfExecutionThreads * [number of node groups] MaxNoOfExecutionThreads

    有关更多信息 请参见 22.4.3 节“ ndbmtd - NDB集群数据节点守护程序(多线程)”

有关NDB集群和用户定义分区的更多信息,请参见 第22.1.7节“NDB集群的已知限制” 第23.6.2节“分区与存储引擎相关的限制”

复制品。  这是群集分区的副本。 节点组中的每个节点都存储一个副本。 有时也称为 分区副本 副本数等于每个节点组的节点数。

副本完全属于单个节点; 节点可以(通常会)存储多个副本。

下图说明了一个NDB集群,其中四个数据节点运行 ndbd ,分别安排在两个节点组中,每个节点包含两个节点; 节点1和2属于节点组0,节点3和4属于节点组1。

注意

这里只显示数据节点; 尽管有效的NDB群集需要 ndb_mgmd 进程进行群集管理,并且至少有一个SQL节点需要访问群集存储的数据,但为清楚起见,这些已从图中省略。

图22.2具有两个节点组的NDB群集

Content is described in the surrounding text.

群集存储的数据分为四个分区,编号为0,1,2和3.每个分区在同一节点组中存储多个副本。 分区存储在备用节点组中,如下所示:

  • 分区0存储在节点组0上; 一个 主副本 (主副本)被存储在节点1和一个 备份副本 (分区的备份副本)被存储在节点2上。

  • 分区1存储在另一个节点组(节点组1)上; 此分区的主副本位于节点3上,其备份副本位于节点4上。

  • 分区2存储在节点组0上。但是,它的两个副本的放置与分区0的放置相反; 对于分区2,主副本存储在节点2上,备份存储在节点1上。

  • 分区3存储在节点组1上,并且其两个副本的放置与分区1的位置相反。即,其主副本位于节点4上,备份在节点3上。

对于NDB集群的持续运行,这意味着:只要参与集群的每个节点组至少有一个节点运行,集群就拥有所有数据的完整副本并且仍然可行。 这将在下图中说明。

图22.3 2x2 NDB群集所需的节点

Content is described in the surrounding text.

在此示例中,群集由两个节点组组成,每个节点组由两个数据节点组成。 每个数据节点都运行 ndbd 的实例 来自节点组0的至少一个节点和来自节点组1的至少一个节点的任何组合足以使群集保持 活动 但是,如果来自单个节点组的两个节点都发生故障,则由另一个节点组中的其余两个节点组成的组合是不够的。 在这种情况下,群集已丢失整个分区,因此无法再提供对所有NDB群集数据的完整集合的访问。

单个NDB群集实例支持的最大节点组数为48。

22.1.3 NDB群集硬件,软件和网络要求

NDB Cluster的优势之一是它可以在商用硬件上运行,除了大量RAM之外,在这方面没有任何异常要求,因为所有实时数据存储都是在内存中完成的。 (可以使用磁盘数据表减少此要求 - 有关这些内容的更多信息, 请参见 第22.5.13节“NDB群集磁盘数据表” 。)当然,多个更快的CPU可以提高性能。 其他NDB Cluster进程的内存要求相对较小。

NDB Cluster的软件要求也不高。 主机操作系统不需要任何不寻常的模块,服务,应用程序或配置来支持NDB群集。 对于支持的操作系统,标准安装应该足够了。 MySQL软件要求很简单:所需要的只是NDB Cluster的生产版本。 仅仅为了能够使用NDB集群,自己编译MySQL并不是绝对必要的。 我们假设您使用的是适用于您平台的二进制文件,可从NDB Cluster软件下载页面获取, 网址 https://dev.mysql.com/downloads/cluster/

对于节点之间的通信,NDB Cluster支持任何标准拓扑中的TCP / IP网络,每个主机的最低预期值是标准的100 Mbps以太网卡,以及交换机,集线器或路由器,以便为整个集群提供网络连接。 我们强烈建议NDB群集在其自己的子网上运行,该子网不与不构成群集一部分的计算机共享,原因如下:

  • 安全。  NDB群集节点之间的通信不以任何方式加密或屏蔽。 保护NDB群集内传输的唯一方法是在受保护的网络上运行NDB群集。 如果您打算将NDB Cluster用于Web应用程序,则群集应该位于防火墙之后,而不是位于网络的 非军事 区( DMZ )或其他地方。

    有关 更多信息 请参见 第22.5.12.1节“NDB群集安全性和网络问题”

  • 效率。  在专用或受保护的网络上设置NDB群集使群集可以独占集群主机之间的带宽。 为NDB群集使用单独的交换机不仅有助于防止未经授权访问NDB群集数据,还可确保NDB群集节点免受网络上其他计算机之间传输的干扰。 为了提高可靠性,您可以使用双交换机和双卡将网络作为单点故障排除; 许多设备驱动程序支持此类通信链接的故障转移。

网络通信和延迟。  NDB Cluster需要数据节点和API节点(包括SQL节点)之间以及数据节点和其他数据节点之间的通信,以执行查询和更新。 这些进程之间的通信延迟可直接影响观察到的用户查询的性能和延迟。 此外,为了在节点无声故障的情况下保持一致性和服务,NDB Cluster使用心跳和超时机制,将来自节点的通信的延长丢失视为节点故障。 这可以减少冗余。 回想一下,为了保持数据一致性,当节点组中的最后一个节点发生故障时,NDB集群会关闭。 因此,为避免增加强制关机的风险,

数据或API节点的故障导致涉及故障节点的所有未提交事务的中止。 数据节点恢复需要在数据节点恢复服务之前,从幸存的数据节点同步故障节点的数据,并重新建立基于磁盘的重做和检查点日志。 此恢复可能需要一些时间,在此期间群集以减少的冗余运行。

心跳依赖于所有节点及时生成心跳信号。 如果节点过载,由于与其他程序共享导致机器CPU不足,或者由于交换而出现延迟,则可能无法执行此操作。 如果心跳生成被充分延迟,则其他节点会将响应缓慢的节点视为失败。

在某些情况下,将慢节点作为故障节点的这种处理可能是或可能不是合乎需要的,这取决于节点的慢速操作对集群其余部分的影响。 当设置超时值等 HeartbeatIntervalDbDb HeartbeatIntervalDbApi 对NDB集群,必须小心照顾,以实现快速检测,故障转移和恢复工作,同时避免潜在的昂贵误报。

如果预期数据节点之间的通信延迟高于LAN环境中预期的通信延迟(大约100μs),则必须增加超时参数以确保任何允许的延迟时段都在配置的超时内。 以这种方式增加超时对于检测故障的最坏情况时间以及因此服务恢复的时间具有相应的影响。

LAN环境通常可以配置稳定的低延迟,并且可以通过快速故障转移提供冗余。 可以从TCP级别可见的最小和受控延迟(NDB群集正常运行)中恢复单个链路故障。 WAN环境可能会提供一系列延迟,以及冗余和较慢的故障转移时间。 单个链路故障可能需要在端到端连接恢复之前传播路由更改。 在TCP级别,这可能表现为各个通道上的大延迟。 在这些情况下观察到的最坏情况的TCP延迟与IP层在故障周围重新路由的最坏情况时间有关。

22.1.4 NDB集群的新增功能

以下部分描述了与早期版本系列相比,MySQL NDB Cluster 8.0到8.0.17中NDB Cluster实现的更改。 NDB Cluster 8.0目前在Developer Preview版本中可用。 NDB Cluster 7.6作为通用可用性版本提供,NDB Cluster 7.5也是如此。有关NDB Cluster 7.6中的添加和其他更改的信息,请参阅 NDB Cluster 7.5中的新增功能 ; 有关NDB Cluster 7.5中的新功能和其他更改的信息,请参阅 NDB Cluster 7.6中的 新增功能

NDB Cluster 7.4和7.3是最新的通用版本,仍然受支持。 NDB Cluster 7.2是以前的GA版本,在现有部署的生产中仍然受支持。 生产中不再维护或支持NDB 7.1及更早版本系列 我们建议新部署使用NDB Cluster 7.6或NDB Cluster 7.5。 有关NDB 7.4和NDB 7.3的信息,请参阅 MySQL NDB Cluster 7.3和NDB Cluster 7.4 有关NDB 7.2和以前的NDB版本的信息,请参阅 MySQL NDB Cluster 7.2

NDB Cluster 8.0的新增功能

可能感兴趣的NDB Cluster 8.0中的主要更改和新功能显示在以下列表中:

  • INFORMATION_SCHEMA更改。  在表中显示有关磁盘数据文件的信息时进行了以下更改 INFORMATION_SCHEMA.FILES

    • 表空间和日志文件组不再在 FILES 表中 表示 (这些结构实际上不是文件。)

    • 现在,每个数据文件都由 FILES 表中的 一行表示 现在,每个撤消日志文件也仅在此表中以一行表示。 (以前,每个数据节点上的每个文件的每个副本都显示一行。)

    • 对于与数据文件或撤消日志文件对应的行,节点ID和撤消日志缓冲区信息不再显示在 EXTRA 列中 FILES

    此外, INFORMATION_SCHEMA 现在使用MySQL Cluster表的表空间统计信息填充表。 (缺陷#27167728)

  • ndb_perror的错误信息。  删除了 perror 的已弃用 --ndb 选项 使用 ndb_perror 错误代码中 获取错误消息信息 (Bug#81704,Bug#81705,Bug#23523926,Bug#23523957) NDB

  • 与MySQL服务器并行开发。  从此版本开始,MySQL NDB Cluster正在与标准MySQL 8.0服务器并行开发,具有以下功能的新统一版本模型:

    • NDB 8.0是在MySQL 8.0源代码树中开发,构建和发布的。

    • NDB Cluster 8.0版本的编号方案遵循MySQL 8.0的方案,从当前的MySQL版本(8.0.13)开始。

    • 使用NDB支持构建源会附加 -cluster mysql 返回的版本字符串 -V ,如下所示:

      shell» mysql -V
      适用于x86_64的Linux的mysql Ver 8.0.13-cluster(源代码分发)
      

      NDB二进制文件继续显示MySQL Server版本和NDB引擎版本,如下所示:

      外壳> ndb_mgm -V
      MySQL distrib mysql-8.0.13 ndb-8.0.13-dmr,适用于Linux(x86_64)
      

      在MySQL Cluster NDB 8.0中,这两个版本号始终相同。

    要使用NDB Cluster支持构建MySQL 8.0.13(或更高版本)源,请使用CMake选项 -DWITH_NDBCLUSTER

  • 离线多线程索引构建。  现在可以指定一组内核用于执行有序索引的脱机多线程构建的I / O线程,而不是正常的I / O任务,如文件I / O,压缩或解压缩。 此上下文中的 脱机 是指在未写入父表时执行的有序索引的构建; NDB 集群执行节点或系统重新启动时,或者作为使用 ndb_restore 从备份还原集群的一部分 时,会发生此类构建 --rebuild-indexes

    此外,还修改了脱机索引构建工作的默认行为,以使用 ndbmtd 可用的所有核心 ,而不是将其自身限制为为I / O线程保留的核心。 这样做可以改善重新启动和恢复时间以及性能,可用性和用户体验。

    此增强功能实现如下:

    1. 默认值 BuildIndexThreads 从0更改为128.这意味着默认情况下,脱机排序索引构建现在是多线程的。

    2. 默认值 TwoPassInitialNodeRestartCopy 从更改 false true 这意味着初始节点重新启动首先将所有数据从 活动 节点 复制 到正在启动的节点,而不创建任何索引 - 构建有序索引脱机,然后再次将其数据与活动节点同步,即同步两次,在两个同步之间离线构建索引。 这会导致初始节点重新启动的行为更像是节点的正常重启,并减少构建索引所需的时间。

    3. idxbld ThreadConfig 配置参数 定义了 新的线程类型( ,以允许将脱机索引构建线程锁定到特定的CPU。

    此外, NDB 现在 通过以下两个条件 区分 ThreadConfig 可访问的线程类型

    1. 线程是否是执行线程。 的类型的线 main ldm recv rep tc ,和 send 是执行线程; 线程类型 io watchdog idxbld 不是。

    2. 将线程分配给给定任务是永久性的还是临时性的。 目前所有线程类型除了 idxbld 是永久性的。

    有关其他信息,请参阅手册中参数的说明。 (Bug#25835748,Bug#26928111)

  • logbuffers表备份进程信息。  执行NDB备份时,该 ndbinfo.logbuffers 表现在显示有关每个数据节点上备份过程的缓冲区使用情况的信息。 这是作为行反映,除了两个新的日志类型 REDO DD-UNDO 其中一行具有日志类型 BACKUP-DATA ,该 类型 显示备份期间将片段复制到备份文件时使用的数据缓冲区数量。 另一行具有日志类型 BACKUP-LOG ,该 类型 显示备份期间用于记录备份开始后所做更改的日志缓冲区数量。 这些 log_type 行中的 每一 行都显示在 logbuffers 表中的每个数据节点。 仅当NDB备份当前正在进行时,具有这两种日志类型的行才会出现在表中。 (虫号#25822988)

  • Windows上的进程表。  Windows平台上 RESTART 用于生成和重新启动 mysqld 的监视器进程的进程ID 现在在 ndbinfo.processes 表中显示为 angel_pid

  • ODirectSyncFlag。  添加了 ODirectSyncFlag 数据节点 配置参数。 启用后,数据节点会将所有已完成的文件系统写入视为重做日志,就好像它们已使用执行一样 fsync

    注意

    如果满足下列条件中的至少一个条件,则此参数无效:

    • ODirect 未启用。

    • InitFragmentLogFiles 设置为 SPARSE

    (缺陷号25428560)

  • 数据节点日志缓冲区大小控制。  添加了 ndbd ndbmtd --logbuffer-size 选项 ,用于调试大量日志消息。 这可以控制数据节点日志缓冲区的大小; 默认(32K)用于正常操作。 (Bug#89679,Bug#27550943)

  • 字符串哈希改进。  在NDB 8.0之前,所有字符串散列都是基于首先将字符串转换为规范化形式,然后对生成的二进制映像进行MD5散列。 这可能会导致一些性能问题,原因如下:

    • 规范化的字符串始终以空格填充到其全长。 对于a VARCHAR ,这通常涉及添加比原始字符串中的字符更多的空格。

    • 字符串库未针对此空间填充进行优化,并且在某些用例中增加了相当大的开销。

    • 填充语义在字符集之间变化,其中一些字符集没有填充到它们的全长。

    • 即使没有空间填充,转换后的字符串也会变得非常大; 某些Unicode 9.0排序规则可以将单个代码点转换为100个字节或更多字符数据。

    • 随后的MD5散列主要由带空格的填充组成,并且不是特别有效,可能通过刷新L1高速缓存的重要部分而导致额外的性能损失。

    排序规则提供自己的哈希函数,直接对字符串进行哈希处理,而无需先创建规范化字符串。 此外,对于Unicode 9.0归类,散列是在没有填充的情况下计算的。 NDB 现在,只要对标识为使用Unicode 9.0排序规则的字符串进行散列,就可以利用此内置函数。

    因为,对于其他排序规则,现有的数据库在转换后的字符串上进行散列分区, NDB 继续使用前面的方法来散列使用这些字符串的字符串,以保持兼容性。 (Bug#89590,Bug#89604,Bug#89609,Bug#27515000,Bug#27523758,Bug#27522732)

    (也可以看看。)

  • 使用.frm文件即时升级表。  在NDB 7.6及更早版本中创建的表包含压缩 .frm 文件 形式的元数据 ,MySQL 8.0不再支持该文件。 为了便于在线升级到NDB 8.0, NDB 执行此元数据的即时转换并将其写入MySQL服务器的数据字典,这使得 NDB Cluster 8.0中 mysqld 能够与表一起使用,而不会阻止随后使用该表。以前的 NDB 软件 版本

    重要

    一旦在NDB 8.0中修改了表的结构,就会使用数据字典存储其元数据,并且NDB 7.6及更早版本无法再访问它。

    此增强功能还可以将 NDB 使用早期版本创建 备份 还原 到运行NDB 8.0(或更高版本)的群集。

  • 表空间对象的模式同步。  当MySQL服务器作为SQL节点连接到NDB集群时,它会将其数据字典与字典中的信息同步 NDB

    以前, NDB 在连接新SQL节点时同步 的唯一 对象是数据库和表; MySQL NDB Cluster 8.0.14及更高版本还实现了磁盘数据对象(包括表空间和日志文件组)的模式同步。 除了其他好处之外,这消除了在本 NDB 机备份和恢复之后 MySQL数据字典和 字典 之间不匹配的可能性 ,其中表空间和日志文件组被还原到 NDB 字典,而不是MySQL服务器的数据字典。

  • 处理mysqld选项文件中的NO_AUTO_CREATE_USER。  选项文件中 存在 选项 NO_AUTO_CREATE_USER sql_mode 阻止 mysqld 启动 时,现在会将错误写入服务器日志

  • 处理对不存在的表空间的引用。  不再可能发出 CREATE TABLE 引用不存在的表空间 语句。 这样的声明现在失败并出现错误。

  • 重置MASTER更改。  由于MySQL服务器现在 RESET MASTER 使用全局读锁 执行 ,因此与NDB Cluster一起使用时此语句的行为在以下两个方面发生了变化:

    • 它不再保证是同步的; 也就是说,现在可能 RESET MASTER 不会记录之前发出 的读取, 直到旋转二进制日志之后。

    • 无论语句是在写入二进制日志的同一SQL节点上发布,还是在同一集群中的不同SQL节点上发布,它现在的行为都相同。

    注意

    SHOW BINLOG EVENTS FLUSH LOGS 和大多数数据定义语句一样,在先前 NDB 版本中 继续,以 同步方式运行。

  • NDB表额外的元数据更改。  在NDB 8.0.14及更高版本中,表的额外元数据属性 NDB 用于存储来自MySQL数据字典的序列化元数据,而不是像先前版本一样存储表的二进制表示。 (这是一个 .frm 文件,MySQL服务器不再使用它 - 请参阅 第14章, MySQL数据字典 。)作为支持此更改的工作的一部分,表的额外元数据的可用大小已增加。 这意味着 NDB 在NDB Cluster 8.0.14及更高版本中创建的表与以前的NDB Cluster版本不兼容。 在先前版本中创建的表可以与NDB 8.0.14及更高版本一起使用,但之后的版本不能打开。

    有关更多信息,请参见 第22.2.8节“升级和降级NDB集群”

  • 磁盘数据文件分发。  从NDB Cluster 8.0.14开始, NDB 使用MySQL数据字典确保磁盘数据文件和相关结构(如表空间和日志文件组)在所有连接的SQL节点之间正确分布。

  • ndb_restore选项。  从NDB 8.0.16开始, 调用 ndb_restore 时都需要 --nodeid --backupid 选项

  • ndb_log_bin系统变量。  从NDB 8.0.16开始, ndb_log_bin 系统变量 的默认值 已从 TRUE to 更改 FALSE

  • NDB元数据更改检测。  NDB 8.0.16实现了一种新机制,用于使用MySQL数据字典检测数据对象(如表,表空间和日志文件组)的元数据更新。 这是使用线程( NDB 元数据更改监视器线程)完成的,该线程在后台运行并定期检查 NDB 字典和MySQL数据字典 之间的不一致

    默认情况下,监视器每60秒执行一次元数据检查。 轮询间隔可以通过设置 ndb_metadata_check_interval 系统变量 的值来调整 ; 通过将 ndb_metadata_check 系统变量 设置 为OFF, 可以完全禁用轮询 状态变量, Ndb_metadata_detected_count 显示自 mysqld 上次启动以来检测到不一致 的次数

  • 不再支持NDB 7.x分布式权限。  大多数 NDB 支持在连接到NDB集群的MySQL服务器之间分配特权的代码,如NDB 7.6及更早版本中所实现的(参见 NDB集群的分布式MySQL权限 )已被删除。 这是因为这样的特权表在NDB 8.0中无法正常运行,并且是MySQL服务器特权系统更改的结果(参见 第6.2.3节“授权表” )。

    保留使用 NDB 存储引擎并在先前版本中创建的 权限表是安全的,但不是必需的 ,但它们不再用于NDB Cluster 8.0中的访问控制。 在NDB 8.0.16及更高版本中,当一个 充当SQL节点 mysqld 检测到这样的表时 NDB ,它会向MySQL服务器日志写一个警告,并创建 InnoDB 自己的本地影子表; 在连接到NDB群集的每个MySQL服务器上创建此类影子表。 从NDB 7.6或更早版本执行升级时, NDB 可以使用 ndb_drop_table 安全地删除 权限表 一旦所有充当SQL节点的MySQL服务器都已升级。

    ndb_restore 实用程序的 --restore-privilege-tables 选项,继续NDB 8.0兑现,并且仍可以用于恢复存在于NDB簇的先前版本带到运行NDB 8.0集群备份分布式权限表。 这些表按照前一段中的描述进行处理。

    有关从以前的NDB Cluster版本升级到NDB 8.0的其他信息,请参见 第22.2.8节“升级和降级NDB群集”

  • 动态事务资源分配。  现在使用动态内存池执行 事务corrdinator中的资源分配(请参阅 DBTC块 )。 这意味着由数据节点的配置参数,例如确定资源分配 MaxDMLOperationsPerTransaction MaxNoOfConcurrentIndexOperations MaxNoOfConcurrentOperations MaxNoOfConcurrentScans MaxNoOfConcurrentTransactions MaxNoOfFiredTriggers MaxNoOfLocalScans ,和 TransactionBufferMemory 现在以这样的方式完成:如果由这些参数中的每一个表示的负载在所有这些资源的目标负载内,则可以限制这些资源中的其他资源以便不超过可用的总资源。

    作为此项工作的一部分,添加了几个控制 DBTC 此处列出的 事务资源的新数据节点参数

  • 每个数据节点使用多个LDM进行备份。  NDB 现在可以使用多个本地数据管理器(LDM)在各个数据节点上以并行方式执行备份。 (以前,备份是跨数据节点并行完成的,但在数据节点进程中始终是串行的。) ndb_mgm 客户端中 START BACKUP 命令 不需要特殊语法 来启用此功能,但所有数据节点都必须使用多个LDM。 这意味着数据节点必须运行 ndbmtd ndbd 是单线程的,因此总是只有一个LDM),并且它们必须配置为在进行备份之前使用多个LDM; 可以通过选择用于多线程数据节点的配置参数中的一个适当的设定为此 MaxNoOfExecutionThreads ThreadConfig

    使用多个LDM的备份在 目录 下创建子目录,每个LDM一个 ndb_restore 现在自动检测这些子目录,如果存在,则尝试并行恢复备份; 有关详细信息 请参见 第22.4.23.2节“从并行备份中恢复” (恢复单线程备份与以前版本相同 。)还可以 通过修改通常的恢复过程, 使用 先前版本的NDB Cluster中 ndb_restore 二进制文件 并行恢复备份 第22.4.23.2.2节“串行恢复并行备份” BACKUP/BACKUP-backup_id/ NDB ,提供有关如何执行此操作的信息。

  • 条件下推增强功能。  以前,条件下推仅限于谓词术语,这些术语指的是推送条件的同一个表中的列值。 在NDB 8.0.16中,删除了此限制,以便查询计划中较早的表中的列值也可以从推送条件中引用。

    按下条件的较大部分允许数据节点过滤掉更多行,从而减少 mysqld 在连接处理期间必须处理 的行数 这种增强的另一个好处是可以在LDM线程中并行执行过滤,而不是在SQL节点上的单个mysqld进程中执行; 这有可能显着提高查询性能。

    所比较的列值之间的类型兼容性的现有规则继续适用(参见 第8.2.1.4节“引擎条件下推优化” )。

  • ndb_mgm SHOW命令和单用户模式。  从NDB 8.0.17开始,当群集处于单用户模式时,管理客户端 SHOW 命令 的输出 指示在此模式生效时具有独占访问权限的API或SQL节点。

  • 架构分发增强功能。  NDB 处理模式操作并跟踪其进度 模式分发协调器已在NDB 8.0.17中进行了扩展,以确保在模式操作期间使用的资源在结束时被释放。 以前,这项工作的一部分是由架构分发客户端完成的; 这已经发生了变化,因为客户端并不总是拥有所有需要的状态信息,当客户端决定在完成之前放弃模式操作并且没有通知协调器时,这可能导致资源泄漏。

    为了帮助解决此问题,已将架构操作超时检测从架构分发客户端移至协调器,从而为协调器提供了清除架构操作期间使用的任何资源的机会。 协调器现在定期检查正在进行的模式操作是否超时,并在检测到超时时将尚未完成给定模式操作的参与者标记为失败。 每当发生模式操作超时时,它还会提供合适的警告。 (应该注意,在检测到这样的超时之后,模式操作本身继续。

    作为这项工作的另一部分,新的 mysqld 选项 --ndb-schema-dist-timeout 可以设置等待架构操作被标记为超时的时间长度。

22.1.5 NDB 8.0中添加,弃用或删除的选项,变量和参数

接下来的几节包含有关 NDB 配置参数和NDB特定的 mysqld 选项以及已在NDB 8.0中添加,弃用或删除的变量的信息。

节点配置参数在NDB 8.0中引入

NDB 8.0中添加了以下节点配置参数。

  • ReservedConcurrentIndexOperations :在一个数据节点上具有专用资源的同时索引操作的数量。 在NDB 8.0.16中添加。

  • ReservedConcurrentOperations :在一个数据节点上的事务协调器中具有专用资源的同时操作的数量。 在NDB 8.0.16中添加。

  • ReservedConcurrentScans :在一个数据节点上具有专用资源的同时扫描数。 在NDB 8.0.16中添加。

  • ReservedConcurrentTransactions :在一个数据节点上具有专用资源的同时事务的数量。 在NDB 8.0.16中添加。

  • ReservedFiredTriggers :在一个数据节点上具有专用资源的触发器数。 在NDB 8.0.16中添加。

  • ReservedLocalScans :在一个数据节点上具有专用资源的同时片段扫描的数量。 在NDB 8.0.16中添加。

  • ReservedTransactionBufferMemory :分配给每个数据节点的密钥和属性数据的动态缓冲区空间(以字节为单位)。 在NDB 8.0.16中添加。

节点配置参数在NDB 8.0中已弃用

NDB 8.0中未弃用任何节点配置参数。

NDB 8.0中删除了节点配置参数

没有从NDB 8.0中删除任何节点配置参数。

MySQL服务器选项和变量在NDB 8.0中引入

在NDB 8.0中添加了 以下 mysqld 系统变量,状态变量和选项。

  • Ndb_metadata_detected_count :NDB元数据更改监视器线程检测到更改的次数。 在NDB 8.0.16中添加。

  • ndb-schema-dist-timeout :在架构分发期间检测到超时之前等待多长时间。 在NDB 8.0.17中添加。

  • ndb_metadata_check :启用与MySQL数据字典相关的NDB元数据更改的自动检测; 默认启用。 在NDB 8.0.16中添加。

  • ndb_metadata_check_interval :以秒为单位的间隔,用于检查与MySQL数据字典相关的NDB元数据更改。 在NDB 8.0.16中添加。

  • ndbinfo :如果支持,启用ndbinfo插件。 在NDB 8.0.13中添加。

MySQL服务器选项和变量在NDB 8.0中不推荐使用

在NDB 8.0中,不推荐使用任何系统变量,状态变量或选项。

在NDB 8.0中删除了MySQL服务器选项和变量

没有从NDB 8.0中删除系统变量,状态变量或选项。

22.1.6使用InnoDB的MySQL服务器与NDB集群的比较

MySQL Server在存储引擎中提供了许多选择。 由于双方 NDB InnoDB 可以作为事务的MySQL存储引擎,MySQL服务器的用户有时会感兴趣的NDB集群。 他们认为 NDB 可以替代或升级到 InnoDB MySQL 8.0中 的默认 存储引擎。 虽然 NDB 并且 InnoDB 具有共同特征,但在体系结构和实现方面存在差异,因此一些现有的MySQL服务器应用程序和使用方案可以很好地适用于NDB Cluster,但不是所有这些都适用。

在本节中,我们将讨论和比较 NDB NDB 8.0 InnoDB 使用 存储引擎与 MySQL 8.0中 使用的 一些特性 接下来的几节提供了技术比较。 在许多情况下,必须根据具体情况决定何时何地使用NDB Cluster,并考虑所有因素。 虽然为每个可能的使用场景提供细节超出了本文档的范围,但我们还尝试提供一些关于一些常见类型的应用程序 NDB 相对于 InnoDB 后端 的相对适用性的非常一般的指导

NDB Cluster 8.0使用 基于MySQL 8.0 mysqld ,包括对 InnoDB 1.1的 支持 虽然可以将 InnoDB 表与NDB Cluster 一起使用 ,但这些表不是群集的。 也无法使用带有MySQL Server 8.0的NDB Cluster 8.0发行版中的程序或库,反之亦然。

虽然某些类型的常见业务应用程序也可以在NDB Cluster或MySQL Server上运行(最有可能使用 InnoDB 存储引擎),但是存在一些重要的架构和实现差异。 第22.1.6.1节“NDB和InnoDB存储引擎之间的差异” 提供了这些差异的摘要。 由于存在差异,一些使用场景显然更适合于一个引擎或另一个引擎; 请参见 第22.1.6.2节“NDB和InnoDB工作负载” 这反过来又对类型的应用,更好地适合用于有冲击 NDB InnoDB 请参见 第22.1.6.3节“NDB和InnoDB功能使用摘要” ,用于比较每种用于常见类型的数据库应用程序的相对适用性。

有关 存储引擎 NDB MEMORY 存储引擎 的相对特性的信息 ,请参阅 何时使用MEMORY或NDB群集

有关MySQL存储引擎的其他信息 请参见 第16章, 备用 存储引擎。

22.1.6.1 NDB和InnoDB存储引擎之间的差异

NDB 存储引擎采用分布式,无共享架构,这会导致它从行为不同的方式实现 InnoDB 在多种方式。 对于那些不习惯使用的人来说 NDB ,由于其在交易,外键,表格限制和其他特征方面的分布性,可能会出现意外行为。 这些如下表所示:

表22.1 InnoDB和NDB存储引擎之间的差异

特征 InnoDB (MySQL 8.0) NDB 8
MySQL服务器版 8 8
InnoDB InnoDB 8.0.18 InnoDB 8.0.18
NDB群集版本 N / A NDB 8.0.17 / 8.0.17
存储限制 64TB 128TB
外键
交易 所有标准类型 READ COMMITTED
MVCC 没有
数据压缩 否(可以压缩NDB检查点和备份文件)
大排支撑(> 14K) 支持 VARBINARY VARCHAR BLOB ,和 TEXT 支持 BLOB TEXT 列(使用这些类型存储大量数据可以降低NDB性能)
复制支持 使用MySQL Replication进行异步和半同步复制; MySQL 组复制 NDB集群内的自动同步复制; NDB群集之间的异步复制,使用MySQL Replication(不支持半同步复制)
读取操作的扩展 是(MySQL复制) 是(NDB群集中的自动分区; NDB群集复制)
写入操作的扩展 需要应用程序级分区(分片) 是(NDB群集中的自动分区对应用程序是透明的)
高可用性(HA) 内置,来自InnoDB集群 是(设计用于99.999%的正常运行时间)
节点故障恢复和故障转移 来自MySQL Group Replication 自动(NDB架构中的关键元素)
节点故障恢复的时间 30秒或更长时间 通常<1秒
实时性能 没有
内存表 没有 是(某些数据可以选择存储在磁盘上;内存和磁盘数据存储都是耐用的)
NoSQL访问存储引擎 是(多个API,包括Memcached,Node.js / JavaScript,Java,JPA,C ++和HTTP / REST)
并发和并行写入 最多48个写入器,针对并发写入进行了优化
冲突检测和解决方案(多个复制主机) 是(MySQL组复制)
哈希索引 没有
在线添加节点 使用MySQL Group Replication读/写副本 是(所有节点类型)
在线升级 是(使用复制)
在线架构修改 是的,作为MySQL 8.0的一部分

22.1.6.2 NDB和InnoDB工作负载

NDB Cluster具有一系列独特属性,非常适合为需要高可用性,快速故障转移,高吞吐量和低延迟的应用程序提供服务。 由于其分布式架构和多节点实现,NDB Cluster还具有特定约束,可能会使某些工作负载无法正常运行。 关于一些常见类型的数据库驱动的应用程序工作负载 NDB InnoDB 存储引擎 之间的行为存在许多主要差异, 如下表所示::

表22.2 InnoDB和NDB存储引擎之间的差异,数据驱动的应用程序工作负载的常见类型。

工作量 InnoDB NDB集群( NDB
大容量OLTP应用程序
DSS应用程序(数据集市,分析) 有限(跨OLTP数据集的连接操作,大小不超过3TB)
定制应用
打包应用程序 有限(应主要是主要密钥访问); NDB Cluster 8.0支持外键
网内电信应用(HLR,HSS,SDP) 没有
会话管理和缓存
电子商务应用程序
用户配置文件管理,AAA协议

22.1.6.3 NDB和InnoDB功能使用摘要

在将应用程序功能要求与使用功能进行比较 InnoDB NDB ,有些显然与一个存储引擎的兼容性要高于另一个存储引擎。

下表列出了根据每个功能通常更适合的存储引擎支持的应用程序功能。

表22.3根据每个功能通常更适合的存储引擎支持的应用程序功能

首选应用要求 InnoDB 首选应用要求 NDB
  • 外键

    注意

    NDB Cluster 8.0支持外键

  • 全表扫描

  • 非常大的数据库,行或事务

  • 除以外的交易 READ COMMITTED

  • 写缩放

  • 正常运行时间为99.999%

  • 在线添加节点和在线模式操作

  • 多个SQL和NoSQL API(请参阅 NDB集群API:概述和概念

  • 实时性能

  • BLOB 列的 使用有限

  • 支持外键,但它们的使用可能会对高吞吐量的性能产生影响


22.1.7 NDB集群的已知限制

在接下来的部分中,我们将讨论当前版本的NDB Cluster与使用 MyISAM InnoDB 存储引擎 时可用功能相比的已知限制 如果选中 群集 在MySQL的缺陷数据库类别 http://bugs.mysql.com ,你可以找到以下类别下的已知错误 MySQL服务器 : ” 在MySQL的缺陷数据库 的http://错误.mysql.com ,我们打算在即将发布的NDB Cluster版本中纠正:

  • NDB集群

  • Cluster Direct API(NDBAPI)

  • 群集磁盘数据

  • 群集复制

  • ClusterJ

该信息旨在完成所述条件。 您可以使用 第1.7节“如何报告错误或问题”中 给出的说明向MySQL错误数据库报告您遇到的任何差异 如果我们不打算在NDB Cluster 8.0中解决问题,我们会将其添加到列表中。

请参阅 NDB Cluster 7.3中已解决的先前NDB群集问题 ,以获取已在NDB Cluster 8.0中解决的早期版本中的问题列表。

注意

第22.6.3节“NDB群集复制中的已知问题” 中介绍了NDB群集复制特有的限制和其他问题

22.1.7.1 NDB群集中不符合SQL语法

某些与某些MySQL功能相关的SQL语句在与 NDB 表一起 使用时会产生错误 ,如以下列表中所述:

  • 临时表。  不支持临时表。 尝试创建使用 NDB 存储引擎 的临时表 或更改要使用的现有临时表 NDB 失败,错误 表存储引擎'ndbcluster'不支持创建选项'TEMPORARY'

  • NDB表中的索引和键。  NDB群集表上的键和索引受以下限制:

    • 列宽。  尝试在 NDB 宽度大于3072字节 表列 上创建索引 成功,但实际上只有前3072个字节用于索引。 在这种情况下,警告 指定密钥太长; 发出 最大密钥长度为3072字节 ,并且 SHOW CREATE TABLE 语句将索引的长度显示为3072。

    • TEXT和BLOB列。  您无法在 NDB 使用任何 TEXT BLOB 数据类型的 表列 上创建索引

    • FULLTEXT索引。  NDB 存储引擎不支持 FULLTEXT 索引,这是可能的 MyISAM InnoDB 唯一的表。

      但是,您可以在 VARCHAR 表的列上 创建索引 NDB

    • 使用HASH键和NULL。  在唯一键和主键中使用可空列意味着使用这些列的查询将作为全表扫描进行处理。 要解决此问题,请创建列 NOT NULL ,或重新创建没有 USING HASH 选项 的索引

    • 前缀。  没有前缀索引; 只能对整列进行索引。 NDB 列索引 的大小 始终与列的宽度相同,以字节为单位,最多包括3072字节,如本节前面所述。另请参见 第22.1.7.6节“NDB集群中不支持或缺少的功能” ,了解更多信息。)

    • BIT专栏。  BIT 列不能是一个主键,唯一键,或指数,也不能是复合主键,唯一键,或索引的一部分。

    • AUTO_INCREMENT列。  与其他MySQL存储引擎一样, NDB 存储引擎 AUTO_INCREMENT 每个表 最多可处理一 列。 但是,如果NDB表没有显式主键, AUTO_INCREMENT 则会自动定义 列并将其用作 隐藏 主键。 因此, AUTO_INCREMENT 除非使用该 PRIMARY KEY 选项 声明该列,否则 无法定义具有显式 的表 试图用一个表创建一个表 AUTO_INCREMENT 不是表的主键并使用 NDB 存储引擎的列失败并显示错误。

  • 外键限制。  NDB 8.0中对外键约束的支持与提供的内容相当 InnoDB ,但受以下限制:

    • 引用为外键的每一列都需要显式唯一键(如果它不是表的主键)。

    • ON UPDATE CASCADE 引用是父表的主键时不支持。

      这是因为主键的更新实现为删除旧行(包含旧主键)以及新行的插入(使用新主键)。 这对于 NDB 内核 是不可见的, 内核将这两行视为相同,因此无法知道此更新应该是级联的。

    • SET DEFAULT 不受支持。 (也不支持 InnoDB 。)

    • NO ACTION 关键字被接受,但作为治疗 RESTRICT (也和 InnoDB 一样 。)

    • 在早期版本的NDB Cluster中,当创建一个外键引用另一个表中的索引的表时,即使索引中列的顺序不匹配,有时也可能创建外键,这是因为内部并不总是返回适当的错误。 对此问题的部分修复改进了内部使用的错误,在大多数情况下都可以使用; 但是,如果父索引是唯一索引,则仍可能发生这种情况。 (缺陷号18094360)

    有关更多信息,请参见 第13.1.20.6节“使用FOREIGN KEY约束” 第1.8.3.2节“FOREIGN KEY约束”

  • NDB集群和几何数据类型。  支持 几何数据类型( WKT WKB NDB 但是,不支持空间索引。

  • 字符集和二进制日志文件。  目前, 使用 (ASCII)字符集 创建 ndb_apply_status ndb_binlog_index latin1 由于二进制日志的名称记录在此表中,因此在这些表中未正确引用使用非拉丁字符命名的二进制日志文件。 这是一个已知问题,我们正在努力解决这个问题。 (缺陷号码#50226)

    要解决此问题,命名二进制日志文件或设置任何时候只使用Latin-1字符 --basedir --log-bin --log-bin-index 选择。

  • 使用用户定义的分区创建NDB表。  NDB群集中对用户定义分区的支持仅限于[ LINEAR ] KEY 分区。 使用其他的分区类型用 ENGINE=NDB ENGINE=NDBCLUSTER CREATE TABLE 一个错误的语句的结果。

    可以覆盖此限制,但不支持在生产设置中使用此限制。 有关详细信息,请参阅 用户定义的分区和NDB存储引擎(NDB群集)

    默认分区方案。  默认情况下,所有NDB Cluster表都 KEY 使用表的主键作为分区键进行分区。 如果没有为表显式设置 主键, 则使用 存储引擎 自动创建 隐藏 主键 NDB 有关这些问题和相关问题的其他讨论,请参见 第23.2.5节“KEY分区”

    CREATE TABLE ALTER TABLE 不会导致用户分区 NDBCLUSTER 表不满足以下两个要求之一或两者的 语句 ,并且失败并显示错误:

    1. 该表必须具有显式主键。

    2. 表的分区表达式中列出的所有列都必须是主键的一部分。

    例外。  如果 NDBCLUSTER 使用空列列表(即使用 PARTITION BY [LINEAR] KEY() 创建 用户分区 ,则不需要显式主键。

    NDBCLUSTER表的最大分区数。  NDBCLUSTER 使用用户定义的分区时 可以为 表定义的最大分区数是每个节点组8个。 (有关 NDB群集节点组 的详细信息 请参见 第22.1.2节“NDB群集节点,节点组,副本和分区”)

    DROP PARTITION不受支持。  无法 NDB 使用表 表中 删除分区 ALTER TABLE ... DROP PARTITION 对于NDB表支持的 ALTER TABLE - ADD PARTITION REORGANIZE PARTITION COALESCE PARTITION - 的其他分区扩展 ,但是使用复制等都没有进行优化。 请参见 第23.3.1节“RANGE和LIST分区的管理” 第13.1.9节“ALTER TABLE语法”

  • 基于行的复制。  在NDB Cluster中使用基于行的复制时,无法禁用二进制日志记录。 也就是说, NDB 存储引擎忽略了它的值 sql_log_bin

  • JSON数据类型。  随NDB 8.0提供 mysqld中的 JSON 支持 MySQL 数据类型 NDB

    一个 NDB 表最多可以包含3 JSON 列。

    NDB API没有用于处理 JSON 数据的 特殊规定 ,它只是将 BLOB 数据 视为 数据。 处理数据 JSON 必须由应用程序执行。

22.1.7.2 NDB集群与标准MySQL限制的限制和差异

在本节中,我们列出了在NDB Cluster中找到的限制,这些限制要么与标准MySQL中找到的限制不同,要么在标准MySQL中找不到限制。

内存使用和恢复。  将数据插入 NDB 表中 时消耗的内存 在删除时不会自动恢复,与其他存储引擎一样。 相反,以下规则适用:

  • DELETE 上声明 NDB 表使得以前只在同一个表使用通过重新利用现有的已删除的行通过插入记忆。 但是,通过执行,可以使该存储器可用于一般的重复使用 OPTIMIZE TABLE

    滚动重新启动群集还可以释放已删除行使用的所有内存。 请参见 第22.5.5节“执行NDB集群的滚动重新启动”

  • DROP TABLE TRUNCATE TABLE 上的操作 NDB 表释放的是使用由该表用于通过任何再使用所述存储器 NDB 或者由同一个表或由另一个表, NDB 表中。

    注意

    回想一下, TRUNCATE TABLE 丢弃并重新创建表。 请参见 第13.1.37节“TRUNCATE TABLE语法”

  • 群集配置强加的限制。  存在许多可配置的硬限制,但集群中可用的主存储器设置了限制。 请参见 第22.3.3节“NDB集群配置文件” 中的配置参数的完整列表 大多数配置参数都可以在线升级。 这些硬限制包括:

  • 节点和数据对象的最大值。  以下限制适用于群集节点和元数据对象的数量:

    • 最大数据节点数为48。

      数据节点必须具有1到48(包括1和48)范围内的节点ID。 (管理和API节点可以使用1到255范围内的节点ID。)

    • NDB群集中的最大节点总数为255.此数字包括所有SQL节点(MySQL服务器),API节点(访问除MySQL服务器以外的群集的应用程序),数据节点和管理服务器。

    • 当前版本的NDB群集中的元数据对象的最大数量是20320.此限制是硬编码的。

    有关 详细信息, 请参阅 NDB Cluster 7.3中已解决的先前NDB群集问题

22.1.7.3 NDB集群中与事务处理相关的限制

在处理事务方面,NDB Cluster存在许多限制。 这些包括以下内容:

  • 事务隔离级别。  NDBCLUSTER 存储引擎只支持 READ COMMITTED 事务隔离级别。 InnoDB ,例如,支持 READ COMMITTED READ UNCOMMITTED REPEATABLE READ ,和 SERIALIZABLE 。)你应该记住, NDB 实现 READ COMMITTED 在每行的基础; 当读取请求到达存储该行的数据节点时,返回的是此时该行的最后提交的版本。

    永远不会返回未提交的数据,但是当修改多个行的事务与读取相同行的事务同时提交时,执行读取的事务可以观察到 之前 值, 之后 值或两者之间的不同行由于可以在提交另一个事务之前或之后处理给定行读取请求的事实。

    要确保给定事务仅在值之前或之后读取,可以使用强制执行行锁定 SELECT ... LOCK IN SHARE MODE 在这种情况下,锁定一直持续到拥有的事务被提交。 使用行锁还可能导致以下问题:

    • 锁定等待超时错误的频率增加,并发性降低

    • 由于读取需要提交阶段而增加了事务处理开销

    • 耗尽可用数量的并发锁定的可能性受限于 MaxNoOfConcurrentOperations

    NDB 使用 READ COMMITTED 用于所有读取,除非改性剂如 LOCK IN SHARE MODE FOR UPDATE 使用。 LOCK IN SHARE MODE 导致使用共享行锁; FOR UPDATE 导致使用独占行锁。 唯一的密钥读取会自动升级其锁定, NDB 以确保自我读取; BLOB 读取还使用额外锁定来保持一致性。

    有关 NDB Cluster实现事务隔离级别如何影响 数据库 备份和还原的信息 请参见 第22.5.3.4节“NDB集群备份故障排除” NDB

  • 事务和BLOB或TEXT列。  NDBCLUSTER 只存储使用MySQL 可见的表中 任何MySQL BLOB TEXT 数据类型 的列值的一部分 ; 其余部分 BLOB TEXT 存储在MySQL无法访问的单独内部表中。 这会产生两个相关的问题,每当 SELECT 在包含这些类型的列的表上 执行 语句 时,您应该注意 这些问题:

    1. 对于 SELECT 来自NDB Cluster表的 任何 表:如果 SELECT 包含a BLOB TEXT 列,则 READ COMMITTED 事务隔离级别将转换为具有读锁定的读取。 这样做是为了保证一致性。

    2. 对于 SELECT 使用唯一键查找来检索任何使用任何 BLOB TEXT 数据类型并在事务中执行的 列的任何列, 在事务持续时间内,表上会保留共享读锁,即直到事务已提交或已中止。

      对于使用索引或表扫描的查询,即使对于 NDB 具有 BLOB TEXT 列的 表, 也不会发生此问题

      例如,考虑 t 以下 CREATE TABLE 语句 定义 的表

      CREATE TABLE t(
          INT NOT NOT AUTO_INCREMENT PRIMARY KEY,
          b INT NOT NULL,
          c INT NOT NULL,
          d TEXT,
          INDEX i(b),
          独特的钥匙u(c)
      )ENGINE = NDB,
      

      以下任一查询 t 都会导致共享读锁定,因为第一个查询使用主键查找而第二个查询使用唯一键查找:

      SELECT * FROM t WHERE a = 1;
      
      SELECT * FROM t WHERE c = 1;
      

      但是,此处显示的四个查询都不会导致共享读锁:

      SELECT * FROM t WHERE b = 1;
      
      SELECT * FROM t WHERE d ='1';
      
      SELECT * FROM t;
      
      SELECT b,c WHERE a = 1;
      

      这是因为,在这四个查询中,第一个使用索引扫描,第二个和第三个使用表扫描,第四个使用主键查找时,不检索任何 BLOB TEXT 的值

      通过避免使用检索 BLOB TEXT 列的 唯一键查找的查询 ,或者在无法避免此类查询的情况下,通过尽快提交事务, 可以帮助最大限度地减少共享读锁的问题

  • 回滚。  没有部分事务,也没有部分事务回滚。 重复键或类似错误会导致整个事务回滚。

    此行为与其他事务存储引擎的行为不同,例如 InnoDB 可能会回滚单个语句。

  • 事务和内存使用情况。  如本章其他部分所述,NDB Cluster不能很好地处理大型事务; 最好是执行一些只有少量操作的小事务,而不是尝试包含大量操作的单个大事务。 除其他考虑因素外,大型事务需要非常大量的内存。 因此,许多MySQL语句的事务行为会受到影响,如下面的列表所述:

    • TRUNCATE TABLE NDB 表上 使用时不是事务性的 如果a TRUNCATE TABLE 无法清空表,则必须重新运行该表才能成功。

    • DELETE FROM (即使没有 WHERE 条款) 交易性的。 对于包含大量行的表,你会发现性能得到了几种改进的 DELETE FROM ... LIMIT ... 语句 的删除操作。 如果您的目标是清空表格,那么您可能希望改为使用 TRUNCATE TABLE

    • LOAD DATA语句。  LOAD DATA NDB 表上 使用时不是事务性的

      重要

      执行 LOAD DATA 语句时, NDB 引擎会以不规则的间隔执行提交,以便更好地利用通信网络。 提交此类提交时,无法提前知道。

    • ALTER TABLE和事务。  复制 NDB 表作为a的一部分时 ALTER TABLE ,副本的创建是非事务性的。 (在任何情况下,删除副本时都会回滚此操作。)

  • 事务和COUNT()函数。  使用NDB群集复制时,无法保证 COUNT() 从站上的功能 的事务一致性 换句话说,当在主服务器上执行一系列 更改单个事务中的表中行数 的语句( INSERT DELETE 或两者)时, 对从服务器 执行 查询可能会产生中间结果。 这是因为 可能执行脏读操作,并且不是 存储引擎中 的错误 (有关更多信息,请参阅Bug#31321。) SELECT COUNT(*) FROM table SELECT COUNT(...) NDB

22.1.7.4 NDB集群错误处理

启动,停止或重新启动节点可能会导致临时错误,从而导致某些事务失败。 这些包括以下情况:

  • 暂时的错误。  首次启动节点时,您可能会看到错误1204 临时故障,分发已更改 以及类似的临时错误。

  • 节点故障导致的错误。  任何数据节点的停止或失败都可能导致许多不同的节点故障错误。 (但是,在执行计划的群集关闭时,应该没有中止的事务。)

在任何一种情况下,必须在应用程序中处理生成的任何错误。 这应该通过重试事务来完成。

另请参见 第22.1.7.2节“NDB群集与标准MySQL限制的限制和差异”

22.1.7.5与NDB集群中的数据库对象关联的限制

使用 NDBCLUSTER 存储引擎 时,某些数据库对象(如表和索引)具有不同的限制

  • 数据库和表名。  使用 NDB 存储引擎时,数据库名称和表名称的最大允许长度为63个字符。 使用长度超过此限制的数据库名称或表名称的语句将失败并显示相应的错误。

  • 数据库对象的数量。  单个NDB群集(包括数据库,表和索引) 所有 NDB 数据库对象 的最大数量 限制为20320。

  • 每个表的属性。  可以属于给定表的最大属性数(即列和索引)为512。

  • 每个键的属性。  每个键的最大属性数为32。

  • 行大小。  任何一行的最大允许大小为14000字节。 每个 BLOB TEXT 列贡献256 + 8 = 264个字节。

    另外, NDB 的固定宽度列的最大偏移量 是8188字节; 尝试创建违反此限制的表失败,出现NDB错误851 超出固定大小列的最大偏移量 对于基于内存的列,您可以通过使用可变宽度列类型(例如 VARCHAR 将列定义 为)来解决此限制 COLUMN_FORMAT=DYNAMIC ; 这不适用于存储在磁盘上的列。 对于基于磁盘的列,您可以通过重新排序一个或多个表的基于磁盘的列来实现此目的,以便除了最后定义的基于磁盘的列之外的所有列的组合宽度。 CREATE TABLE 用于创建表的语句不超过8188个字节,减去对某些数据类型执行的任何可能的舍入,例如 CHAR VARCHAR ; 否则,有必要为一个或多个违规列或列使用基于内存的存储。

  • 每个表的BIT列存储。  BIT 给定 NDB 表中 使用的 所有 的最大组合宽度为 4096。

  • 固定列存储。  NDB Cluster 8.0支持 FIXED 列中 每个数据片段最多128 TB

22.1.7.6 NDB群集中不支持或缺少的功能

NDB 不支持其他存储引擎支持的许多功能 尝试在NDB群集中使用这些功能中的任何一个都不会导致错误; 但是,在期望支持或强制执行功能的应用程序中可能会发生错误。 引用这些特征的语句,即使被有效忽略 NDB ,也必须在语法上和其他方面都有效。

  • 索引前缀。  NDB 不支持索引的前缀 如果前缀是在声明用作索引规范的一部分,例如 CREATE TABLE ALTER TABLE ,或 CREATE INDEX ,不被创建的前缀 NDB

    包含索引前缀以及创建或修改 NDB 的语句 仍必须在语法上有效。 例如,以下语句始终失败,错误1089 错误的前缀键; 使用的关键部分不是字符串,使用的长度比关键部分长,或者存储引擎不支持唯一的前缀键 ,无论存储引擎如何:

    CREATE TABLE t1(
        c1 INT NOT NULL,
        c2 VARCHAR(100),
        INDEX i1(c2(500)) 
    );

    这是因为SQL语法规则没有索引可能具有大于其自身的前缀。

  • 保存点和回滚。  保存点和回滚到保存点将被忽略,如 MyISAM

  • 提交的持久性。  磁盘上没有持久提交。 提交已复制,但无法保证在提交时将日志刷新到磁盘。

  • 复制。  不支持基于语句的复制。 设置群集复制时 使用 --binlog-format=ROW (或 --binlog-format=MIXED )。 有关 更多信息 请参见 第22.6节“NDB群集复制”

    使用全局事务标识符(GTID)的复制与NDB Cluster不兼容,并且在NDB Cluster 8.0中不受支持。 使用 NDB 存储引擎 时不要启用GTID ,因为这很可能会导致问题,包括NDB群集复制失败。

    NDB群集不支持半同步复制。

  • 生成的列。  NDB 存储引擎不支持虚拟生成列的索引。

    与其他存储引擎一样,您可以在存储的生成列上创建索引,但是您应该记住 NDB 使用 DataMemory 存储生成的列以及 IndexMemory 索引。 有关 示例, 请参阅 NDB群集中的JSON列和间接索引

    NDB群集将存储的生成列中的更改写入二进制日志,但不记录对虚拟列的更改。 这不应影响NDB群集复制或 NDB 其他MySQL存储引擎 之间的复制

注意

有关事务处理 限制的更多信息 请参见 第22.1.7.3节“与NDB集群中的事务处理 相关的限制” NDB

22.1.7.7与NDB集群中的性能相关的限制

以下性能问题在NDB群集中特定或特别明显:

  • 范围扫描。  由于对 NDB 存储引擎的 顺序访问,存在查询性能问题 ; 与其中任何一个 MyISAM 多个扫描相比,进行多次扫描也相对更昂贵 InnoDB

  • 范围内记录的可靠性。  Records in range 统计是有的,但没有完全测试或正式支持。 在某些情况下,这可能会导致非最佳查询计划。 如有必要,您可以使用 USE INDEX FORCE INDEX 更改执行计划。 有关 如何执行此操作的详细信息 请参见 第8.9.4节“索引提示”

  • 唯一的哈希索引。  USING HASH 如果 NULL 作为密钥的一部分给出, 则使用 创建的唯一哈希索引 不能用于访问表

22.1.7.8 NDB集群专有的问题

以下是 NDB 存储引擎 特有的限制

  • 机器架构。  群集中使用的所有计算机必须具有相同的体系结构。 也就是说,托管节点的所有计算机必须是big-endian或little-endian,并且不能同时使用两者。 例如,您不能在PowerPC上运行管理节点,该节点指示在x86计算机上运行的数据节点。 此限制不适用于仅运行 mysql 或可能正在访问群集的SQL节点的其他客户端的 计算机

  • 二进制日志。  NDB Cluster在二进制日志记录方面具有以下限制或限制:

  • 任何数据节点重新启动时都会拒绝架构操作(DDL语句)。

  • 副本数量。  NoOfReplicas 数据节点配置参数 确定的副本 数是NDB Cluster存储的所有数据的副本数。 将此参数设置为1表示只有一个副本; 在这种情况下,不提供冗余,并且数据节点的丢失导致数据丢失。 为了保证冗余,即使数据节点出现故障也能保存数据,请将此参数设置为2,这是生产中的默认值和建议值。

    可以设置 NoOfReplicas 为大于2的值(最多为4),但不必防止数据丢失。 此外, 生产中不支持此参数的大于2的值

另请参见 第22.1.7.10节“与多个NDB群集节点相关的限制”

22.1.7.9与NDB群集磁盘数据存储相关的限制

磁盘数据对象的最大值和最小值。  磁盘数据对象受以下最大值和最小值的限制:

  • 最大表空间数:2 32 (4294967296)

  • 每个表空间的最大数据文件数:2 16 (65536)

  • 表空间数据文件的最小和最大可能大小分别为32K和2G。 有关 更多信息 请参见 第13.1.21节“CREATE TABLESPACE语法”

此外,在使用NDB磁盘数据表时,您应该了解有关数据文件和扩展区的以下问题:

  • 数据文件使用 DataMemory 用法与内存中数据的用法相同。

  • 数据文件使用文件描述符。 请务必记住,数据文件始终处于打开状态,这意味着文件描述符始终在使用中,不能重复用于其他系统任务。

  • 范围要求足够 DiskPageBufferMemory ; 您必须为此参数保留足够的内容以考虑所有扩展区使用的所有内存(扩展区数乘以扩展区大小)。

磁盘数据表和无盘模式。  在无盘模式下运行群集时,不支持使用磁盘数据表。

22.1.7.10与多个NDB群集节点相关的限制

多个SQL节点。  以下是与使用多个MySQL服务器作为NDB Cluster SQL节点相关的问题,并且特定于 NDBCLUSTER 存储引擎:

  • 没有分布式表锁。  A LOCK TABLES 仅适用于发出锁定的SQL节点; 群集中没有其他SQL节点 看到 此锁定。 对于锁定表作为其操作一部分的任何语句发出的锁也是如此。 (有关示例,请参阅下一项。)

  • ALTER TABLE操作。  ALTER TABLE 运行多个MySQL服务器(SQL节点)时没有完全锁定。 (如前一项所述,NDB Cluster不支持分布式表锁。)

多个管理节点。  使用多个管理服务器时:

  • 如果任何管理服务器在同一主机上运行,​​则必须在连接字符串中为节点提供显式ID,因为节点ID的自动分配在同一主机上的多个管理服务器上不起作用。 如果每个管理服务器驻留在不同的主机上,则不需要这样做。

  • 管理服务器启动时,它首先检查同一NDB群集中的任何其他管理服务器,并在成功连接到其他管理服务器时使用其配置数据。 这意味着 将忽略 管理服务器 --reload --initial 启动选项,除非管理服务器是唯一运行的服务器。 这还意味着,当执行具有多个管理节点的NDB群集的滚动重新启动时,管理服务器将读取其自己的配置文件(如果(仅当)它是此NDB群集中运行的唯一管理服务器)。 请参见 第22.5.5节“执行NDB集群的滚动重新启动” , 欲获得更多信息。

多个网络地址。  不支持每个数据节点的多个网络地址。 使用这些可能会导致问题:如果数据节点发生故障,SQL节点会等待确认数据节点已关闭但从未收到它,因为到该数据节点的另一个路由仍保持打开状态。 这可以有效地使群集无法运行。

注意

可以 为单个数据节点 使用多个网络硬件 接口 (例如以太网卡),但这些必须绑定到同一地址。 这也意味着 文件中 [tcp] 每个连接 不可能使用多个 部分 config.ini 有关 更多信息 请参见 第22.3.3.10节“NDB集群TCP / IP连接”

22.2 NDB群集安装

本节介绍规划,安装,配置和运行NDB群集的基础知识。 第22.3节“NDB群集的配置”中 的示例 提供了有关各种群集选项和配置的更深入信息,遵循此处概述的准则和过程的结果应该是可用的NDB群集,其满足 最低 要求可用性和数据保护。

本节介绍硬件和软件要求; 网络问题; 安装NDB集群; 基本配置问题; 启动,停止和重新启动集群; 加载示例数据库; 并执行查询。

NDB Cluster还提供NDB Cluster Auto-Installer,这是一个基于Web的图形安装程序,作为NDB Cluster分发的一部分。 自动安装程序可用于在一台(用于测试)或更多主机上执行NDB群集的基本安装和设置。 有关 更多信息 请参见 第22.2.1节“NDB集群自动安装程序”

假设。  以下部分对集群的物理和网络配置做出了许多假设。 这些假设将在接下来的几段中讨论。

群集节点和主机。  该集群由四个节点组成,每个节点位于一台独立的主机上,每个节点在典型的以太网网络上具有固定的网络地址,如下所示:

表22.4示例集群中节点的网络地址

节点 IP地址
管理节点( mgmd 198.51.100.10
SQL节点( mysqld 198.51.100.20
数据节点“A”( ndbd 198.51.100.30
数据节点“B”( ndbd 198.51.100.40

此设置也显示在下图中:

图22.4 NDB群集多计算机设置

Most content is described in the surrounding text. The four nodes each connect to a central switch that connects to a network.

网络寻址。  在简单(和可靠性)的利益,这种 操作方法 仅使用数字IP地址。 但是,如果网络上有DNS解析,则可以在配置群集时使用主机名代替IP地址。 或者,您可以使用该 hosts 文件(通常 /etc/hosts 用于Linux和其他类Unix操作系统, C:\WINDOWS\system32\drivers\etc\hosts 在Windows上,或操作系统的等效操作系统),以提供进行主机查找的方法(如果可用)。

潜在的主机文件问题。  尝试为群集节点使用主机名时出现的常见问题是由于某些操作系统(包括某些Linux发行版) /etc/hosts 在安装期间 设置系统自己的主机名的方式 考虑两台具有主机名的计算机, ndb1 并且 ndb2 都在 cluster 网络域中。 Red Hat Linux(包括一些衍生产品,如CentOS和Fedora)将以下条目放在这些机器的 /etc/hosts 文件中:

#ndb1 /etc/hosts
127.0.0.1 ndb1.cluster ndb1 localhost.localdomain localhost
#ndb2 /etc/hosts
127.0.0.1 ndb2.cluster ndb2 localhost.localdomain localhost

SUSE Linux(包括OpenSUSE)将这些条目放在计算机的 /etc/hosts 文件中:

#ndb1 /etc/hosts
127.0.0.1 localhost
127.0.0.2 ndb1.cluster ndb1
#ndb2 /etc/hosts
127.0.0.1 localhost
127.0.0.2 ndb2.cluster ndb2

在这两种情况下, ndb1 路由 ndb1.cluster 到环回IP地址,但从DNS获取公共IP地址 ndb2.cluster ,同时 ndb2 路由 ndb2.cluster 到环回地址并获取公共地址 ndb1.cluster 结果是每个数据节点都连接到管理服务器,但无法判断任何其他数据节点何时连接,因此数据节点在启动时似乎挂起。

警告

您不能混合使用 localhost 其他主机名或IP地址 config.ini 出于这些原因,在这种情况下的解决方案(除了对 所有 config.ini HostName 条目 使用IP地址之外 )是从中删除全限定主机名, /etc/hosts 并将其 config.ini 用于所有群集主机。

主机类型。  我们安装方案中的每台主机都是基于Intel的台式PC,运行支持的操作系统,以标准配置安装到磁盘,并且不运行任何不必要的服务。 具有标准TCP / IP网络功能的核心操作系统应该足够了。 同样为了简单起见,我们还假设所有主机上的文件系统都设置相同。 如果不是,您应该相应地调整这些说明。

网络硬件。  每台计算机上都安装了标准的100 Mbps或1千兆位以太网卡,以及卡的正确驱动程序,并且所有四台主机都通过标准问题以太网网络设备(如交换机)连接。 (所有机器都应该使用具有相同吞吐量的网卡。也就是说,群集中的所有四台机器应该有100 Mbps卡, 或者 所有四台机器都应该有1 Gbps卡。)NDB群集在100 Mbps网络中工作; 但是,千兆以太网可提供更好的性能。

重要

NDB群集 不适 用于吞吐量低于100 Mbps或经历高延迟的网络。 出于这个原因(等等),尝试在诸如因特网之类的广域网上运行NDB集群不太可能成功,并且在生产中不支持。

样本数据。  我们使用 world 可从MySQL网站下载的数据库(参见 https://dev.mysql.com/doc/index-other.html )。 我们假设每台机器都有足够的内存来运行操作系统,需要NDB集群进程,以及(在数据节点上)存储数据库。

有关安装MySQL的一般信息,请参阅 第2章, 安装和升级MySQL 有关在Linux和其他类Unix操作系统上安装NDB Cluster的信息,请参见 第22.2.2节“在Linux上安装NDB Cluster” 有关在Windows操作系统上安装NDB Cluster的信息,请参见 第22.2.3节“在Windows上安装NDB Cluster”

有关NDB Cluster硬件,软件和网络要求的一般信息,请参见 第22.1.3节“NDB群集硬件,软件和网络要求”

22.2.1 NDB群集自动安装程序

本节介绍作为NDB Cluster分发的一部分包含的基于Web的图形配置安装程序。 讨论的主题包括安装程序及其部件的概述,运行安装程序的软件和其他要求,浏览GUI以及使用安装程序在一台或多台主机上设置和启动或停止NDB群集。

NDB群集自动安装程序由两个组件组成。 前端是一个GUI客户端,实现为一个Web页面,可以在标准的Web浏览器(如Firefox或Microsoft Internet Explorer)中加载和运行。 后端是服务器进程( ndb_setup.py ),它在本地计算机或您有权访问的其他主机上运行。

这两个组件(客户端和服务器)使用标准HTTP请求和响应相互通信。 后端可以在后端用户授予访问权限的任何主机上管理NDB Cluster软件程序。 如果NDB Cluster软件位于不同的主机上,则后端依赖SSH进行访问,使用 Paramiko 库远程执行命令(请参见 第22.2.1.1节“NDB群集自动安装程序要求” )。

22.2.1.1 NDB群集自动安装程序要求

本节提供有关支持的操作平台和软件,所需软件以及运行NDB Cluster Auto-Installer的其他先决条件的信息。

支持的平台。  NDB群集自动安装程序适用于最新版本的Linux,Windows,Solaris和MacOS X的NDB 8.0发行版。有关NDB群集和NDB群集自动安装程序的平台支持的更多详细信息,请参阅 https:// www .mysql.com / support / supportedplatforms / cluster.html

支持的Web浏览器。  最新版本的Firefox和Microsoft Internet Explorer支持基于Web的安装程序。 它也适用于Opera,Safari和Chrome的最新版本,尽管我们还没有彻底测试这些浏览器的兼容性。

必需的软件设置主机。  必须在运行自动安装程序的主机上安装以下软件:

  • Python 2.6或更高版本。  Auto-Installer需要Python解释器和标准库。 如果系统上尚未安装这些,您可以使用系统的软件包管理器添加它们。 否则,您可以从 http://python.org/download/ 下载它们

  • Paramiko 2或更高。  这是使用SSH与远程主机通信所必需的。 您可以从 http://www.lag.net/paramiko/ 下载 Paramiko也可以从您系统的包管理器中获得。

  • Pycrypto版本1.9或更高版本。  Paramiko需要此加密模块,并且可以使用它进行安装 pip install cryptography 如果 pip 未安装,并且使用系统的软件包管理无法使用该模块,则可以从 https://www.dlitz.net/software/pycrypto/ 下载该模块

上面列表中的所有软件都包含在Windows版本的配置工具中,不需要单独安装。

只有在打算在远程主机上部署NDB Cluster节点时才需要Paramiko和Pycrypto库,如果所有节点都在运行安装程序的同一主机上,则不需要Paramiko和Pycrypto库。

必需的软件远程主机。  您希望部署NDB Cluster节点的远程主机所需的唯一软件是SSH服务器,它通常默认安装在Linux和Solaris系统上。 有几种替代方案适用于Windows; 有关这些的概述,请参阅 http://en.wikipedia.org/wiki/Comparison_of_SSH_servers

使用多个主机时的另一个要求是,可以使用SSH和正确的密钥或用户凭据对任何远程主机进行身份验证,如下几段所述:

身份验证和安全。  Auto-Installer提供了三种用于远程访问的基本安全或身份验证机制,我们在此列出并描述:

  • SSH。  安全shell连接用于使后端能够在远程主机上执行操作。 因此,必须在远程主机上运行SSH服务器。 此外,运行安装程序的操作系统用户必须具有访问远程服务器的权限,可以使用用户名和密码,也可以使用公钥和私钥。

    重要

    您永远不应该使用系统 root 帐户进行远程访问,因为这是非常不安全的。 另外, mysqld 通常不能由系统启动 root 出于这些原因和其他原因,您应该为目标系统上的常规用户帐户提供SSH凭据,而不是系统 root 有关此问题的更多信息,请参见 第6.1.5节“如何以普通用户身份运行MySQL”

  • HTTPS。  默认情况下,Web浏览器前端和后端之间的远程通信不会加密,这意味着用户的SSH密码等信息将以任何人都可读的明文形式传输。 对于要加密的远程客户端的通信,后端必须具有证书,并且前端必须使用HTTPS而不是HTTP与后端进行通信。 通过颁发自签名证书,可以最轻松地完成启用HTTPS。 颁发证书后,您必须确保使用证书。 您可以通过启动 ndb_setup.py 来完成此 操作 从命令行使用 --use-https -S )和 --cert-file -c )选项。

    cfg.pem 包含 示例证书文件 ,默认情况下使用。 该文件位于 mcc 安装共享目录下的目录中; 在Linux上,通常是文件的完整路径 /usr/share/mysql/mcc/cfg.pem 在Windows系统上,这通常是 C:\Program Files\MySQL\MySQL Server 8.0\share\mcc\cfg.pem 设置默认值意味着,出于测试目的,您只需启动安装程序,并 -S 选择在浏览器和后端之间使用HTTPS连接。

    自动安装程序保存给定群集的配置文件, mycluster01 mycluster01.mcc 调用 ndb_setup.py 可执行文件 的用户的主目录中 所示 该文件使用用户提供的密码加密(使用 Fernet ); 因为HTTP以明文形式传输密码, 强烈建议您始终使用HTTPS连接来访问远程主机上的自动安装程序

  • 基于证书的身份验证。  后端 ndb_setup.py 进程可以在本地主机和远程主机上执行命令。 这意味着连接到后端的任何人都可以负责命令的执行方式。 要拒绝到后端的不需要的连接,可能需要证书来验证客户端。 在这种情况下,证书必须由用户发布,安装在浏览器中,并且可用于后端以进行身份​​验证。 您可以通过启动 ndb_setup.py 来制定此要求(与密码或密钥验证一起或代替密码或密钥验证) 使用 --ca-certs-file -a )选项。

当客户端浏览器与自动安装程序后端运行在同一主机上时,不需要或不需要安全身份验证。

另请参见 第22.5.12节“NDB群集安全性问题” ,其中讨论了在部署NDB群集时要考虑的安全性注意事项,以及 第6章“ 安全性” ,以获取更一般的MySQL安全性信息。

22.2.1.2使用NDB群集自动安装程序

NDB群集自动安装程序界面由多个页面组成,每个页面对应于用于配置和部署NDB群集的过程中的一个步骤。 这些页面按顺序列在此处:

  • 欢迎 :通过选择配置新的NDB群集或继续配置现有群集来开始使用自动安装程序。

  • 定义群集 :设置有关群集的基本信息,例如名称,主机和负载类型。 如果需要,您还可以在此处设置用于访问远程主机的SSH身份验证类型。

  • 定义主机 :标识要运行NDB群集进程的主机。

  • 定义进程 :将给定类型的一个或多个进程分配给每个群集主机。

  • 定义参数 :设置进程或进程类型的配置属性。

  • 部署配置 :使用先前配置集部署集群; 启动和停止已部署的群集。

NDB群集安装程序设置和帮助菜单

欢迎 屏幕 外,所有屏幕上都会显示这些菜单 它们提供对安装程序设置和信息的访问。 此处显示 设置” 菜单的详细信息:

图22.5“NDB群集自动安装程序设置”菜单

Content is described in the surrounding text.

设置” 菜单包含以下条目:

  • 自动将配置保存为cookie :将配置信息(如主机名,过程数据和参数值)保存为浏览器中的cookie。 选择此选项后,将保存除SSH密码之外的所有信息。 这意味着您可以退出并重新启动浏览器,并继续使用上一个会话结束时从中断处继续的相同配置。 默认情况下启用此选项。

    永远不会保存SSH密码; 如果您使用一个,则必须在每个新会话开始时提供。

  • 显示高级配置选项 :默认显示高级配置参数(如果可用)。

    设置后,高级参数将继续在配置文件中使用,直到显式更改或重置为止。 这与安装程序中当前是否显示高级参数无关; 换句话说,禁用菜单项不会重置任何这些参数的值。

    您还可以在“ 定义参数” 屏幕 上切换各个过程的高级参数的显示

    默认情况下禁用此选项。

  • 自动获取新主机的资源信息 :自动查询新主机以获取硬件资源信息,以预先填充许多配置选项和值。 在这种情况下,建议值不是必需的,但除非使用安装程序中的相应编辑选项进行显式更改,否则将使用它们。

    默认情况下启用此选项。

安装程序“ 帮助” 菜单如下所示:

图22.6 NDB Cluster Auto-Installer帮助菜单

Content is described in the surrounding text.

帮助” 菜单提供了几个选项,如以下列表中所述:

  • 内容 :显示内置用户指南。 这是在单独的浏览器窗口中打开的,因此可以与安装程序同时使用,而不会中断工作流程。

  • 当前页面 :打开描述安装程序中当前显示页面的部分的内置用户指南。

  • 关于 :打开一个对话框,显示安装程序名称和提供它的NDB Cluster分发版本号。

Auto-Installer还以大多数输入窗口小部件的工具提示的形式提供上下文相关帮助。

此外,大多数NDB配置参数的名称都链接到在线文档中的描述。 文档显示在单独的浏览器窗口中。

下一节将讨论启动自动安装程序。 紧随其后的部分以前面列出的顺序更详细地描述了每个页面的目的和功能。

启动NDB群集自动安装程序

自动安装程序与NDB Cluster软件一起提供。 .deb 许多Linux发行版也可以使用 单独的RPM和 仅包含自动安装程序的软件包。 (请参见 第22.2节“NDB群集安装” 。)

本节介绍如何启动安装程序。 您可以通过调用 ndb_setup.py 可执行文件来完成。

用户和权限

您应该 以普通用户身份 运行 ndb_setup.py ; 这样做不需要特殊权限。 你应该 运行该程序的 mysql 用户,或使用系统 root 或管理员帐户; 这样做可能会导致安装失败。

ndb_setup.py 在发现 bin NDB簇安装目录中; 典型位置可能 /usr/local/mysql/bin 位于Linux系统或 C:\Program Files\MySQL\MySQL Server 8.0\bin Windows系统上。 这可能因系统上安装NDB Cluster软件的位置和安装方法而异。

在Windows上,您还可以通过 在NDB Cluster安装目录中 运行 setup.bat 启动安装程序 从命令行调用时,此批处理文件接受与 ndb_setup.py 相同的选项

ndb_setup.py 可以使用影响其操作的几个选项中的任何一个来启动,但通常允许使用默认设置,在这种情况下,您可以 通过以下两种方法之一 启动 ndb_setup.py

  1. 导航到 bin 终端中 的NDB Cluster 目录并从命令行调用它,不需要任何其他参数或选项,如下所示:

    外壳> ndb_setup.py
    用完安装目录:/ usr / local / mysql / bin
    在端口8081上启动Web服务器
    URL为https:// localhost:8081 / welcome.html
    deathkey = 627876
    按CTRL + C以停止Web服务器。
    该应用程序现在应该在您的浏览器中运行。
    (或者您可以导航到https:// localhost:8081 / welcome.html来启动它)
    

    无论操作平台如何,这都有效。

  2. 导航到 bin 文件浏览器(例如Windows上的Windows资源管理器或Linux上的Konqueror,Dolphin或Nautilus)中 的NDB Cluster 目录,并激活(通常通过双击) ndb_setup.py 文件图标。 这适用于Windows,也适用于大多数常见的Linux桌面。

    在Windows上,您还可以导航到NDB Cluster安装目录并激活 setup.bat 文件图标。

在任何一种情况下,一旦 调用 ndb_setup.py ,自动安装程序的 欢迎 屏幕 应该在系统的默认Web浏览器中打开。 如果没有,您应该能够打开页面 http://localhost:8081/welcome.html https://localhost:8081/welcome.html 在浏览器中手动 打开

在某些情况下,你可能希望使用安装程序非默认设置,如指定的HTTPS连接,或不同端口的自动安装程序自带的Web服务器上运行,在这种情况下,你必须调用 ndb_setup.py 与一个或多个启动选项,其值覆盖必要的默认值。 使用 setup.bat 可以在Windows系统上使用相同的启动选项 在NDB Cluster软件分发中为此类平台提供的文件。 这可以使用命令行完成,但如果您希望或需要在使用这些选项中的一个或多个时从桌面或文件浏览器启动安装程序,则还可以创建包含正确调用的脚本或批处理文件,然后双击文件浏览器中的文件图标以启动安装程序。 (在Linux系统上,您可能还需要首先使脚本文件可执行。)如果您计划从远程主机使用自动安装程序,则应该开始使用该 -S 选项。 有关NDB Cluster Auto-Installer的此选项和其他高级启动选项的信息,请参阅 第22.4.26节“ ndb_setup.py - 启动基于浏览器的NDB集群自动安装程序”

NDB群集自动安装程序欢迎屏幕

调用 ndb_setup.py 欢迎 屏幕将加载到默认浏览器中 第一次运行自动安装程序(或者由于某些其他原因没有现有配置),此屏幕如下所示:

图22.7首次运行NDB群集自动安装程序欢迎屏幕

Content is described in the surrounding text.

在这种情况下,列出的集群的唯一选择是配置新集群,并且 View Cfg Continue 按钮都处于非活动状态。

要创建新配置,请在提供的文本框中输入并确认密码。 完成此操作后,可以单击“ 继续” 以进入“ 定义群集” 屏幕,您可以在其中为新群集指定名称。

如果您之前使用自动安装程序创建了一个或多个群集,则会按名称列出它们。 此示例显示了一个名为的现有集群 mycluster-1

图22.8“NDB集群自动安装程序欢迎”屏幕,其中包含先前创建的集群mycluster-1

Content is described in the surrounding text.

要查看给定群集的配置并使用它,请在列表中选择其名称旁边的radiobutton,然后输入并确认用于创建它的密码。 正确完成此操作后,可以单击“ 查看Cfg” 以查看和编辑此群集的配置。

NDB群集自动安装程序定义群集屏幕

定义群集” 屏幕将显示在“ 欢迎” 屏幕之后 ,用于设置群集的常规属性。 Define Cluster 屏幕 的布局 如下所示:

图22.9 NDB群集自动安装程序定义群集屏幕

Content is described in the surrounding text.

此屏幕和后续屏幕还包括 设置 帮助 菜单,本节稍后将对其进行介绍; 请参阅 NDB群集安装程序设置和帮助菜单

定义群集” 屏幕允许您为 群集 设置三种属性:群集属性,SSH属性和安装属性。

此处列出了可在此屏幕上设置的群集属性:

  • 群集名称 :标识 群集的名称 ; 在这个例子中,这是 mycluster-1 名称在前一个屏幕上设置,无法在此处更改。

  • 主机列表 :应运行集群进程的一个或多个主机的逗号分隔列表。 默认情况下,这是 127.0.0.1 如果将远程主机添加到列表中,则必须能够使用作为SSH属性提供的凭据连接到它们。

  • 应用程序类型 :选择以下选项之一:

    1. 简单测试 :小规模测试的最小资源使用。 这是默认值。 不适用于生产环境

    2. Web :最大化给定硬件的性能。

    3. 实时 :最大化性能,同时最大限度地提高对超时的敏感度,以最大限度地缩短检测故障群集过程所需的时间。

  • 写入负载 :为整个群集选择预期写入次数的级别。 您可以选择以下任何一个级别:

    1. :预期负载包括少于100次写入事务。

    2. :预期负载包括每秒100到1000次写入事务; 这是默认值。

    3. :预期负载包括每秒超过1000次写入事务。

SSH属性在以下列表中描述:

  • 基于密钥的SSH :选中此框以使用启用密钥的登录到远程主机。 如果选中,则还必须提供密钥用户和密码短语; 否则,需要远程登录帐户的用户和密码。

  • 用户 :具有远程登录访问权限的用户的名称。

  • 密码 :远程用户的密码。

  • 关键用户 :密钥有效的用户名,如果与操作系统用户不同。

  • 密钥密码 :如果需要, 密钥的密码

  • 密钥文件 密钥文件的 路径。 默认是 ~/.ssh/id_rsa

此页面上设置的SSH属性适用于群集中的所有主机。 可以通过在“ 定义主机” 屏幕 上编辑主机的属性来覆盖给定主机的它们

也可以在此屏幕上设置两个安装属性:

  • 安装MySQL群集 :此设置确定自动安装程序在群集主机上安装NDB群集软件(如果有)的源。 这里列出了可能的值及其影响:

    1. DOCKER :尝试从 https://hub.docker.com/r/mysql/mysql-cluster/ 每个主机上 安装MySQL Cluster Docker镜像

    2. REPO :尝试从 每个主机上 MySQL存储库 安装NDB Cluster软件

    3. BOTH :尝试从每个主机上的存储库安装Docker映像或软件,优先考虑存储库

    4. NONE :不要在主机上安装NDB Cluster软件; 这是默认值

  • 打开FW端口 :选中此复选框可让安装程序尝试在所有主机上打开NDB CLuster进程所需的端口。

下图显示了“ 定义群集” 页面,其中包含运行所有节点的小型测试群集的设置 localhost

图22.10“NDB群集自动安装程序定义群集”屏幕,其中包含测试群集的设置

Content is described in the surrounding text.

进行所需设置后,可以将它们保存到配置文件中, 然后单击“ 保存并 单击 下一步” 按钮 进入“ 定义主机” 屏幕

如果在未保存的情况下退出安装程序,则不会对配置文件进行任何更改。

NDB群集自动安装程序定义主机屏幕

此处显示的 定义主机” 屏幕提供了查看和指定每个群集主机的几个关键属性的方法:

图22.11 NDB Cluster定义主机屏幕,启动

Content is described in the surrounding text.

显示的属性包括以下内容:

  • 主机 :该主机的名称或IP地址

  • Res.info :显示 OK 安装程序是否能够从该主机检索所请求的资源信息

  • 平台 :操作系统或平台

  • 内存(MB) :此主机上的RAM量

  • 核心 :此主机上可用的CPU核心数

  • MySQL Cluster安装目录 :在此主机上安装NDB Cluster软件的 目录的 路径; 默认为 /usr/local/bin

  • MySQL Cluster数据目录 :此主机上NDB Cluster进程用于 数据的目录 路径; 默认为 /var/lib/mysql-cluster

  • DiskFree :可用磁盘空间(以字节为单位)

    对于具有多个磁盘的主机,仅显示用于数据目录的磁盘上的可用空间。

此屏幕还为每个主机提供包含以下属性的扩展视图:

  • FDQN :此主机的完全限定域名,由安装程序用于连接它,向其分发配置信息,以及在其上启动和停止集群进程。

  • 内部IP :用于与在其他位置运行的进程在此主机上运行的集群进程进行通信的IP地址。

  • OS详细信息 :详细的操作系统名称和版本信息。

  • 打开固件 :如果启用此复选框,安装程序将尝试打开集群进程所需的主机防火墙中的端口。

  • REPO URL :MySQL NDB Cluster存储库的URL

  • DOCKER URL :MySQL NDB CLuster Docker镜像的URL; 对于NDB 8.0,这是 mysql/mysql-cluster:8.0

  • 安装 :如果启用此复选框,则自动安装程序会尝试在此主机上安装NDB Cluster软件

扩展视图如下所示:

图22.12“NDB群集定义主机”屏幕,扩展主机信息视图

Content is described in the surrounding text.

显示中的所有单元格都是可编辑的,但 Host Res.info FQDN 列中的 单元格除外

请注意,从远程主机检索信息可能需要一些时间。 可以检索无值的字段用省略号( )表示。 您可以通过选择列表中的主机,然后单击“ 刷新所选主机” 按钮, 重试从一个或多个主机获取资源信息

添加和删​​除主机

您可以通过单击“ 添加主机” 按钮并输入“ 添加新主机” 对话框 中指示的所需属性 来添加一个或多个主机 ,如下所示:

图22.13“NDB群集添加主机”对话框

Content is described in the surrounding text.

该对话框包括以下字段:

  • 主机名 :以逗号分隔的一个或多个主机名,IP地址或两者的列表。 这些必须可以从运行自动安装程序的主机访问。

  • 主机内部IP(VPN) :如果要将群集设置为在VPN或其他内部网络上运行,请输入用于其他主机上的群集节点联系的IP地址。

  • 基于密钥的身份验证 :如果选中,则启用基于密钥的身份验证。 您可以在“ 用户” ,“ 密码 ”和“ 密钥文件” 字段中 输入任何其他所需信息

  • 普通登录 :如果使用基于密码的登录访问此主机,请在“ 用户” 和“ 密码” 字段中 输入相应的信息

  • 打开FW端口 :选中此复选框允许安装程序尝试打开此主机防火墙中集群进程所需的任何端口。

  • 配置安装 :选中此选项允许自动安装尝试在此主机上设置NDB群集软件。

要保存新主机及其属性,请单击“ 添加” 如果您希望取消而不保存任何更改,请单击 取消

同样,您可以使用标记为 Remove selected host(s) 的按钮删除一个或多个主机 删除主机时,也会删除为该主机配置的任何进程

警告

立即 删除选定的主机 没有确认对话框。 如果错误地删除了主机,则必须使用“ 添加主机” 手动重新输入其名称和属性

如果 更改 了“ 定义群集” 屏幕 上的SSH用户凭据 ,则自动安装程序会尝试从缺少信息的任何主机刷新资源信息。

您可以通过单击网格中的相应单元格,选择一个或多个主机并单击标记为 编辑所选主机 的按钮来编辑主机的平台名称,硬件资源信息,安装目录和数据目录 这会导致出现一个对话框,可以在其中编辑这些字段,如下所示:

图22.14“NDB群集自动安装程序编辑主机”对话框

Content is described in the surrounding text.

选择多个主机时,任何已编辑的值都将应用于所有选定的主机。

输入所有所需的主机信息后,可以使用 Save&Next 按钮将信息保存到群集的配置文件,然后进入 Define Processes 屏幕 ,您可以在其中设置一个或多个主机上的NDB Cluster进程。

NDB群集自动安装程序定义进程屏幕

此处显示 Define Processes 屏幕提供了一种将NDB Cluster进程(节点)分配给集群主机的方法:

图22.15“NDB群集自动安装程序定义进程”对话框

Content is described in the surrounding text. The example process tree topology includes "Any host" and "localhost", as defined earlier. The localhost tree includes the following processes: Management mode 1, API node 1, API node 2, API node 3, SQL node 1, SQL node 2, Multi threaded data node 1, and Multi threaded data node 2. This panel also includes "Add process" and "Del[ete] process" buttons.

此屏幕包含一个进程树,显示集群主机和设置为在每个主机上运行的进程,以及一个显示有关树中当前所选项目的信息的面板。

当第一次访问给定群集的此屏幕时,将根据主机数量为您定义一组默认进程。 如果稍后返回“ 定义主机” 屏幕 ,删除所有主机并添加新主机,这也会导致定义新的默认进程集。

NDB群集进程具有此列表中描述的类型:

  • 管理节点。  执行管理任务,例如停止单个数据节点,查询节点和群集状态以及进行备份。 可执行文件: ndb_mgmd

  • 单线程数据节点。  存储数据并执行查询。 可执行文件: ndbd

  • 多线程数据节点。  存储数据并使用并行执行的多个工作线程执行查询。 可执行文件: ndbmtd

  • SQL节点。  用于执行SQL查询的MySQL服务器 NDB 可执行文件: mysqld

  • API节点。  客户端 NDB 通过NDB API或其他低级客户端API 访问数据 ,而不是使用SQL。 有关 更多信息, 请参阅“ MySQL NDB Cluster API开发人员指南”

有关进程(节点)类型的更多信息,请参见 第22.1.1节“NDB集群核心概念”

在树中所示的处理是由类型顺序编号,对每台主机,例如, SQL node 1 SQL node 2 ,等等-简化鉴别。

必须将每个管理节点,数据节点或SQL进程分配给特定主机,并且不允许在任何其他主机上运行。 可以 API节点 分配给单个主机,但这不是必需的。 相反,您可以将其分配给 除了任何其他主机之外树还包含 的特殊 任何主机 条目,并充当允许在任何主机上运行的进程的占位符。 只有API进程可以使用此 Any主机 条目

添加流程。  要向给定主机添加新进程,请右键单击树中该主机的条目,然后 在出现时 选择“ 添加进程” 弹出窗口,或者在进程树中选择主机,然后按 进程树下面的 添加进程” 按钮。 执行这些操作之一将打开“添加进程”对话框,如下所示:

图22.16 NDB群集自动安装程序添加进程对话框

Most content is described in the surrounding text. Shows a window titled "Add new process" with two options: "Select process type:" that shows a select box with "API node" selected, and "Enter process name:" with "API node 4" entered as plain text. Action buttons include "Cancel" and "Add".

在这里,您可以从本节前面介绍的可用流程类型中进行选择; 如果需要,您还可以输入任意进程名称来代替建议值。

删除进程。  要删除进程,请在树中选择该进程并使用 Del进程 按钮。

在流程树中选择流程时,信息面板中会显示有关该流程的信息,您可以在其中更改流程名称及其类型。 您可以将多线程数据节点( ndbmtd )更改为单线程数据节点( ndbd ),反之亦然; 不允许其他进程类型更改。 如果要在任何其他流程类型之间进行更改,则必须先删除原始流程,然后添加所需类型的新流程

NDB群集自动安装程序定义参数屏幕

与“ 定义流程” 屏幕一样 ,此屏幕包含一个流程树; 定义参数” 流程树按流程或节点类型组织在标记为“ 管理层” ,“ 数据层” ,“ SQL层 ”和“ API层”的组中 信息面板显示有关当前所选项目的信息。 定义属性” 屏幕如下所示:

图22.17 NDB群集自动安装程序定义参数屏幕

Content is described in the surrounding text.

标记为“ 显示高级配置 ”的复选框 在选中时,会在信息窗格中显示数据节点和SQL节点进程的高级选项。 无论它们是否可见,都会设置和使用这些选项。 您还可以通过选中 设置” 下的 显示高级配置选项 ”来 全局启用此行为 (请参阅 NDB群集安装程序设置和帮助菜单 )。

您可以通过从树中选择该进程来编辑单个进程的属性,也可以通过选择其中一个 文件夹 来编辑群集中相同类型的所有进程 为给定属性设置的每个进程值将覆盖该属性的任何每个组设置,否则这些设置将应用于相关进程。 此处显示了此类信息面板(用于SQL进程)的示例:

图22.18定义参数 - 进程属性

Content is described in the surrounding text.

可以覆盖其值的属性将显示在信息面板中,并带有带加号的按钮。 + 按钮可激活属性的输入窗口小部件,使您可以更改其值。 覆盖该值后,此按钮将变为显示 X 的按钮 X 按钮撤消给定属性,它立即恢复成预定义值的任何更改。

所有配置属性都具有安装程序计算的预定义值,这些值基于主机名,节点ID,节点类型等因素。 在大多数情况下,这些值可以保持不变。 如果您不熟悉它,强烈建议您在更改任何属性值之前阅读适用的文档。 为了更容易地查找此信息,信息面板中显示的每个属性名称都链接到在线NDB Cluster文档中的描述。

NDB群集自动安装程序部署配置屏幕

此屏幕允许您执行以下任务:

  • 查看要应用的进程启动命令和配置文件

  • 通过在所有群集主机上创建任何必需的文件和目录来分发配置文件,即 按照当前配置 部署 群集

  • 启动和停止群集

部署配置” 屏幕显示在此处:

图22.19 NDB群集自动安装程序部署配置屏幕

Content is described in the surrounding text.

与“ 定义参数” 屏幕 类似 ,此屏幕具有按流程类型组织的流程树。 树中每个进程旁边都有一个状态图标,指示进程的当前状态:connected( CONNECTED ),starting( STARTING ),running( STARTED ),stops( STOPPING )或disconnected( NO_CONTACT )。 如果进程已连接或正在运行,则图标显示绿色; 如果它正在启动或停止,则为黄色; 如果进程停止或管理服务器无法联系,则为红色。

此屏幕还包含两个信息面板,一个显示启动所选进程所需的启动命令或命令。 (对于某些进程,可能需要多个命令 - 例如,如果需要初始化。)另一个面板显示给定进程的配置文件的内容(如果有)。

此屏幕还包含四个按钮,标记为并执行以下列表中描述的功能:

  • 安装集群 :此版本中无效; 旨在用于未来版本的实现。

  • 部署集群 :验证配置是否有效。 创建群集主机上所需的任何目录,并将配置文件分发到主机上。 进度条显示部署的进度,如此处所示,并在部署完成时显示一个对话框,如下所示:

    图22.20集群部署过程

    Content is described in the surrounding text.

  • 启动集群 :与 部署集群 一样 部署集群 ,然后以正确的顺序启动所有集群进程。

    启动这些过程可能需要一些时间。 如果估计的完成时间太长,则安装程序提供取消或继续启动过程的机会。 进度条指示启动过程的当前状态,如下所示:

    图22.21带进度条的集群启动过程

    Content is described in the surrounding text.

    进程树中显示的项旁边的进程状态图标也会随每个进程的状态一起更新。

    启动过程完成后会显示确认对话框,如下所示:

    图22.22群集启动,流程完成对话框

    Content is described in the surrounding text.

  • 停止集群 :集群启动后,您可以使用它停止它。 与启动集群一样,集群关闭不是即时的,可能需要一些时间才能完成。 类似于群集启动期间显示的进度条显示群集关闭过程的大致当前状态,与进程树相邻的进程状态图标也是如此。 进度条如下所示:

    图22.23群集关闭过程,带进度条

    Content is described in the surrounding text.

    确认对话框指示关闭过程何时完成:

    图22.24群集关闭,进程已完成对话框

    Content is described in the surrounding text.

自动安装程序 config.ini 为每个管理节点 生成 包含NDB节点参数 文件,以及 my.cnf 包含 集群中 每个 mysqld 进程 的相应选项 文件 没有为数据节点或API节点创建配置文件。

22.2.2在Linux上安装NDB集群

本节介绍Linux和其他类Unix操作系统上的NDB Cluster的安装方法。 虽然接下来的几节涉及Linux操作系统,但其中的指令和程序应该很容易适应其他受支持的类Unix平台。 有关Windows系统特定的手动安装和设置说明,请参见 第22.2.3节“在Windows上安装NDB群集”

每个NDB群集主机必须安装正确的可执行程序。 运行SQL节点的主机必须在其上安装MySQL Server二进制文件( mysqld )。 管理节点需要管理服务器守护程序( ndb_mgmd ); 数据节点需要数据节点守护程序( ndbd ndbmtd )。 没有必要在管理节点主机和数据节点主机上安装MySQL Server二进制文件。 建议您还在 管理服务器主机上 安装管理客户端( ndb_mgm )。

在Linux上安装NDB Cluster可以使用Oracle的预编译二进制文件(下载为.tar.gz存档),RPM软件包(也可从Oracle获得)或源代码完成。 所有这三种安装方法都在下面的部分中描述。

无论使用何种方法,在启动集群之前,仍然需要在安装NDB Cluster二进制文件之后为所有集群节点创建配置文件。 请参见 第22.2.4节“NDB集群的初始配置”

22.2.2.1在Linux上安装NDB集群二进制版本

本节介绍了为Oracle提供的预编译二进制文件为每种类型的Cluster节点安装正确的可执行文件所需的步骤。

要使用预编译的二进制文件设置集群,每个集群主机的安装过程的第一步是从 NDB集群下载页面 下载二进制存档 (对于最新的64位NDB 8.0版本,这是 mysql-cluster-gpl-8.0.17-linux-glibc2.12-x86_64.tar.gz 。)我们假设您已将此文件放在每个计算机的 /var/tmp 目录中。

如果需要自定义二进制文件,请参见 第2.9.3节“使用开发源代码树安装MySQL”

注意

完成安装后,还没有启动任何二进制文件。 我们将在配置节点后向您展示如何执行此操作(请参见 第22.2.4节“NDB集群的初始配置” )。

SQL节点。  在指定用于承载SQL节点的每台计算机上,以系统 root 用户 身份执行以下步骤

  1. 检查您的 /etc/passwd /etc/group 文件(或使用操作系统提供的任何工具来管理用户和组),以查看系统上是否已有 mysql 组和 mysql 用户。 某些操作系统发行版将这些作为操作系统安装过程的一部分创建。 如果它们尚不存在,请创建一个新 mysql 用户组,然后将 mysql 用户 添加 到该组:

    shell> groupadd mysql
    shell>useradd -g mysql -s /bin/false mysql
    

    useradd groupadd 的语法 在不同版本的Unix上可能略有不同,或者它们可能有不同的名称,如 adduser addgroup

  2. 将位置更改为包含下载文件的目录,解压缩归档文件,并创建一个名为 mysql mysql 目录 的符号链接

    注意

    实际的文件和目录名称根据NDB Cluster版本号而有所不同。

    shell> cd /var/tmp
    shell> tar -C /usr/local -xzvf mysql-cluster-gpl-8.0.17-linux-glibc2.12-x86_64.tar.gz
    shell>ln -s /usr/local/mysql-cluster-gpl-8.0.17-linux-glibc2.12-x86_64 /usr/local/mysql
    
  3. 将位置更改为 mysql 目录并使用 mysqld 设置系统数据库 --initialize ,如下所示:

    shell> cd mysql
    shell>mysqld --initialize
    

    这会为MySQL root 帐户 生成一个随机密码 如果你 希望被生成的随机密码,您可以替换 --initialize-insecure 的选项 --initialize 在任何一种情况下,您都应该 在执行此步骤之前 查看 第2.10.1节“初始化数据目录” 以获取其他信息。 另请参见 第4.4.2节“ mysql_secure_installation - 改进MySQL安装安全性”

  4. 设置MySQL服务器和数据目录的必要权限:

    shell> chown -R root .
    shell> chown -R mysql data
    shell>chgrp -R mysql .
    
  5. 将MySQL启动脚本复制到相应的目录,使其可执行,并将其设置为在启动操作系统时启动:

    shell> cp support-files/mysql.server /etc/rc.d/init.d/
    shell> chmod +x /etc/rc.d/init.d/mysql.server
    shell>chkconfig --add mysql.server
    

    (启动脚本目录可能因操作系统和版本而异 - 例如,在某些Linux发行版中,它是 /etc/init.d 。)

    在这里,我们使用Red Hat的 chkconfig 创建启动脚本的链接; 在您的平台上使用适用于此目的的任何方法,例如 Debian上的 update-rc.d

请记住,必须在要驻留SQL节点的每台计算机上重复上述步骤。

数据节点。  安装数据节点不需要 mysqld 二进制文件。 只需要NDB Cluster数据节点可执行 ndbd (单线程)或 ndbmtd (多线程)。 这些二进制文件也可以在 .tar.gz 存档中 找到 同样,我们假设您已将此存档放入 /var/tmp

作为系统 root (即,在使用 sudo su root 或系统等效用于暂时承担系统管理员帐户的权限之后),执行以下步骤在数据节点主机上安装数据节点二进制文件:

  1. 将位置更改为 /var/tmp 目录,并将 存档中 ndbd ndbmtd 二进制文件解压缩到合适的目录中,例如 /usr/local/bin

    shell> cd /var/tmp
    shell> tar -zxvf mysql-cluster-gpl-8.0.17-linux-glibc2.12-x86_64.tar.gz
    shell> cd mysql-cluster-gpl-8.0.17-linux-glibc2.12-x86_64
    shell> cp bin/ndbd /usr/local/bin/ndbd
    shell>cp bin/ndbmtd /usr/local/bin/ndbmtd
    

    (你可以安全地删除通过解压缩下载的存档创建的目录,它包含的文件,从 /var/tmp 一次 ndb_mgm ndb_mgmd 已经被复制到可执行文件目录。)

  2. 将位置更改为复制文件的目录,然后使它们都可执行:

    shell> cd /usr/local/bin
    shell>chmod +x ndb*
    

应在每个数据节点主机上重复上述步骤。

虽然只需要一个数据节点可执行文件来运行NDB Cluster数据节点,但我们已经向您展示了如何 在前面的说明中 安装 ndbd ndbmtd 我们建议您在安装或升级NDB群集时执行此操作,即使您计划仅使用其中一个,因为如果您以后决定从一个更改为另一个,这将节省时间和麻烦。

注意

托管数据节点的每台机器上的数据目录是 /usr/local/mysql/data 配置管理节点时,此信息是必不可少的。 (请参见 第22.2.4节“NDB集群的初始配置” 。)

管理节点。  安装管理节点不需要 mysqld 二进制文件。 只需要NDB群集管理服务器( ndb_mgmd ); 您最有可能也想安装管理客户端( ndb_mgm )。 这两个二进制文件也可以在 .tar.gz 存档中 找到 同样,我们假设您已将此存档放入 /var/tmp

作为系统 root ,执行以下步骤以 在管理节点主机上 安装 ndb_mgmd ndb_mgm

  1. 将位置更改为 /var/tmp 目录,并将 存档中 ndb_mgm ndb_mgmd 解压缩到合适的目录中,例如 /usr/local/bin

    shell> cd /var/tmp
    shell> tar -zxvf mysql-cluster-gpl-8.0.17-linux-glibc2.12-x86_64.tar.gz
    shell> cd mysql-cluster-gpl-8.0.17-linux-glibc2.12-x86_64
    shell>cp bin/ndb_mgm* /usr/local/bin
    

    (你可以安全地删除通过解压缩下载的存档创建的目录,它包含的文件,从 /var/tmp 一次 ndb_mgm ndb_mgmd 已经被复制到可执行文件目录。)

  2. 将位置更改为复制文件的目录,然后使它们都可执行:

    shell> cd /usr/local/bin
    shell>chmod +x ndb_mgm*
    

第22.2.4节“NDB集群的初始配置”中 ,我们为示例NDB集群中的所有节点创建配置文件。

22.2.2.2从RPM安装NDB集群

本节介绍使用Oracle提供的RPM软件包为每种类型的NDB Cluster 8.0节点安装正确的可执行文件所需的步骤。 有关以前版本的NDB Cluster的RPM的信息,请参阅 使用旧式RPM(NDB 7.5.3及更早版本)进行安装

作为本节中描述的方法的替代方案,Oracle为NDB群集提供了与许多常见Linux发行版兼容的MySQL存储库。 此处列出的两个repostories可用于基于RPM的发行版:

RPM可用于32位和64位Linux平台。 这些RPM的文件名使用以下模式:

MySQL的集群社区数据节点,8.0.17-1.el7.x86_64.rpm

mysql-cluster- license- component- ver- revdistroarch的.rpm
  
    license:= {commercial | 社区}
    
    component:{management-server | 数据节点| 服务器| 客户| other—see text}
    
    vermajorminorrelease
    
    revmajor[。minor]
    
    distro:{el6 | el7 | sles12}
    
    arch:{i686 | x86_64的}

license 指示RPM是否是NDB群集的商业版或社区版的一部分。 在本节的其余部分中,我们假设您正在安装社区版本的示例。

component 可以在下表中找到带描述的 可能值

表22.5 NDB Cluster RPM分发的组件

零件 描述
auto-installer NDB Cluster Auto Installer程序; 有关用法 请参见 第22.2.1节“NDB集群自动安装程序”
client MySQL和 NDB 客户端程序; 包括 mysql 客户端, ndb_mgm 客户端和其他客户端工具
common MySQL服务器所需的字符集和错误消息信息
data-node ndbd ndbmtd 数据节点二进制文件
devel MySQL客户端开发所需的头文件和库文件
embedded 嵌入式MySQL服务器
embedded-compat 向后兼容的嵌入式MySQL服务器
embedded-devel 用于开发嵌入式MySQL应用程序的头文件和库文件
java 支持ClusterJ应用程序所需的JAR文件
libs MySQL客户端库
libs-compat 向后兼容的MySQL客户端库
management-server NDB群集管理服务器( ndb_mgmd
memcached 需要支持的文件 ndbmemcache
minimal-debuginfo 包server-minimal的调试信息; 在开发使用此包的应用程序或调试此包时有用
ndbclient NDB 用于运行NDB API和MGM API应用程序的客户端库( libndbclient
ndbclient-devel 开发NDB API和MGM API应用程序所需的标头和其他文件
nodejs 设置Node.JS支持NDB Cluster所需的文件
server 包含 存储引擎支持 的MySQL服务器( mysqld NDB 以及相关的MySQL服务器程序
server-minimal 为NDB和相关工具最小化安装MySQL服务器
test mysqltest ,其他MySQL测试程序和支持文件


.tar 还提供针对给定平台和体系结构的所有NDB Cluster RPM 的单个捆绑( 文件)。 此文件的名称遵循此处显示的模式:

mysql-cluster- license- ver- revdistroarch的.rpm,bundle.tar

您可以使用 tar 或首选工具 从此文件中提取单个RPM文件 以提取存档。

以下列表中给出了安装三种主要类型的NDB Cluster节点所需的组件:

  • 管理节点 management-server

  • 数据节点 data-node

  • SQL节点 server common

此外, client 应安装RPM以 在至少一个管理节点上 提供 ndb_mgm 管理客户端。 您可能还希望在SQL节点上安装它,以便 在这些 节点上提供 mysql 和其他MySQL客户端程序。 我们将在本节后面讨论按类型安装节点。

ver 表示 NDB 8.0中 的三部分 存储引擎版本号。 x 格式,如 8.0.17 示例中 所示 rev 提供RPM修订号 major minor 格式。 在本节所示的示例中,我们使用 1.1 此值。

distro (Linux发行)是一个 rhel5 (甲骨文Linux 5时,红帽企业Linux 4和5), el6 甲骨文Linux 6中,红帽企业Linux 6), el7 甲骨文的Linux 7,红帽企业Linux 7),或 sles12 (SUSE企业Linux 12)。 对于本节中的示例,我们假设主机运行Oracle Linux 7,Red Hat Enterprise Linux 7或等效项( el7 )。

arch 适用 i686 于32位RPM和 x86_64 64位版本。 在此处显示的示例中,我们假设使用64位平台。

RPM文件名中的NDB Cluster版本号(此处显示为 8.0.17 )可能会根据您实际使用的版本而有所不同。 非常重要的是,要安装的所有Cluster RPM都具有相同的版本号 该体系结构也应该适合安装RPM的机器; 特别是,您应该记住,64位RPM( x86_64 )不能与32位操作系统一起使用( i686 用于后者)。

数据节点。  在要承载NDB群集数据节点的计算机上,只需安装 data-node RPM。 为此,请将此RPM复制到数据节点主机,并以系统root用户身份运行以下命令,根据需要替换为RPM显示的名称,以匹配从MySQL网站下载的RPM的名称:

外壳> rpm -Uhv mysql-cluster-community-data-node-8.0.17-1.el7.x86_64.rpm

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

SQL节点。  RPM server common RPM 复制 到用于托管NDB Cluster SQL节点的每台计算机( server 需要 common )。 server 通过以系统root用户身份执行以下命令来 安装 RPM,根据需要替换为RPM显示的名称,以匹配从MySQL网站下载的RPM的名称:

外壳> rpm -Uhv mysql-cluster-community-server-8.0.17-1.el7.x86_64.rpm

这将 目录中 安装 具有 存储引擎支持 的MySQL服务器二进制文件( mysqld 它还安装了所有需要的MySQL服务器支持文件和有用的MySQL服务器程序,包括 mysql.server mysqld_safe 启动脚本( 分别 和中 )。 RPM安装程序应自动处理常规配置问题(如创建 用户和组,如果需要)。 NDB /usr/sbin /usr/share/mysql /usr/bin mysql

重要

您必须使用为NDB Cluster发布的这些RPM的版本; 那些为标准MySQL服务器发布的版本不支持 NDB 存储引擎。

要管理SQL节点(MySQL服务器),还应安装 client RPM,如下所示:

外壳> rpm -Uhv mysql-cluster-community-client-8.0.17-1.el7.x86_64.rpm

这将安装 MySQL的 客户端和其他MySQL客户端程序,如 中mysqladmin mysqldump的 ,对 /usr/bin

管理节点。  要安装NDB Cluster管理服务器,只需使用 management-server RPM。 将此RPM复制到用于托管管理节点的计算机,然后通过以系统root用户身份运行以下命令来安装它(根据需要替换为RPM显示的名称以匹配 management-server 从MySQL网站下载 的RPM的名称 ):

外壳> rpm -Uhv mysql-cluster-commercial-management-server-8.0.17-1.el7.x86_64.rpm

此RPM 目录中 安装管理服务器二进制文件 ndb_mgmd /usr/sbin 虽然这是运行管理节点实际需要的唯一程序,但同样也可以使用 ndb_mgm NDB集群管理客户端。 您可以 通过安装 RPM 来获取此程序以及其他 NDB 客户端程序(如 ndb_desc ndb_config) client 如前所述。

有关 使用Oracle 提供的RPM安装MySQL的一般信息 请参见 第2.5.4节“使用Oracle的RPM软件包在Linux上安装MySQL”

从RPM安装后,您仍然需要配置集群; 有关信息, 请参见 第22.2.4节“NDB群集的初始配置”

非常重要的是,要安装的所有Cluster RPM都具有相同的版本号 architecture 名称也应适用于安装RPM的机器; 特别是,您应该记住,64位RPM不能与32位操作系统一起使用。

数据节点。  在要托管群集数据节点的计算机上,只需安装 server RPM。 为此,请将此RPM复制到数据节点主机,并以系统root用户身份运行以下命令,根据需要替换为RPM显示的名称,以匹配从MySQL网站下载的RPM的名称:

外壳> rpm -Uhv MySQL-Cluster-server-gpl-8.0.17-1.sles11.i386.rpm

虽然这会安装所有NDB Cluster二进制文件,但 实际上只需要 程序 ndbd ndbmtd (都在其中 /usr/sbin )来运行NDB Cluster数据节点。

SQL节点。  在用于托管群集SQL节点的每台计算机上, server 通过以系统root用户身份执行以下命令来 安装 RPM,根据需要替换为RPM显示的名称,以匹配从MySQL网站下载的RPM的名称:

外壳> rpm -Uhv MySQL-Cluster-server-gpl-8.0.17-1.sles11.i386.rpm

这将 目录中 安装 具有 存储引擎支持 的MySQL服务器二进制文件( mysqld ,以及所有需要的MySQL服务器支持文件。 它还安装了 mysql.server mysqld_safe 启动脚本( 分别 和中 )。 RPM安装程序应自动处理常规配置问题(如创建 用户和组,如果需要)。 NDB /usr/sbin /usr/share/mysql /usr/bin mysql

要管理SQL节点(MySQL服务器),还应安装 client RPM,如下所示:

外壳> rpm -Uhv MySQL-Cluster-client-gpl-8.0.17-1.sles11.i386.rpm

这将安装 mysql 客户端程序。

管理节点。  要安装NDB Cluster管理服务器,只需使用 server RPM。 将此RPM复制到用于托管管理节点的计算机,然后通过以系统root用户身份运行以下命令来安装它(根据需要替换为RPM显示的名称以匹配 server 从MySQL网站下载 的RPM的名称 ):

外壳> rpm -Uhv MySQL-Cluster-server-gpl-8.0.17-1.sles11.i386.rpm

虽然此RPM安装了许多其他文件,但 实际上只需要 管理服务器二进制文件 ndb_mgmd (在 /usr/sbin 目录中)来运行管理节点。 server RPM还安装 ndb_mgm ,在 NDB 管理客户端。

有关 使用Oracle 提供的RPM安装MySQL的一般信息 请参见 第2.5.4节“使用Oracle的RPM软件包在Linux上安装MySQL” 有关所需的安装后配置的信息 请参见 第22.2.4节“NDB群集的初始配置”

22.2.2.3使用.deb文件安装NDB集群

本节提供有关在Debian和相关Linux发行版(如Ubuntu)上安装NDB Cluster的信息,使用 .deb Oracle提供 文件来实现此目的。

Oracle还为Debian和其他发行版提供了NDB Cluster APT存储库。 有关 说明和其他信息, 请参阅 使用APT存储库安装MySQL NDB群集

Oracle .deb 为32位和64位平台的NDB Cluster 提供 安装程序文件。 对于基于Debian的系统,只需要一个安装程序文件。 根据适用的NDB Cluster版本,Debian版本和体系结构,使用此处显示的模式命名此文件:

mysql-cluster-gpl- ndbver-debian debianver- arch.deb

这里 ndbver 是3部分 NDB 引擎版本号, debianver 是Debian( 8 9 的主要版本 arch i686 或者之一 x86_64 在下面的示例中,我们假设您希望在64位Debian 9系统上安装NDB 8.0.17; 在这种情况下,安装程序文件被命名 mysql-cluster-gpl-8.0.17-debian9-x86_64.deb-bundle.tar

下载完相应的 .deb 文件后,您可以解压缩它,然后使用命令行安装它 dpkg ,如下所示:

外壳> dpkg -i mysql-cluster-gpl-8.0.17-debian9-i686.deb

您也可以使用 dpkg 如下所示 删除它

外壳> dpkg -r mysql

安装程序文件还应与大多数使用 .deb 文件的 图形包管理器兼容 ,例如 GDebi Gnome桌面。

.deb 文件安装了NDB Cluster ,其中 包含MySQL服务器的2部分版本系列版本。 对于NDB 8.0,这始终是 目录布局与通用Linux二进制发行版的目录布局相同( 参见表2.3,“通用Unix / Linux二进制包的MySQL安装布局” ),但是找到启动脚本和配置文件 而不是 所有NDB Cluster可执行文件(例如 ndb_mgm ndbd ndb_mgmd )都放在 目录中。 /opt/mysql/server-version/ version 5.7 support-files share bin

22.2.2.4在Linux上从源构建NDB集群

本节提供有关在Linux和其他类Unix平台上编译NDB Cluster的信息。 从源代码构建NDB集群类似于构建标准MySQL服务器,尽管它在这里讨论的几个关键方面有所不同。 有关从源代码构建MySQL的一般信息,请参见 第2.9节“从源代码安装MySQL” 有关在Windows平台上编译NDB群集的信息,请参见 第22.2.3.2节“在Windows上从源代码编译和安装NDB群集”

构建MySQL NDB Cluster 8.0需要使用MySQL Server 8.0源代码。 这些可以从MySQL下载页面获得, 网址 https://dev.mysql.com/downloads/ 存档的源文件应具有类似的名称 mysql-8.0.17.tar.gz 您还可以从 launchpad.net 获取MySQL开发源代码

注意

在以前的版本中,不支持从标准MySQL服务器源构建NDB Cluster。 在MySQL 8.0和NDB Cluster 8.0中,情况已不再如此 - 这两种产品现在都是从相同的源构建的

CMake WITH_NDBCLUSTER 选项 导致构建管理节点,数据节点和其他NDB Cluster程序的二进制文件; 它还会导致 mysqld 存储引擎支持 一起编译 此选项(其别名或一个 )需要建立NDB簇时。 NDB WITH_NDBCLUSTER_STORAGE_ENGINE WITH_PLUGIN_NDBCLUSTER

重要

WITH_NDB_JAVA 默认情况下启用 选项。 这意味着,默认情况下,如果 CMake 无法在系统上找到Java的位置,则配置过程将失败; 如果您不希望启用Java和ClusterJ支持,则必须通过使用配置构建来明确指出 -DWITH_NDB_JAVA=OFF 用于 WITH_CLASSPATH 在需要时提供Java类路径。

有关 特定于构建NDB群集的 CMake 选项的 更多信息 ,请参阅 编译NDB群集的选项

运行 make && make install (或系统的等效)后,结果类似于将预编译二进制文件解压缩到同一位置所获得的结果。

管理节点。  从源构建并运行默认的 make install时 可以在中找到 管理服务器和管理客户端二进制文件( ndb_mgmd ndb_mgm /usr/local/mysql/bin 管理节点主机上 需要 ndb_mgmd ; 但是, 在同一主机上 存在 ndb_mgm 也是一个好主意 这些可执行文件都不需要主机文件系统上的特定位置。

数据节点。  数据节点主机上唯一需要的可执行文件是数据节点二进制文件 ndbd ndbmtd 例如, mysqld 不必存在于主机上。)默认情况下,从源构建时,此文件将放在目录中 /usr/local/mysql/bin 要在多个数据节点主机上安装,只需要 ndbd ndbmtd 需要复制到其他主机或机器。 (这假设所有数据节点主机使用相同的体系结构和操作系统;否则您可能需要为每个不同的平台单独编译。)数据节点二进制文件不必位于主机文件系统上的任何特定位置,只要位置已知。

从源代码编译NDB Cluster时,构建多线程数据节点二进制文件不需要特殊选项。 使用 NDB 存储引擎支持 配置构建 会导致 自动构建 ndbmtd ; make install ndbmtd 二进制 bin 文件与 mysqld ndbd ndb_mgm 一起 放在安装 目录中

SQL节点。  如果您使用群集支持编译MySQL,并执行默认安装(使用 make install 作为系统 root 用户), 则放置 mysqld /usr/local/mysql/bin 按照 第2.9节“从源安装MySQL”中 给出的步骤 使 mysqld 可以使用。 如果要运行多个SQL节点,可以 在多台计算机上 使用相同 mysqld 可执行文件及其关联支持文件 的副本 最简单的方法是复制整个 /usr/local/mysql 目录及其中包含的所有目录和文件到其他SQL节点主机,然后重复 每台计算机上的 第2.9节“从源安装MySQL”中 的步骤 如果使用非默认 PREFIX 选项 配置构建 ,则必须相应地调整目录。

第22.2.4节“NDB集群的初始配置”中 ,我们为示例NDB集群中的所有节点创建配置文件。

22.2.3在Windows上安装NDB集群

本节介绍Windows主机上NDB Cluster的安装过程。 适用于Windows的NDB Cluster 8.0二进制文件可从 https://dev.mysql.com/downloads/cluster/获取 有关从Oracle提供的二进制版本在Windows上安装NDB Cluster的信息,请参见 第22.2.3.1节“从二进制版本在Windows上安装NDB群集”

也可以使用Microsoft Visual Studio在Windows上从源代码编译和安装NDB Cluster。 有关更多信息,请参见 第22.2.3.2节“在Windows上从源代码编译和安装NDB集群”

22.2.3.1从二进制版本在Windows上安装NDB群集

本节介绍使用 Oracle提供 的二进制 无安装 NDB Cluster版本 在Windows上基本安装NDB Cluster ,使用本节开头概述的相同的4节点设置(请参见 第22.2节“NDB群集安装”) ),如下表所示:

表22.6示例集群中节点的网络地址

节点 IP地址
管理节点( mgmd 198.51.100.10
SQL节点( mysqld 198.51.100.20
数据节点“A”( ndbd 198.51.100.30
数据节点“B”( ndbd 198.51.100.40

与其他平台一样,运行SQL节点的NDB Cluster主机必须在其上安装MySQL Server二进制文件( mysqld.exe )。 您还应该 在此主机上 安装MySQL客户端( mysql.exe )。 对于管理节点和数据节点,没有必要安装MySQL Server二进制文件; 但是,每个管理节点都需要管理服务器守护程序( ndb_mgmd.exe ); 每个数据节点都需要数据节点守护程序( ndbd.exe ndbmtd.exe )。 对于此示例,我们将 ndbd.exe 称为数据节点可执行文件,但您可以安装 ndbmtd.exe ,这个程序的多线程版本,完全相同的方式。 您还应该 在管理服务器主机上 安装管理客户端( ndb_mgm.exe )。 本节介绍为每种类型的NDB Cluster节点安装正确的Windows二进制文件所需的步骤。

注意

与其他Windows程序一样,NDB Cluster可执行文件以 .exe 文件扩展名 命名 但是, .exe 从命令行调用这些程序时, 不必包含 扩展名。 因此,我们通常只是将本文档中的这些程序称为 mysqld mysql ndb_mgmd 等。 您应该明白,无论我们引用(例如) mysqld 还是 mysqld.exe ,任何一个名称都意味着相同的东西(MySQL Server程序)。

要使用Oracles的 no-install 二进制文件 设置NDB集群 ,安装过程的第一步是从 https://dev.mysql.com/downloads/cluster/ 下载最新的NDB集群Windows ZIP二进制存档 此存档具有文件名 ,其中 存储引擎版本(例如 ),并且 是体系结构( 对于32位二进制文​​件和 64位二进制文​​件)。 例如,命名了64位Windows系统的NDB Cluster 8.0.17存档 mysql-cluster-gpl-ver-winarch.zip ver NDB 8.0.17 arch 32 64 mysql-cluster-gpl-8.0.17-win64.zip

您可以在32位和64位版本的Windows上运行32位NDB Cluster二进制文件; 但是,64位NDB Cluster二进制文件只能用于64位版本的Windows。 如果在具有64位CPU的计算机上使用32位版本的Windows,则必须使用32位NDB群集二进制文件。

要最小化需要从Internet下载或在计算机之间复制的文件数,我们从您打算运行SQL节点的计算机开始。

SQL节点。  我们假设您已将存档的副本放在 IP地址为198.51.100.20的计算机上的 目录中 ,其中 是当前用户的名称。 (您可以 在命令行上 使用此名称 。)要将NDB Cluster可执行文件安装并运行为Windows服务,此用户应该是该 的成员 C:\Documents and Settings\username\My Documents\Downloads username ECHO %USERNAME% Administrators

从存档中提取所有文件。 与Windows资源管理器集成的提取向导足以完成此任务。 (如果使用其他存档程序,请确保它从存档中提取所有文件和目录,并保留存档的目录结构。)当系统要求您输入目标目录时,请输入 C:\ ,这会导致提取向导提取存档到目录 将此目录重命名为 C:\mysql-cluster-gpl-ver-winarch C:\mysql

可以将NDB Cluster二进制文件安装到除以外的目录 C:\mysql\bin ; 但是,如果这样做,则必须相应地修改此过程中显示的路径。 特别是,如果将MySQL服务器(SQL节点)二进制文件安装到 C:\mysql or 之外的位置 C:\Program Files\MySQL\MySQL Server 8.0 ,或者如果SQL节点的数据目录位于 C:\mysql\data or 之外的位置 C:\Program Files\MySQL\MySQL Server 8.0\data ,则必须在命令行上使用额外的配置选项或将其添加到 my.ini my.cnf 启动SQL节点时的文件。 有关配置MySQL服务器以在非标准位置运行的更多信息,请参见 第2.3.5节“在Microsoft Windows上使用 noinstall ZIP存档“

对于具有NDB群集支持的MySQL服务器作为NDB群集的一部分运行,必须使用选项 --ndbcluster 启动它 --ndb-connectstring 虽然您可以在命令行上指定这些选项,但将它们放在选项文件中通常更方便。 为此,请在记事本或其他文本编辑器中创建新的文本文件。 在此文件中输入以下配置信息:

的[mysqld]
#mysqld进程的选项:
ndbcluster#运行NDB存储引擎
ndb-connectstring = 198.51.100.10#管理服务器的位置

如果需要,您可以添加此MySQL服务器使用的其他选项(请参见 第2.3.5.2节“创建选项文件” ),但文件必须至少包含显示的选项。 将此文件另存为 C:\mysql\my.ini 这样就完成了SQL节点的安装和设置。

数据节点。  Windows主机上的NDB群集数据节点只需要一个可执行文件,即 ndbd.exe ndbmtd.exe之一 对于此示例,我们假设您使用的是 ndbd.exe ,但使用 ndbmtd.exe 时应用相同的说明 在这里你想运行一个数据节点(具有IP电脑地址198.51.100.30和198.51.100.40)每台计算机上,创建目录 C:\mysql C:\mysql\bin C:\mysql\cluster-data ; 然后,在计算机上,您下载并提取 no-install 档案,找到 ndbd.exe C:\mysql\bin 目录。 将此文件复制到 C:\mysql\bin 两个数据节点主机中的每个主机上 目录中。

要充当NDB群集的一部分,必须为每个数据节点提供管理服务器的地址或主机名。 在启动每个数据节点进程时,可以 使用 --ndb-connectstring or -c 选项在 命令行上提供此信息 但是,通常最好将此信息放在选项文件中。 为此,请在记事本或其他文本编辑器中创建新的文本文件,然后输入以下文本:

[mysql_cluster]
#数据节点进程选项:
ndb-connectstring = 198.51.100.10#管理服务器的位置

将此文件另存为 C:\mysql\my.ini 数据节点主机上。 创建包含相同信息的另一个文本文件,并将其保存 C:mysql\my.ini 在其他数据节点主机上,或将my.ini文件从第一个数据节点主机复制到第二个数据节点主机,确保将副本放在第二个数据节点的 C:\mysql 目录中。 现在,两个数据节点主机都可以在NDB群集中使用,只留下要安装和配置的管理节点。

管理节点。  用于托管NDB群集管理节点的计算机上所需的唯一可执行程序是管理服务器程序 ndb_mgmd.exe 但是,为了在NDB群集启动后对其进行管理, 还应 在与管理服务器相同的计算机上 安装NDB群集管理客户端程序 ndb_mgm.exe 在下载和解 no-install 压缩归档 的机器上找到这两个程序 ; 这应该是 C:\mysql\bin SQL节点主机上 的目录 创建目录 C:\mysql\bin 在具有IP地址198.51.100.10的计算机上,然后将两个程序复制到此目录。

您现在应该创建两个配置文件供以下用户使用 ndb_mgmd.exe

  1. 本地配置文件,用于提供特定于管理节点本身的配置数据。 通常,此文件只需提供NDB Cluster全局配置文件的位置(请参阅第2项)。

    要创建此文件,请在记事本或其他文本编辑器中启动新文本文件,然后输入以下信息:

    [mysql_cluster]
    #管理节点进程的选项
    配置文件中= C:/mysql/bin/config.ini
    

    将此文件另存为文本文件 C:\mysql\bin\my.ini

  2. 一个全局配置文件,管理节点可以从中获取整个NDB集群的配置信息。 此文件至少必须包含NDB群集中每个节点的一个部分,以及管理节点和所有数据节点的IP地址或主机名( HostName 配置参数)。 还建议包括以下附加信息:

    使用文本编辑器(如记事本)创建新的文本文件,并输入以下信息:

    [ndbd默认]
    #影响所有数据节点上的ndbd进程的选项:
    NoOfReplicas = 2#副本数
    DataDir = C:/ mysql / cluster-data#每个数据节点的数据文件的目录
                                        #目录路径中使用的正斜杠,
                                        #而不是反斜杠。这是对的;
                                        #参见文本中的重要说明
    DataMemory = 80M#分配给数据存储的内存
    IndexMemory = 18M#内存分配给索引存储
                      #对于DataMemory和IndexMemory,我们使用了
                      # 默认值。由于“世界”数据库占用了
                      #只有大约500KB,这应该足够了
                      #此示例群集设置。
    
    [ndb_mgmd]
    #管理流程选项:
    HostName = 198.51.100.10#管理节点的主机名或IP地址
    DataDir = C:/ mysql / bin / cluster-logs#管理节点日志文件的目录
    
    [NDBD]
    #数据节点“A”的选项:
                                    #(每个数据节点一个[ndbd]部分)
    HostName = 198.51.100.30#主机名或IP地址
    
    [NDBD]
    #数据节点“B”的选项:
    HostName = 198.51.100.40#主机名或IP地址
    
    的[mysqld]
    #SQL节点选项:
    HostName = 198.51.100.20#主机名或IP地址
    

    将此文件另存为文本文件 C:\mysql\bin\config.ini

重要

\ 在Windows上的NDB Cluster使用的程序选项或配置文件中指定目录路径时,不能使用 单个反斜杠字符( )。 相反,您必须使用第二个反斜杠( \\ 转义每个反斜杠字符 ,或者使用正斜杠字符( / 替换反斜杠 例如, [ndb_mgmd] NDB群集 config.ini 文件 部分中 的以下行 不起作用:

DATADIR = C:\ MySQL的\ BIN \群集日志

相反,您可以使用以下任一方法:

DataDir = C:\\ mysql \\ bin \\ cluster-logs #Eascaped反斜杠
DataDir = C:/ mysql / bin / cluster-logs#正斜杠

出于简洁和易读的原因,我们建议您在Windows上的NDB群集程序选项和配置文件中使用的目录路径中使用正斜杠。

22.2.3.2在Windows上从源代码编译和安装NDB集群

Oracle为Windows提供了预编译的NDB Cluster二进制文件,这对大多数用户来说应该是足够的。 但是,如果您愿意,也可以从源代码编译NDB Cluster for Windows。 执行此操作的过程几乎与用于编译Windows的标准MySQL Server二进制文件的过程相同,并使用相同的工具。 但是,有两个主要区别:

  • 要构建NDB Cluster 8.0,请使用MySQL Server 8.0源,您可以从 https://dev.mysql.com/downloads/ 获取这些源

    以前,NDB Cluster使用自己的源代码。 在MySQL 8.0和NDB Cluster 8.0中,情况已不再如此, 现在这两种产品都是从同一个源构建的

  • WITH_NDBCLUSTER 除了要与 CMake 一起使用的任何其他构建选项之外,还 必须使用该 选项 配置构建 WITH_NDBCLUSTER_STORAGE_ENGINE WITH_PLUGIN_NDBCLUSTER 作为别名支持 WITH_NDBCLUSTER ,并以完全相同的方式工作。

重要

WITH_NDB_JAVA 默认情况下启用 选项。 这意味着,默认情况下,如果 CMake 无法在系统上找到Java的位置,则配置过程将失败; 如果您不希望启用Java和ClusterJ支持,则必须通过使用配置构建来明确指出 -DWITH_NDB_JAVA=OFF (缺陷号12379735)用于 WITH_CLASSPATH 在需要时提供Java类路径。

有关 特定于构建NDB群集的 CMake 选项的 更多信息 ,请参阅 编译NDB群集的选项

构建过程完成后,您可以创建包含已编译二进制文件的Zip存档; 第2.9.2节“使用标准源分发安装MySQL” 提供了在Windows系统上执行此任务所需的命令。 NDB集群二进制文件可以 bin 在生成的归档 目录中 找到,该 目录等同于 no-install 归档,并且可以以相同的方式安装和配置。 有关更多信息,请参见 第22.2.3.1节“从二进制发行版在Windows上安装NDB集群”

22.2.3.3在Windows上初始启动NDB群集

一旦NDB群集可执行文件和所需的配置文件到位,执行群集的初始启动只需启动群集中所有节点的NDB群集可执行文件。 每个群集节点进程必须单独启动,并在其所在的主机上启动。 应首先启动管理节点,然后启动数据节点,最后启动任何SQL节点。

  1. 在管理节点主机上,从命令行发出以下命令以启动管理节点进程。 输出应该类似于此处显示的内容:

    C:\ mysql的\ BIN> ndb_mgmd
    2010-06-23 07:53:34 [MgmtSrvr] INFO  -  NDB集群管理服务器。的mysql-8.0.17-NDB-8.0.17
    2010-06-23 07:53:34 [MgmtSrvr] INFO  - 从'config.ini'读取集群配置
    

    管理节点进程继续将日志记录输出打印到控制台。 这是正常现象,因为管理节点未作为Windows服务运行。 (如果你在类似Unix的平台上使用NDB Cluster,你可能会注意到管理节点在Windows上的这方面的默认行为实际上与它在Unix系统上的行为相反,在Unix系统上它默认运行为Unix守护程序进程。在Windows上运行的NDB集群数据节点进程也是如此。)因此,请不要关闭 运行 ndb_mgmd.exe 的窗口 ; 这样做会杀死管理节点进程。 (看到 第22.2.3.4节“将NDB集群进程安装为Windows服务” ,其中显示如何将NDB集群进程安装和运行为Windows服务。)

    required -f 选项告诉管理节点在哪里可以找到全局配置文件( config.ini )。 这个选项的长形式是 --config-file

    重要

    NDB群集管理节点缓存从中读取的配置数据 config.ini ; 一旦它创建了配置缓存,它将 config.ini 在后续启动 时忽略该 文件,除非强制执行其他操作。 这意味着,如果管理节点由于此文件中的错误而无法启动,则必须 config.ini 在更正 管理节点中的 任何错误后 重新读取管理节点 您可以通过 在命令行上 使用 选项 启动 ndb_mgmd.exe 来执行此操作 这些选项中的任何一个都可用于刷新配置缓存。 --reload --initial

    在管理节点的 my.ini 文件中 使用这些选项之一是不必要或不可取的

    有关可与 ndb_mgmd 一起使用的选项的其他信息 ,请参见 第22.4.4节“ ndb_mgmd - NDB集群管理服务器守护程序” ,以及 第22.4.31节“NDB集群程序常用选项 - NDB集群通用选项”节目“

  2. 在每个数据节点主机上,运行此处显示的命令以启动数据节点进程:

    C:\ mysql的\ BIN> ndbd
    2010-06-23 07:53:46 [ndbd] INFO  - 从'localhost:1186'获取的配置,代:1
    

    在每种情况下,数据节点进程的第一行输出应类似于前面示例中显示的内容,然后是其他日志输出行。 与管理节点进程一样,这是正常的,因为数据节点未作为Windows服务运行。 因此,请不要关闭运行数据节点进程的控制台窗口; 这样做会杀死 ndbd.exe (有关更多信息,请参见 第22.2.3.4节“将NDB集群进程安装为Windows服务” 。)

  3. 不要启动SQL节点; 在数据节点完成启动之前,它无法连接到群集,这可能需要一些时间。 而是在管理节点主机上的新控制台窗口中,启动NDB群集管理客户端 ndb_mgm.exe ,该 客户端 应位于 C:\mysql\bin 管理节点主机上。 (不要尝试 通过键入 CTRL + C 来重新使用 运行 ndb_mgmd.exe 的控制台窗口 ,因为这会导致管理节点死亡。)结果输出应如下所示:

    C:\ mysql的\ BIN> ndb_mgm
    -  NDB群集 - 管理客户端 - 
    ndb_mgm>
    

    出现提示时 ndb_mgm> ,这表示管理客户端已准备好接收NDB群集管理命令。 您可以通过 ALL STATUS 在管理客户端提示符处 输入来 查看 数据节点开始时的状态 此命令导致数据节点的启动顺序的运行报告,其应如下所示:

    ndb_mgm> ALL STATUS
    连接到Management Server:localhost:1186
    节点2:启动(上次完成阶段3)(mysql-8.0.17-ndb-8.0.17)
    节点3:启动(上次完成阶段3)(mysql-8.0.17-ndb-8.0.17)
    
    节点2:启动(上次完成阶段4)(mysql-8.0.17-ndb-8.0.17)
    节点3:启动(上次完成阶段4)(mysql-8.0.17-ndb-8.0.17)
    
    节点2:已启动(版本8.0.17)
    节点3:已启动(版本8.0.17)
    
    ndb_mgm>
    
    注意

    管理客户端中发出的命令不区分大小写; 我们使用大写作为这些命令的规范形式,但在将它们输入到 ndb_mgm 客户端 时,不需要遵守此约定 有关更多信息,请参见 第22.5.2节“NDB集群管理客户端中的命令”

    ALL STATUS 根据数据节点能够启动的速度,您正在使用的NDB Cluster软件的发行版本号以及其他因素, 产生的输出 可能与此处显示的不同。 重要的是,当您看到两个数据节点都已启动时,您就可以启动SQL节点了。

    你可以让 ndb_mgm.exe 运行; 它对NDB集群的性能没有负面影响,我们在下一步中使用它来验证SQL节点在启动后是否已连接到集群。

  4. 在指定为SQL节点主机的计算机上,打开控制台窗口并导航到解压缩NDB群集二进制文件的目录(如果您按照我们的示例,这是 C:\mysql\bin )。

    通过 从命令行 调用 mysqld.exe 启动SQL节点 ,如下所示:

    C:\ mysql的\ BIN> mysqld --console
    

    --console 选项会将日志记录信息写入控制台,这在出现问题时非常有用。 (一旦您对SQL节点以令人满意的方式运行感到满意,您可以停止它并在没有该 --console 选项的 情况下重新启动它 ,以便正常执行日志记录。)

    管理节点主机上运行 管理客户机( ndb_mgm.exe 的控制台窗口中 ,输入 SHOW 命令,该命令应生成类似于此处所示的输出:

    ndb_mgm> SHOW
    连接到Management Server:localhost:1186
    群集配置
    ---------------------
    [ndbd(NDB)] 2个节点
    id = 2 @ 198.51.100.30(版本:8.0.17-ndb-8.0.17,节点组:0,*)
    id = 3 @ 198.51.100.40(版本:8.0.17-ndb-8.0.17,节点组:0)
    
    [ndb_mgmd(MGM)] 1个节点
    id = 1 @ 198.51.100.10(版本:8.0.17-ndb-8.0.17)
    
    [mysqld(API)] 1个节点
    id = 4 @ 198.51.100.20(版本:8.0.17-ndb-8.0.17)
    

    您还可以 使用该 语句 验证SQL节点是否已连接到 mysql 客户端( mysql.exe )中 的NDB群集 SHOW ENGINE NDB STATUS

您现在应该已准备好使用NDB Cluster的 NDBCLUSTER 存储引擎 处理数据库对象和数据 有关 更多信息和示例 请参见 第22.2.6节“带表和数据的NDB集群示例”

您还可以将 ndb_mgmd.exe ndbd.exe ndbmtd.exe 安装 为Windows服务。 有关如何执行此操作的信息,请参见 第22.2.3.4节“将NDB集群进程安装为Windows服务”

22.2.3.4将NDB集群进程安装为Windows服务

一旦您对NDB Cluster按需运行感到满意,就可以将管理节点和数据节点安装为Windows服务,以便在Windows启动或停止时自动启动和停止这些进程。 这也使得可以使用适当的 SC START SC STOP 命令 从命令行控制这些进程 ,或使用Windows图形 服务 实用程序。 也可以使用 NET START NET STOP 命令。

通常,必须使用具有系统管理员权限的帐户来安装程序作为Windows服务。

要在Windows上将管理节点作为服务安装 ,请使用 选项 从托管管理节点的计算机上的命令行 调用 ndb_mgmd.exe --install ,如下所示:

C:\> C:\mysql\bin\ndb_mgmd.exe --install
安装服务'NDB Cluster Management Server'
  as'“C:\ mysql \ bin \ ndbd.exe”“ -  service = ndb_mgmd”'
服务已成功安装。
重要

将NDB Cluster程序安装为Windows服务时,应始终指定完整路径; 否则服务安装可能会失败并显示错误 系统找不到指定的文件

--install 必须首先使用 选项,优先于可能为 ndb_mgmd.exe 指定的任何其他选项 但是,最好在选项文件中指定此类选项。 如果您的选项文件不在 ndb_mgmd.exe 输出中显示的默认位置之一,则 --help 可以使用该 --config-file 选项 指定位置

现在您应该可以像这样启动和停止管理服务器:

C:\> SC START ndb_mgmd

C:\> SC STOP ndb_mgmd
注意

如果使用 NET 命令,您还可以使用描述性名称将管理服务器作为Windows服务启动或停止,如下所示:

C:\> NET START 'NDB Cluster Management Server'
NDB Cluster Management Server服务正在启动。
NDB Cluster Management Server服务已成功启动。

C:\> NET STOP  'NDB Cluster Management Server'
NDB群集管理服务器服务正在停止..
NDB群集管理服务器服务已成功停止。

指定短服务名称或允许在安装服务时使用默认服务名称,然后在启动或停止服务时引用该名称通常更简单。 要指定除以外的服务名称 ndb_mgmd ,请将其附加到 --install 选项,如以下示例所示:

C:\> C:\mysql\bin\ndb_mgmd.exe --install=mgmd1
安装服务'NDB Cluster Management Server'
  as'“C:\ mysql \ bin \ ndb_mgmd.exe”“ -  service = mgmd1”'
服务已成功安装。

现在,您应该能够使用您指定的名称启动或停止服务,如下所示:

C:\> SC START mgmd1

C:\> SC STOP mgmd1

要删除管理节点服务,请使用 SC DELETE service_name

C:\> SC DELETE mgmd1

或者, 使用 选项 调用 ndb_mgmd.exe --remove ,如下所示:

C:\> C:\mysql\bin\ndb_mgmd.exe --remove
删除服务'NDB Cluster Management Server'
服务已成功删除。

如果使用非默认服务名称安装服务,请将服务名称作为 ndb_mgmd.exe --remove 选项 的值传递 ,如下所示:

C:\> C:\mysql\bin\ndb_mgmd.exe --remove=mgmd1
删除服务'mgmd1'
服务已成功删除。

使用 ndbd.exe (或 ndbmtd.exe --install 选项, 可以以类似的方式安装NDB Cluster数据节点进程作为Windows服务 ,如下所示:

C:\> C:\mysql\bin\ndbd.exe --install
将服务'NDB Cluster Data Node Daemon'安装为'“C:\ mysql \ bin \ ndbd.exe”“ -  service = ndbd”'
服务已成功安装。

现在,您可以启动或停止数据节点,如以下示例所示:

C:\> SC START ndbd

C:\> SC STOP ndbd

要删除数据节点服务,请使用 SC DELETE service_name

C:\> SC DELETE ndbd

或者, 使用 选项 调用 ndbd.exe --remove ,如下所示:

C:\> C:\mysql\bin\ndbd.exe --remove
删除服务'NDB群集数据节点守护程序'
服务已成功删除。

ndb_mgmd.exe (和 mysqld.exe )一样,在将 ndbd.exe 作为Windows服务 安装时 ,您还可以将服务的名称指定为值 --install ,然后在启动或停止服务时使用它,如下所示:

C:\> C:\mysql\bin\ndbd.exe --install=dnode1
将服务'dnode1'安装为'“C:\ mysql \ bin \ ndbd.exe”“ -  service = dnode1”'
服务已成功安装。

C:\> SC START dnode1

C:\> SC STOP dnode1

如果在安装数据节点服务时指定了服务名称,则在删除它时也可以使用此名称,如下所示:

C:\> SC DELETE dnode1

或者,您可以将服务名称作为 ndbd.exe --remove 选项 的值传递 ,如下所示:

C:\> C:\mysql\bin\ndbd.exe --remove=dnode1
删除服务'dnode1'
服务已成功删除。

使用 mysqld --install SC START SC STOP SC DELETE (或 mysqld --remove 以类似的方式安装SQL节点作为Windows服务,启动服务,停止服务和删除服务 NET 命令也可用于启动或停止服务。 有关其他信息,请参见 第2.3.5.8节“将MySQL作为Windows服务启动”

22.2.4 NDB集群的初始配置

在本节中,我们将通过创建和编辑配置文件来讨论已安装的NDB群集的手动配置。

NDB Cluster还提供GUI安装程序,可用于执行配置,而无需在单独的应用程序中编辑文本文件。 有关更多信息,请参见 第22.2.1节“NDB集群自动安装程序”

对于我们的四节点,四主机NDB集群(请参阅 集群节点和主机 ),有必要编写四个配置文件,每个节点主机一个。

  • 每个数据节点或SQL节点都需要一个 my.cnf 提供两条信息 文件:一个 告诉节点在哪里找到管理节点 连接字符串 ,以及一条告诉该主机(托管数据节点的机器)上的MySQL服务器的线路该 NDBCLUSTER 存储引擎。

    有关连接字符串的更多信息,请参见 第22.3.3.3节“NDB集群连接字符串”

  • 管理节点需要一个 config.ini 文件,告诉它要维护多少个副本,为每个数据节点分配数据和索引的内存量,在哪里查找数据节点,在每个数据节点上将数据保存到磁盘的位置以及在哪里查找任何SQL节点。

配置数据节点和SQL节点。  my.cnf 数据节点所需 文件非常简单。 配置文件应位于 /etc 目录中,并可使用任何文本编辑器进行编辑。 (如果文件不存在,则创建该文件。)例如:

外壳> vi /etc/my.cnf
注意

我们 在这里使用 vi 来创建文件,但任何文本编辑器都应该可以正常工作。

对于我们的示例设置中的每个数据节点和SQL节点, my.cnf 应如下所示:

的[mysqld]
#mysqld进程的选项:
ndbcluster#运行NDB存储引擎

[mysql_cluster]
#NDB Cluster进程的选项:
ndb-connectstring = 198.51.100.10#管理服务器的位置

输入上述信息后,保存该文件并退出文本编辑器。 对托管数据节点 A ,数据节点 B 和SQL节点 的计算机执行此操作

重要

一旦你开始 的mysqld 与过程 ndbcluster ,并 ndb-connectstring 在参数 [mysqld] [mysql_cluster] 该路段 my.cnf 的文件如前所示,你不能执行 CREATE TABLE 或者 ALTER TABLE 不具有实际开始集群语句。 否则,这些语句将失败并显示错误。 这是设计的。

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

shell> mkdir /var/lib/mysql-cluster
shell> cd /var/lib/mysql-cluster
shell>vi config.ini

对于我们的代表性设置,该 config.ini 文件应如下所示:

[ndbd默认]
#影响所有数据节点上的ndbd进程的选项:
NoOfReplicas = 2#副本数
DataMemory = 98M#为数据存储分配多少内存

[ndb_mgmd]
#管理流程选项:
HostName = 198.51.100.10 #MAMM节点的主机名或IP地址
DataDir = / var / lib / mysql-cluster #MaM节点日志文件的目录

[NDBD]
#数据节点“A”的选项:
                                #(每个数据节点一个[ndbd]部分)
HostName = 198.51.100.30#主机名或IP地址
NodeId = 2#此数据节点的节点ID
DataDir = / usr / local / mysql / data#此数据节点的数据文件的目录

[NDBD]
#数据节点“B”的选项:
HostName = 198.51.100.40#主机名或IP地址
NodeId = 3#此数据节点的节点ID
DataDir = / usr / local / mysql / data#此数据节点的数据文件的目录

的[mysqld]
#SQL节点选项:
HostName = 198.51.100.20#主机名或IP地址
                                #(其他mysqld连接可以是
                                #为此节点指定各种
                                #目的,如运行ndb_restore)
注意

world 数据库可以从 https://dev.mysql.com/doc/index-other.html 下载

在创建所有配置文件并指定了这些最小选项之后,您就可以继续启动集群并验证所有进程是否正在运行。 我们将在 第22.2.5节“NDB集群的初始启动”中 讨论如何完成此操作

有关可用NDB群集配置参数及其用法的更多详细信息,请参见 第22.3.3节“NDB群集配置文件” 第22.3 节“NDB群集的配置 有关与备份相关的NDB Cluster的配置,请参见 第22.5.3.3节“NDB集群备份的配置”

注意

Cluster管理节点的默认端口是1186; 数据节点的默认端口是2202.但是,群集可以自动为那些已经空闲的数据节点分配端口。

22.2.5 NDB集群的初始启动

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

  1. 在管理主机上,从系统shell发出以下命令以启动管理节点进程:

    外壳> ndb_mgmd -f /var/lib/mysql-cluster/config.ini
    

    第一次启动时, 必须使用 选项 告诉 ndb_mgmd 在哪里找到其配置文件 (有关详细 信息, 请参见 第22.4.4节“ ndb_mgmd - NDB群集管理服务器守护程序” 。) -f --config-file

    有关可与 ndb_mgmd 一起使用的其他选项 ,请参见 第22.4.31节“NDB群集程序常用选项 - NDB群集程序常用选项”

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

    外壳> ndbd
    
  3. 如果您使用RPM文件在SQL节点所在的群集主机上安装MySQL,则可以(并且应该)使用提供的启动脚本在SQL节点上启动MySQL服务器进程。

如果一切顺利,并且群集已正确设置,则群集现在应该可以运行。 您可以通过调用 ndb_mgm 管理节点客户端 来测试它 输出应该如下所示,尽管您可能会看到输出略有不同,具体取决于您使用的MySQL的确切版本:

外壳> ndb_mgm
-  NDB群集 - 管理客户端 - 
ndb_mgm> SHOW
连接到Management Server:localhost:1186
群集配置
---------------------
[ndbd(NDB)] 2个节点
id = 2 @ 198.51.100.30(版本:8.0.17-ndb-8.0.17,节点组:0,*)
id = 3 @ 198.51.100.40(版本:8.0.17-ndb-8.0.17,节点组:0)

[ndb_mgmd(MGM)] 1个节点
id = 1 @ 198.51.100.10(版本:8.0.17-ndb-8.0.17)

[mysqld(API)] 1个节点
id = 4 @ 198.51.100.20(版本:8.0.17-ndb-8.0.17)

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

注意

为输出中的给定NDB Cluster SQL或其他API节点显示的IP地址 SHOW 是SQL或API节点用于连接到群集数据节点而不是任何管理节点的地址。

您现在应该已准备好使用NDB Cluster中的数据库,表和数据。 有关 简要讨论, 请参见 第22.2.6节“带表和数据的NDB集群示例”

22.2.6带表和数据的NDB集群示例

注意

本节中的信息适用于在Unix和Windows平台上运行的NDB Cluster。

在NDB Cluster中使用数据库表和数据与在标准MySQL中这样做没有太大区别。 要记住两点要点:

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

    CREATE TABLE tbl_name)ENGINE = NDBCLUSTER;
    col_name column_definitions

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

    ALTER TABLE tbl_nameENGINE = NDBCLUSTER;
    
  • 每个 NDBCLUSTER 表都有一个主键。 如果在创建表时用户未定义主键,则 NDBCLUSTER 存储引擎会自动生成隐藏的 主键 这样的密钥占用空间就像任何其他表索引一样。 (由于内存不足以容纳这些自动创建的索引,因此遇到问题的情况并不少见。)

如果使用 mysqldump 的输出从现有数据库导入表 ,则可以在文本编辑器中打开SQL脚本,并将该 ENGINE 选项 添加 到任何表创建语句,或替换任何现有 ENGINE 选项。 假设您 world 在另一台不支持NDB Cluster的MySQL服务器上 安装了 示例数据库,并且您想要导出该 City 表:

外壳> mysqldump --add-drop-table world City > city_table.sql

生成的 city_table.sql 文件将包含此表创建语句(以及 INSERT 导入表数据所需 语句):

DROP TABLE IF EXISTS`City`;
CREATE TABLE`City`(
  `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默认为'0',
  主键(`ID`)
)ENGINE = MyISAM DEFAULT CHARSET = latin1;

插入“城市”价值观(1,'喀布尔','AFG','卡博尔',1780000);
插入“城市”价值观(2,'坎大哈','AFG','坎大哈',237500);
插入“城市”价值观(3,'赫拉特','AFG','赫拉特',186800);
(remaining INSERT statements omitted)

您需要确保MySQL使用 NDBCLUSTER 此表 存储引擎。 有两种方法可以实现。 其中之一是在将表定义 导入Cluster数据库 之前 修改表定义 City 表格为例,修改 ENGINE 定义选项,如下所示:

DROP TABLE IF EXISTS`City`;
CREATE TABLE`City`(
  `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默认为'0',
  主键(`ID`)ENGINE = NDBCLUSTER DEFAULT CHARSET = latin1;

插入“城市”价值观(1,'喀布尔','AFG','卡博尔',1780000);
插入“城市”价值观(2,'坎大哈','AFG','坎大哈',237500);
插入“城市”价值观(3,'赫拉特','AFG','赫拉特',186800);
(remaining INSERT statements omitted)

必须对要成为集群数据库一部分的每个表的定义执行此操作。 完成此操作的最简单方法是对包含定义的文件执行搜索和替换,并替换所有 带有的 实例 如果您不想修改文件,可以使用未修改的文件创建表,然后使用 更改其存储引擎。 详情将在本节后面给出。 TYPE=engine_name ENGINE=engine_name ENGINE=NDBCLUSTER ALTER TABLE

假设您已经创建了一个 world 在集群的SQL节点上 命名的数据库 ,那么您可以使用 mysql 命令行客户端来读取 city_table.sql ,并以通常的方式创建和填充相应的表:

外壳> mysql world < city_table.sql

请记住,必须在运行SQL节点的主机上执行上述命令(在本例中,在具有IP地址的计算机上 198.51.100.20 ,这一点非常重要

world 在SQL节点上 创建整个 数据库 的副本,请在 非群集服务器上 使用 mysqldump 将数据库导出到名为的文件 world.sql (例如,在 /tmp 目录中)。 然后修改刚才描述的表定义,并将文件导入到集群的SQL节点,如下所示:

外壳> mysql world < /tmp/world.sql

如果将文件保存到其他位置,请相应地调整前面的说明。

SELECT 在SQL节点上 运行 查询与在MySQL服务器的任何其他实例上 运行 查询没有什么不同。 要从命令行运行查询,首先需要以通常的方式登录MySQL Monitor( root Enter password: 提示符下 指定 密码 ):

外壳> mysql -u root -p
输入密码:
欢迎使用MySQL监视器。命令以;结尾; 或\ g。
您的MySQL连接ID为1到服务器版本:8.0.17-ndb-8.0.17

输入'help;' 或'\ h'寻求帮助。输入'\ c'清除缓冲区。

MySQL的>

我们只是使用MySQL服务器的 root 帐户,并假设您已遵循安装MySQL服务器的标准安全预防措施,包括设置强 root 密码。 有关更多信息,请参见 第2.10.4节“保护初始MySQL帐户”

值得考虑的是,NDB Cluster节点 在访问彼此时 使用MySQL权限系统。 设置或更改MySQL用户帐户(包括 root 帐户)只会影响访问SQL节点的应用程序,而不会影响节点之间的交互。 有关 更多信息 请参见 第22.5.12.2节“NDB集群和MySQL权限”

如果 ENGINE 在导入SQL脚本之前未修改表定义中 子句,则此时应运行以下语句:

mysql> USE world;
mysql> ALTER TABLE City ENGINE=NDBCLUSTER;
mysql> ALTER TABLE Country ENGINE=NDBCLUSTER;
mysql>ALTER TABLE CountryLanguage ENGINE=NDBCLUSTER;

选择数据库并 对该数据库中的表 运行 SELECT 查询也是以通常的方式完成的,就像退出MySQL Monitor一样:

mysql> USE world;
mysql>SELECT Name, Population FROM City ORDER BY Population DESC LIMIT 5;
+ ----------- ------------ + +
| 名称| 人口|
+ ----------- ------------ + +
| 孟买| 10500000 |
| 首尔| 9981619 |
| 圣保罗| 9968485 |
| 上海| 9696300 |
| 雅加达| 9604900 |
+ ----------- ------------ + +
5行(0.34秒)

MySQL的> \q
再见

外壳>

使用MySQL的应用程序可以使用标准API来访问 NDB 表。 请务必记住,您的应用程序必须访问SQL节点,而不是管理或数据节点。 这个简短的例子展示了我们如何 SELECT 通过使用在 mysqli 网络上其他地方的W​​eb服务器上运行 的PHP 5.X 扩展 执行 刚刚显示 语句

<!DOCTYPE HTML PUBLIC“ -  // W3C // DTD HTML 4.01 Transitional // E