文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  NDB Cluster 核心概念

25.2.1 NDB Cluster 核心概念

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

可以为 NDBCLUSTER 存储引擎配置一系列故障转移和负载均衡选项,但最简单的方法是从集群级别开始。NDB Cluster 的 NDB 存储引擎包含一整套数据,仅依赖于集群本身内的其他数据。

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

注意

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

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

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

  • 数据节点: 此类型节点存储集群数据。数据节点的数量等于碎片副本的数量乘以碎片的数量(参见 第 25.2.2 节,“NDB Cluster 节点、节点组、碎片副本和分区”)。例如,如果两个碎片副本,每个副本有两个碎片,则需要四个数据节点。一个碎片副本足以用于数据存储,但没有提供冗余;因此,建议有两个(或更多)碎片副本以提供冗余,从而实现高可用性。数据节点使用命令 ndbd 启动(参见 第 25.5.1 节,“ndbd — NDB Cluster 数据节点守护进程”)或 ndbmtd 启动(参见 第 25.5.3 节,“ndbmtd — NDB Cluster 数据节点守护进程(多线程)”)。

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

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

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

重要

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

有关 NDB Cluster 中节点、节点组、碎片副本和分区之间关系的简要介绍,请参见 第 25.2.2 节,“NDB Cluster 节点、节点组、碎片副本和分区”

集群的配置涉及配置集群中的每个单个节点并设置节点之间的单个通信链接。NDB Cluster 当前的设计意图是数据节点在处理器能力、内存空间和带宽方面是同构的。此外,为了提供单点配置,整个集群的所有配置数据都位于一个配置文件中。

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

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

标准 MySQL 客户端。  NDB Cluster 可以与用 PHP、Perl、C、C++、Java、Python 等编写的现有 MySQL 应用程序一起使用。此类客户端应用程序以与它们与独立 MySQL 服务器交互的方式大致相同的方式将 SQL 语句发送到充当 NDB Cluster SQL 节点的 MySQL 服务器并从这些服务器接收响应。

使用 NDB Cluster 作为数据源的 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 Cluster 数据,绕过可能连接到集群的任何 MySQL 服务器,使用 NDB API,这是一个高级 C++ API。此类应用程序可能适用于不需要对数据进行 SQL 接口的特殊目的。有关更多信息,请参见 NDB API

NDB 特定的 Java 应用程序也可以使用 NDB Cluster Connector for Java 为 NDB Cluster 编写。此 NDB Cluster Connector 包括 ClusterJ,这是一个类似于 Hibernate 和 JPA 等对象关系映射持久性框架的高级数据库 API,它直接连接到 NDBCLUSTER,因此不需要访问 MySQL 服务器。有关更多信息,请参见 Java 和 NDB Cluster 以及 ClusterJ API 和数据对象模型

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

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

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

事件日志。  NDB Cluster 按类别(启动、关闭、错误、检查点等)、优先级和严重性记录事件。可以在 第 25.6.3 节,“NDB Cluster 中生成的事件报告” 中找到所有可报告事件的完整列表。事件日志有两种类型,如下所示

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

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

注意

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

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

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

    NDB 8.4 支持部分 LCP,在某些情况下可以显着提高性能。请参阅有关 EnablePartialLcpRecoveryWork 配置参数的说明,这些参数启用了部分 LCP 并控制了它们使用的存储量。

  • 全局检查点 (GCP): 当所有节点的事务同步且重做日志刷入磁盘时,每隔几秒钟就会发生一次 GCP。

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

传输器。 我们使用术语 传输器 来指代数据节点之间使用的数据传输机制。MySQL NDB Cluster 8.4 支持三种,这里列出它们

由于它无处不在,大多数用户在 NDB Cluster 中使用以太网上的 TCP/IP。

无论使用哪种传输器,NDB 都试图确保数据节点进程之间的通信使用尽可能大的块执行,因为这对所有类型的数据传输都有利。