本节讨论NDB集群划分和复制数据以进行存储的方式。
在接下来的几段中,我们将讨论一些对理解这一主题至关重要的概念。
数据节点。一ndbd公司或ndbmtd公司存储一个或多个碎片副本-也就是说分区(本节稍后讨论)分配给节点是其成员的节点组。
每个数据节点应位于单独的计算机上。虽然也可以在一台计算机上托管多个数据节点进程,但通常不建议使用这种配置。
这是常见的术语“节点”和“数据节点”指代一个词时可以互换使用ndbd公司或ndbmtd公司过程;其中提到了管理节点(国家开发银行进程)和SQL节点(mysqld公司过程)在本讨论中作了规定。
节点组。节点组由一个或多个节点组成,并存储分区或组碎片副本(见下一项)。
NDB集群中节点组的数量不能直接配置;它是数据节点数和片段副本数的函数(无皱襞
配置参数),如下所示:
[#节点组数]=[#数据节点数]/NoOfReplicas
因此,具有4个数据节点的NDB集群具有4个节点组,如果无皱襞
在中设置为1配置.ini
文件,2个节点组,如果无皱襞
设置为2,如果无皱襞
设置为4。本节后面将讨论片段副本;有关的详细信息无皱襞
,请参见第23.3.3.6节,“定义NDB群集数据节点”.
NDB集群中的所有节点组必须具有相同数量的数据节点。
您可以在线向运行中的NDB集群添加新的节点组(从而添加新的数据节点);看见第23.5.7节,“在线添加NDB群集数据节点”,以获取更多信息。
分区。这是集群存储的数据的一部分。每个节点负责为集群保留分配给它的任何分区的至少一个副本(即,至少一个片段副本)。
NDB Cluster默认使用的分区数取决于数据节点数和数据节点使用的LDM线程数,如下所示:
[#of partitions]=[#of data nodes]*[#of LDM threads]
使用数据节点运行时ndbmtd公司,LDM线程数由的设置控制MaxNoOfExecutionThreads公司
. 使用时ndbd公司只有一个LDM线程,这意味着参与集群的节点和集群分区一样多。使用时也是如此ndbmtd公司具有MaxNoOfExecutionThreads公司
设置为3或更少(您应该知道,LDM线程的数量会随着这个参数的值而增加,但不会以严格的线性方式增加,并且在设置它时会有额外的限制;请参见的说明MaxNoOfExecutionThreads公司
更多信息。)
NDB和用户定义的分区。NDB群集分区NDB群集
自动创建表格。但是,也可以使用用户定义的分区NDB群集
桌子。这受到以下限制:
有关NDB集群和用户定义分区的更多信息,请参见第23.1.7节,“NDB集群的已知限制”,和第24.6.2节,“与存储引擎相关的分区限制”.
碎片复制品。这是群集分区的副本。节点组中的每个节点都存储一个片段副本。有时也称为分区副本. 片段副本的数量等于每个节点组的节点数。
片段副本完全属于单个节点;一个节点可以(而且通常确实)存储多个片段副本。
下图说明了运行四个数据节点的NDB集群ndbd公司,分为两个节点组,每个节点两个;节点1和2属于节点组0,节点3和4属于节点组1。
这里只显示数据节点;尽管正常工作的NDB集群需要国家开发银行集群管理的进程和至少一个SQL节点来访问集群存储的数据,为了清晰起见,图中省略了这些。
集群存储的数据分为四个分区,编号为0、1、2和3。每个分区存储在同一节点组上的多个副本中。分区存储在备用节点组上,如下所示:
分区0存储在节点组0上;A.主碎片副本(主副本)存储在节点1上备份片段副本(分区的备份副本)存储在节点2上。
分区1存储在另一个节点组(节点组1)上;此分区的主片段副本位于节点3上,而其备份片段副本位于节点4上。
分区2存储在节点组0上。但是,其两个片段副本的放置方式与分区0相反;对于分区2,主片段副本存储在节点2上,备份存储在节点1上。
分区3存储在节点组1上,其两个片段副本的位置与分区1的位置相反,即其主片段副本位于节点4上,备份位于节点3上。
这对于NDB集群的持续运行意味着:只要参与集群的每个节点组至少有一个节点在运行,集群就拥有所有数据的完整副本并且仍然是可行的。这在下一个图表中进行了说明。
在本例中,集群由两个节点组组成,每个节点组由两个数据节点组成。每个数据节点都运行一个ndbd公司. 来自节点组0的至少一个节点和来自节点组1的至少一个节点的任何组合都足以保持集群“活着的”. 但是,如果来自单个节点组的两个节点都失败,则由另一个节点组中剩余的两个节点组成的组合是不够的。在这种情况下,集群丢失了一个完整的分区,因此无法再提供对所有NDB集群数据的完整集的访问。
单个NDB群集实例支持的最大节点组数为48。