21.1 NDB 群集概述

NDB 群集是一项使无共享系统中的内存数据库得以群集的技术。无共享架构使系统可以使用非常便宜的硬件,并且对硬件或软件的特定要求最少。

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

NDB Cluster 将标准 MySQL 服务器与名为NDB的内存中群集存储引擎集成在一起(该引擎 table 示“ * N 工作 D 数据 B * ase”)。在我们的文档中,术语NDBtable 示特定于存储引擎的设置部分,而“ MySQL NDB 群集”指的是一台或多台 MySQL 服务器与NDB存储引擎的组合。

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

图 21.1 NDB 群集组件

在此群集中,三个 MySQL 服务器(mysqld 程序)是 SQL 节点,它们提供对存储数据的四个数据节点(ndbd 程序)的访问。 SQL 节点和数据节点受 NDBManagement 服务器(ndb_mgmd 程序)的控制。各种 Client 端和 API 可以与 SQL 节点进行交互-mysqlClient 端,MySQL C API,PHP,Connector/J 和 Connector/NET。还可以使用 NDB API 与数据节点或 NDBManagement 服务器进行交互来创建自定义 Client 端。 NDBManagementClient 端(ndb_mgm 程序)与 NDBManagement 服务器进行交互。

所有这些程序一起形成一个 NDB 群集(请参见第 21.4 节“ NDB 群集程序”。当数据由NDB存储引擎存储时,table(和 table 数据)存储在数据节点中。可以从所有其他 MySQL 服务器(SQL)直接访问这些 table。因此,在一个将数据存储在群集中的工资核算应用程序中,如果一个应用程序更新了员工的薪水,则查询此数据的所有其他 MySQL 服务器都可以立即看到此更改。

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

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

NDB 群集的数据节点中存储的数据可以进行镜像;集群可以处理单个数据节点的故障,而不会因为丢失事务状态而中止少量事务而产生其他影响。因为预计事务应用程序会处理事务失败,所以这不应成为问题的根源。

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

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

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