Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  NDB Cluster Nodes, Node Groups, Fragment Replicas, and Partitions

25.2.2 NDB 集群节点、节点组、分片副本和分区

本节讨论了NDB 集群如何将数据分割和复制以供存储。

接下来的几段话中,讨论了一些理解这个主题的关键概念。

数据节点。 一个ndbdndbmtd进程,它存储一个或多个分片副本—即该节点组的成员之一的分配给该节点组的分区(后面在本节中讨论)的副本。

每个数据节点都应该位于单独的计算机上。虽然也可以在单个计算机上托管多个数据节点进程,但这种配置通常不被推荐。

在讨论NDB集群时,术语节点数据节点通常被互换使用,以指代ndbdndbmtd进程;在这里提到时,管理节点(ndb_mgmd进程)和SQL节点(mysqld进程)将被明确指定为这样。

节点组.  节点组由一个或多个节点组成,并存储分区,或者称为碎片副本(见下一项)的集合。

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

[# of node groups] = [# of data nodes] / NoOfReplicas

因此,如果在config.ini文件中设置NoOfReplicas为1,一个NDB集群中的4个数据节点将被分配到4个结点组中;如果设置NoOfReplicas为2,结点组数量将是2;如果设置NoOfReplicas为4,结点组数量将是1。关于副本的讨论将在本节后续部分中进行;关于NoOfReplicas的更多信息,请参见第25.4.3.6节,“定义NDB集群数据节点”

Note

在一个NDB集群中,所有结点组都必须具有相同的数据节点数量。

您可以在线添加新的结点组(并因此添加新的数据节点),以便于运行中的NDB集群;关于更多信息,请参见第25.6.7节,“在线添加NDB集群数据节点”

分区. 这是由集群存储的数据的一部分。每个结点都负责保留至少一个副本的分区(即至少一个碎片副本),以便于对集群可用。

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

[# of partitions] = [# of data nodes] * [# of LDM threads]

使用运行ndbmtd的数据节点时,LDM线程数由MaxNoOfExecutionThreads设置控制。当使用ndbd时,有一个单独的LDM线程,这意味着集群分区数与参与集群的节点数相同。这也适用于使用ndbmtd时,MaxNoOfExecutionThreads设置为3或更少。请注意,这个参数的值会影响LDM线程数,但不是严格线性的,并且存在其他约束;见MaxNoOfExecutionThreads的描述以获取更多信息。

NDB和用户定义分区。 NDB集群通常对NDBCLUSTER表自动进行分区。然而,也可以使用用户定义的分区方式来处理NDBCLUSTER表。这受到以下限制:

  1. 生产环境中,只支持KEYLINEAR KEY分区方案在NDB表中。

  2. 对任何NDB表定义的最大分区数是8 * [LDL线程数量] * [节点组数量],NDB集群中的节点组数量由本节前面讨论的方式确定。当运行ndbd数据节点进程时,设置LDL线程数量无效(因为ThreadConfig只适用于ndbmtd);在这种情况下,这个值可以被视为等于1,以便执行此计算。

    请参阅第25.5.3节,“ndbmtd — The NDB Cluster Data Node Daemon (Multi-Threaded)”,获取更多信息。

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

副本碎片.  这是一个集群分区的副本。每个节点组中的每个节点存储一个副本碎片。也称为分区副本。副本碎片的数量等于节点组中的节点数。

副本碎片完全属于单个节点;一个节点可以(通常情况下)存储多个副本碎片。

以下图表展示了四个数据节点运行ndbd,以两个节点组的形式运行,每个节点组中有两个节点;节点 1 和 2 属于节点组 0,而节点 3 和 4 属于节点组 1。

Note

只显示了数据节点;虽然 NDB 集群需要一个ndb_ mgmd 进程进行集群管理,以及至少一个 SQL 节点来访问由集群存储的数据,但这些在图表中被省略以提高清晰度。

图 25.2 NDB 集群中的两个节点组

Content is described in the surrounding text.

NDB 集群存储的数据被分为四个分区,编号为0、1、2和3。每个分区都在同一个节点组中存储—多个副本。在以下方式下,每个分区都存储于不同的节点组:

  • 分区0在节点组0上存储;primary fragment replica(主副本)在节点1上,backup fragment replica(备份副本)在节点2上。

  • 分区1在另一个节点组(节点组1)上存储,这个分区的primary fragment replica在节点3上,backup fragment replica在节点4上。

  • 分区2在节点组0上存储,但是它的两个fragment replicas的位置与分区0相反;对于分区2,primary fragment replica在节点2上,backup在节点1上。

  • 分区3在节点组1上存储,它的两个fragment replicas的位置与分区1相反,即primary fragment replica在节点4上,backup在节点3上。

这意味着,对于NDB 集群来说,如果参与集群的每个节点组至少有一个节点在运行,那么集群就拥有所有数据的完整副本,并且保持可用。这如图25.3所示。

图25.3:2x2 NDB 集群中的节点要求

Content is described in the surrounding text.

在这个示例中,集群由两个节点组,每个节点组包含两个数据节点。每个数据节点都运行一个ndbd实例。任何至少包含一个节点组0中的节点和至少包含一个节点组1中的节点的组合都足以保持集群存活。然而,如果单个节点组中的所有节点失败,组成由其他节点组中的两个剩余节点的组合则不够。在这种情况下,集群已经失去了一个整个分区,因此无法提供对NDB Cluster数据的完整访问。

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