文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  NDB Cluster 节点、节点组、片段副本和分区

25.2.2 NDB Cluster 节点、节点组、片段副本和分区

本节介绍 NDB Cluster 如何划分和复制数据以进行存储。

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

数据节点。  一个 ndbdndbmtd 进程,它存储一个或多个 片段副本,即分配给节点所属的节点组的 分区(在本节后面讨论)的副本。

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

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

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

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

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

因此,如果 NoOfReplicasconfig.ini 文件中设置为 1,则具有 4 个数据节点的 NDB Cluster 具有 4 个节点组;如果 NoOfReplicas 设置为 2,则有 2 个节点组;如果 NoOfReplicas 设置为 4,则有 1 个节点组。片段副本将在本节后面讨论;有关 NoOfReplicas 的更多信息,请参见 第 25.4.3.6 节,“定义 NDB Cluster 数据节点”

注意

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

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

分区。  这是集群存储的数据的一部分。每个节点负责至少保留分配给它的一个分区副本(即至少一个片段副本)可供集群使用。

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

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

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

NDB 和用户定义的分区。  NDB Cluster 通常自动对 NDBCLUSTER 表进行分区。但是,也可以对 NDBCLUSTER 表使用用户定义的分区。这受以下限制

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

  2. 任何 NDB 表可以显式定义的最大分区数量为 8 * [LDM 线程数] * [节点组数],NDB Cluster 中的节点组数量如前所述确定。当运行 ndbd 用于数据节点进程时,设置 LDM 线程的数量没有任何效果(因为 ThreadConfig 仅适用于 ndbmtd);在这种情况下,为了执行此计算,此值可以视为等于 1。

    有关更多信息,请参见 第 25.5.3 节,“ndbmtd — NDB Cluster 数据节点守护进程(多线程)”

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

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

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

下图说明了一个 NDB Cluster,它有四个运行 ndbd 的数据节点,并被安排在两个由两个节点组成的节点组中;节点 1 和 2 属于节点组 0,节点 3 和 4 属于节点组 1。

注意

此处仅显示数据节点;尽管一个正常工作的 NDB Cluster 需要一个 ndb_mgmd 进程用于集群管理,以及至少一个 SQL 节点来访问集群存储的数据,但为了清晰起见,这些节点已从图中省略。

图 25.2 具有两个节点组的 NDB Cluster

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 Cluster 的持续运行意味着:只要参与集群的每个节点组至少有一个节点在运行,集群就拥有所有数据的完整副本,并且可以继续运行。下图说明了这一点。

图 25.3 2x2 NDB Cluster 所需的节点

Content is described in the surrounding text.

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

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