大多数NDB内核块在第 1 阶段开始它们的启动阶段,但和
STTOR除外,它们从第 0 阶段开始,这可以通过检查数组中每个元素的第一个值(在 中定义
)看出。此外,当信号被发送到一个块时,返回信号总是包含该块感兴趣的开始阶段列表。只有在那些开始阶段,块才真正接收到信号。
NDBFSNDBCNTRALL_BLOCKSsrc/kernel/blocks/ndbcntr/NdbcntrMain.cppSTTORSTTORRYSTTOR
STTORALL_BLOCKS信号按照内核块在数组中列出的顺序发出
。在
NDBCNTR经历开始阶段 0 到 255 时,其中大部分是空的。
阶段 0 中的两个活动都与
NDB文件系统的初始化有关。首先,如有必要,
NDBFS为数据节点创建文件系统目录。在初始启动的情况下,NDBCNTR从数据节点的目录中清除所有现有文件以确保该DBDIH块随后不会发现任何系统文件(如果
DBDIH找到任何系统文件,它不会将启动正确解释为初始开始)。
每次NDBCNTR完成向所有内核块发送一个启动阶段时,它都会
NODE_STATE_REP向所有块发送一个信号,这有效地更新了NodeState所有块中的 in。
每次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 中完成任何实际工作) |
该表在撰写本文时是最新的,但可能会随着时间的推移而改变。最新信息可以在源代码中找到。