本节提供了 NDB 集群数据节点启动时涉及的步骤的简化概述。更多完整的信息可以在 NDB 集群启动阶段 中的 NDB
Internals 指南 中找到。
这些阶段与管理客户端中的
命令的输出相同(见 第 25.6.1 节,“NDB 集群管理客户端中的命令”)。这些启动阶段也在 node_id
STATUSstart_phase
列的 ndbinfo.nodes
表中报告。
启动类型。 有多种不同的启动类型和模式,如下列表所示:
设置和初始化(阶段 -1)。 在启动之前,每个数据节点 (ndbd 进程) 必须被初始化。初始化包括以下步骤:
-
获取节点 ID
-
获取配置数据
-
分配用于节点间通信的端口
-
根据配置文件中的设置分配内存
当数据节点或 SQL 节点首次连接到管理节点时,它保留了集群节点 ID,以确保没有其他节点分配相同的节点 ID。这个节点 ID 保留直到节点连接到集群并且至少有一个 ndbd 报告该节点已连接。这个节点 ID 的保留由该节点与 ndb_mgmd 之间的连接所保护。
每个数据节点初始化后,集群启动过程可以继续。集群启动过程中的阶段如下所示:
-
阶段 0。
NDBFS
和NDBCNTR
块启动。在使用--initial
选项启动的数据节点上,数据节点文件系统被清除。 -
阶段 1。 在这个阶段,所有剩余的
NDB
内核块启动。NDB 集群连接被设置,inter-block 通信被建立,心跳被启动。在节点重新启动的情况下,API 节点连接也被检查。Note如果一个或多个节点在阶段 1 中挂起,而其他节点在阶段 2 中挂起,这通常表明网络问题。这种情况的一个可能原因是集群主机具有多个网络接口。另一个常见的问题来源是集群节点之间通信所需的 TCP/IP 端口被阻止。在后一种情况下,这通常是由于防火墙配置不正确。
-
阶段 2。
NDBCNTR
内核块检查所有现有节点的状态。主节点被选择,集群模式文件被初始化。 -
第 3 阶段.
DBLQH
和DBTC
内核块设置它们之间的通信。确定启动类型;如果这是一个重新启动,则DBDIH
块获取执行重新启动的权限。 -
第 4 阶段. 对于初始启动或初始节点重新启动,redo 日志文件被创建。这些文件的数量等于
NoOfFragmentLogFiles
。对于系统重新启动:
-
读取模式或模式。
-
从本地检查点读取数据。
-
应用所有 redo 信息,直到最新的可恢复的全局检查点被达到。
对于节点重新启动,找到 redo 日志的尾部。
-
-
第 5 阶段. 在这个阶段,大多数数据库相关的数据节点启动部分被执行。对于初始启动或系统重新启动,本地检查点被执行,接着是全局检查点。在这个阶段,内存使用情况的周期性检查开始,并执行所需的节点接管。
-
第 6 阶段. 在这个阶段,节点组被定义和设置。
-
第 7 阶段. 仲裁节点被选定并开始功能。下一个备份 ID 被设置,备份磁盘写入速度也被设置。达到这个启动阶段的节点被标记为
Started
。现在,API 节点(包括 SQL 节点)可以连接到集群。 -
第 8 阶段. 如果这是一个系统重新启动,则所有索引被重建(由
DBDIH
)。 -
第 9 阶段. 节点内部启动变量被重置。
-
第 100 阶段( OBSOLETE)。 以前,在节点重新启动或初始节点重新启动时,API 节点可以连接到节点并开始接收事件。目前,这个阶段为空。
-
第 101 阶段. 在节点重新启动或初始节点重新启动时,事件交付被移交给加入集群的节点。新加入的节点接管了将其主要数据交付给订阅者的责任。这阶段也被称为
SUMA
交付阶段。
在初始启动或系统重新启动后完成这个过程,事务处理被启用。对于节点重新启动或初始节点重新启动,启动过程的完成意味着节点现在可以作为事务协调器。