5.3 STTOR 阶段 0

大多数 NDB 内核块在 STTOR 阶段 1 开始其启动阶段,但 NDBFSNDBCNTR 从阶段 0 开始,这可以通过检查 ALL_BLOCKS 数组(定义于 src/kernel/blocks/ndbcntr/NdbcntrMain.cpp)中每个元素的第一个值来看出。此外,当 STTOR 信号发送到一个块时,返回信号 STTORRY 始终包含该块感兴趣的启动阶段列表。只有在这些启动阶段,该块才会实际收到 STTOR 信号。

STTOR 信号按照内核块在 ALL_BLOCKS 数组中列出的顺序发送。虽然 NDBCNTR 经历了从 0 到 255 的启动阶段,但其中大部分阶段都是空的。

阶段 0 中的两个活动都与 NDB 文件系统的初始化有关。首先,如果需要,NDBFS 会为数据节点创建文件系统目录。在初始启动的情况下,NDBCNTR 会清除数据节点目录中的所有现有文件,以确保 DBDIH 块随后不会发现任何系统文件(如果 DBDIH 找到任何系统文件,它就不会将启动正确解释为初始启动)。

每次 NDBCNTR 完成向所有内核块发送一个启动阶段后,它都会向所有块发送一个 NODE_STATE_REP 信号,这有效地更新了所有块中的 NodeState

每次 NDBCNTR 完成一个非空的启动阶段后,它都会向管理服务器报告;在大多数情况下,这会被记录在集群日志中。

最后,在完成所有启动阶段后,NDBCNTR 会使用 NODE_STATE_REP 信号更新所有块中的节点状态;它还会发送一个事件报告,通知所有启动阶段已完成。此外,还会通知所有其他集群数据节点,该节点已完成其所有启动阶段,以确保所有节点都知道彼此的状态。每个数据节点都会向所有块发送一个 NODE_START_REP;但是,这只对 DBDIH 有意义,以便它知道何时可以解锁 DBDICT 上的模式更改锁。

注意

在下表中以及本文的其余部分,我们有时将 STTOR 启动阶段简称为“启动阶段”或“阶段 N”(其中 N 是某个数字)。NDB_STTOR 启动阶段始终按其原样限定,因此称为“NDB_STTOR 启动阶段”或“NDB_STTOR 阶段”。

表 5.1 NDB 内核块和启动阶段

内核块 接收启动阶段
NDBFS 0
DBTC 1
DBDIH 1
DBLQH 1, 4
DBACC 1
DBTUP 1
DBDICT 1, 3
NDBCNTR 0, 1, 2, 3, 4, 5, 6, 8, 9
CMVMI 1(在 QMGR 之前)、3、8
QMGR 1, 7
TRIX 1
BACKUP 1, 3, 7
DBUTIL 1, 6
SUMA 1、3、5、7、100(空)、101
DBTUX 1,3,7
TSMAN 1、3(两者都被忽略)
LGMAN 1、2、3、4、5、6(全部被忽略)
PGMAN 1、3、7(阶段 7 当前为空)
RESTORE 1、3(只有在阶段 1 中才进行实际工作)

注意

此表在本文档编写时是最新的,但将来可能会发生变化。最新信息可以在源代码中找到。