• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • NDB群集节点,节点组,副本和分区

    本节讨论NDB群集分割和复制数据进行存储的方式。

    在接下来的几段中讨论了许多对于理解该主题至关重要的概念。

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

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

    当指代ndbdndbmtd进程时,术语“节点”和“数据节点”通常可以互换使用;在此讨论中,在其中提到的地方,指定了管理节点(ndb_mgmd进程)和SQL节点(mysqld进程)。

    节点组。一个节点组由一个或多个节点组成,并存储分区或副本集(请参阅下一项)。

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

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

    因此,具有4个数据节点的NDB群集NoOfReplicasconfig.ini文件中如果设置为1,则有4个节点组,如果将其NoOfReplicas设置为2,则有2个节点组,而如果NoOfReplicas将其设置为4,则有1个节点组。有关更多信息NoOfReplicas,请参见“定义NDB群集数据节点”。

    注意

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

    您可以在线将新的节点组(以及因此的新数据节点)在线添加到正在运行的NDB群集;有关更多信息,请参见“在线添加NDB群集数据节点”。

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

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

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

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

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

    1. 表的生产中仅支持KEYLINEAR KEY分区方案NDB
    2. 可以为任何NDB表明确定义的最大分区数为,如本节前面所讨论的,确定NDB群集中节点组的数量。在为数据节点进程运行ndbd时,设置LDM线程数无效(因为仅适用于ndbmtd)。在这种情况下,出于执行此计算的目的,可以将该值视为等于1。8 *[number of LDM threads]*[number of node groups]ThreadConfig

      有关更多信息,请参见第22.4.3节“ndbmtd-NDB群集数据节点守护程序(多线程)”。

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

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

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

    下图说明了一个NDB群集,其中有四个运行ndbd的数据节点,并以两个节点组的形式排列,每个节点组包含两个节点。节点1和2属于节点组0,节点3和4属于节点组1。

    注意

    这里仅显示数据节点。尽管正常工作的NDB群集需要一个ndb_mgmd进程来进行群集管理,并且至少需要一个SQL节点才能访问该群集存储的数据,但为清楚起见,这些已从图中省略。

    具有两个节点组的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群集的继续运行意味着什么:只要参与该群集的每个节点组至少有一个正在运行的节点,该群集便拥有所有数据的完整副本并保持生存。下图对此进行了说明。

    2x2 NDB群集所需的节点

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

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