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