Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

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

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

以下几段讨论了几个关键概念,以便理解这个主题。

数据节点。 一个 ndbdndbmtd 进程,它存储一个或多个 碎片副本 —— 也就是分配给该节点组的 分区 的副本(在本节后面讨论)。

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

术语 "节点" 和 "数据节点" 通常可以互换使用,指的是 ndbdndbmtd 进程;在本讨论中,如果提到管理节点(ndb_mgmd 进程)和 SQL 节点(mysqld 进程),将明确指定。

节点组。 一个节点组由一个或多个节点组成,存储分区或碎片副本集(见下一项)。

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

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

因此,具有 4 个数据节点的 NDB 集群如果在 config.ini 文件中将 NoOfReplicas 设置为 1,将有 4 个节点组;如果将其设置为 2,将有 2 个节点组;如果将其设置为 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 * [线程数] * [节点组数],NDB 集群中的节点组数如前所述。当运行ndbd数据节点进程时,设置线程数对 LDM 线程数没有影响(因为ThreadConfig仅适用于ndbmtd); 在这种情况下,可以将该值视为 1,以便进行计算。

    请参阅第 25.5.3 节,“ndbmtd — NDB 集群数据节点守护进程(多线程)”,以获取更多信息。

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

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

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

以下图表显示了一个 NDB 集群,具有四个数据节点,运行ndbd,分为两个节点组,每个节点组有两个节点;节点 1 和 2 属于节点组 0,节点 3 和 4 属于节点组 1。

Note

这里仅显示数据节点;尽管 NDB 集群需要ndb_mgmd进程来管理集群,并且至少需要一个 SQL 节点来访问集群存储的数据,但这些已经从图中省略,以保持清晰。

图 25.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 集群的继续操作:只要每个参与集群的节点组至少有一个节点运转,集群就拥有所有数据的完整副本并保持可用性。这将在下一个图表中说明。

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

Content is described in the surrounding text.

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

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