大多数NDB
内核块在第 1 阶段开始它们的启动阶段,但和
STTOR
除外,它们从第 0 阶段开始,这可以通过检查数组中每个元素的第一个值(在 中定义
)看出。此外,当信号被发送到一个块时,返回信号总是包含该块感兴趣的开始阶段列表。只有在那些开始阶段,块才真正接收到信号。
NDBFS
NDBCNTR
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
所有块中的 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 中完成任何实际工作) |
该表在撰写本文时是最新的,但可能会随着时间的推移而改变。最新信息可以在源代码中找到。