10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 下载本手册 本手册摘录

MySQL 5.7参考手册/....../ NDB群集节点,节点组,片段副本和分区

21.1.2 NDB群集节点,节点组,片段副本和分区

本节讨论NDB Cluster对数据进行划分和重复存储的方式。

在接下来的几段中讨论了许多概念对此主题的理解核心。

数据节点。一个NDBD.ndbmtd流程,存储一个或多个片段复制品- 这是,副本分区(稍后在本节中讨论)分配给节点是成员的节点组。

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

这术语常见节点数据节点交替使用当指…时交替使用NDBD.ndbmtd过程;提到的,管理节点(ndb_mgmd.进程)和SQL节点(mysqld.流程)在本讨论中是这样指定的。

节点组。一个节点组由一个或多个节点组成,并存储分区或集合片段复制品(见下一条)。

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

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

因此,具有4个数据节点的NDB群集具有4个节点组(如果NoOfReplicasconfig.ini文件,2节点组(如果)NoOfReplicas设置为2,当NoOfReplicas设置为4.在本节后面讨论片段副本;有关的更多信息NoOfReplicas, 看第21.3.3.6节,“定义NDB集群数据节点”

笔记

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

您可以在线向运行中的NDB集群添加新的节点组(以及新的数据节点);看到第21.5.7节,“在线添加NDB集群数据节点”, 想要查询更多的信息。

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

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

[分区#] = [数据节点的##############################

当使用数据节点运行时ndbmtd, LDM线程的数量由设置控制maxnofexecutionthreads.。使用时NDBD.有一个LDM线程,这意味着有与参与集群的节点一样多的集群分区。在使用时也是如此ndbmtdmaxnofexecutionthreads.设置为3或更少。(你应该知道LDM线程的数量随这个参数的值而增加,但不是以严格的线性方式,并且在设置它时存在额外的约束;请参阅描述maxnofexecutionthreads.为更多的信息。)

NDB和用户定义分区。NDB群集通常是分区ndbcluster.自动表。然而,也可以使用用户定义的分区ndbcluster.表。这受以下限制:

  1. 只有关键线性关键在生产环境中支持分区方案NDB表。

  2. 可以为任何分区显式定义的最大分区数NDB表是8 * [LDM线程数] * [节点组数],如先前在本节中所讨论的那样确定NDB集群中的节点组的数量。跑步时NDBD.对于数据节点进程,设置LDM线程的数量没有效果(自从ThreadConfig仅适用于ndbmtd);在这种情况下,为了执行该计算,可以将该值视为等于1。

    第21.4.3节,“ndbmtd - NDB集群数据节点守护进程(多线程)”, 想要查询更多的信息。

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

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

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

下图展示了一个运行着4个数据节点的NDB集群NDBD.,排列在两个节点的两个节点组中;节点1和2属于节点组0,并且节点3和4属于节点组1。

笔记

这里仅显示数据节点;虽然工作的NDB群集需要一个ndb_mgmd.对于集群管理的过程和至少一个SQL节点来访问集群存储的数据,为了清晰起见,图中省略了这些。

图21.2双节点组NDB集群

内容在周围的文本中描述。

由群集存储的数据被分成四个分区,编号为0,1,2和3.每个分区存储在同一节点组上的多个副本中。分区存储在备用节点组上,如下所示:

  • 分区0存储在节点组0上;一个主要片段复制品(主副本)存储在节点1上,并且备份片段复制(该分区的备份副本)存储在节点2上。

  • 分区1存储在另一节点组(节点组1)上;此分区的主片段副本位于节点3上,其备份片段副本在节点4上。

  • 分区2存储在节点组0上。但是,将其两个片段副本的放置与分区0的放置逆转;对于分区2,主片段副本存储在节点2上,并在节点1上存储备份。

  • 分区3存储在节点组1上,并且其两个片段副本的放置从分区1的那些颠倒。即,其主片段副本位于节点4上,在节点3上备份。

这意味着关于NDB集群的持续运行是这样的:只要参与群集的每个节点组都有至少一个节点运行,群集都有一个完整的所有数据的副本,并且保持可行。这在下一图中示出。

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

内容在周围的文本中描述。

在此示例中,群集由两个节点组组成,每个节点组由两个数据节点组成。每个数据节点正在运行一个实例NDBD.。节点组0中的至少一个节点和节点组1中的至少一个节点的任意组合足以保持集群活着。但是,如果单个节点组中的两个节点都发生故障,那么仅由另一个节点组中的其余两个节点组成的组合是不够的。在这种情况下,集群失去了整个分区,因此不能再提供对所有NDB集群数据的完整访问。

在NDB 7.5.4及更高版本中,单个NDB群集实例支持的最大节点组数为48(Bug#80845,Bug#22996305)。