ndbd 二进制文件提供了用于处理使用 NDBCLUSTER
存储引擎的表中的所有数据的进程的单线程版本。此数据节点进程使数据节点能够完成分布式事务处理、节点恢复、到磁盘的检查点、在线备份以及相关任务。启动时,ndbd 会记录类似于此处显示的警告
2024-05-28 13:32:16 [ndbd] WARNING -- Running ndbd with a single thread of
signal execution. For multi-threaded signal execution run the ndbmtd binary.
ndbmtd 是此二进制文件的多线程版本。
在 NDB 集群中,一组数据节点进程协同处理数据。这些进程可以在同一台计算机(主机)上执行,也可以在不同的计算机上执行。数据节点与集群主机之间的对应关系是完全可配置的。
可以使用 ndbd 的选项在以下表格中显示。表格后是其他描述。
-
命令行格式 --bind-address=name
类型 字符串 默认值 导致 ndbd 绑定到特定网络接口(主机名或 IP 地址)。此选项没有默认值。
-
命令行格式 --character-sets-dir=path
包含字符集的目录。
-
命令行格式 --connect-delay=#
已弃用 是 类型 数值型 默认值 5
最小值 0
最大值 3600
确定启动时等待连接到管理服务器的时间(尝试次数由
--connect-retries
选项控制)。默认值为 5 秒。此选项已弃用,将在 NDB 集群的未来版本中删除。请使用
--connect-retry-delay
替代。 -
命令行格式 --connect-retries=#
类型 数值型 默认值 12
最小值 -1
最大值 65535
设置在放弃之前重试连接的次数;0 表示仅尝试 1 次(并且不重试)。默认值为 12 次尝试。尝试之间等待的时间由
--connect-retry-delay
选项控制。也可以将此选项设置为 -1,在这种情况下,数据节点进程将无限期地尝试连接。
-
命令行格式 --connect-retry-delay=#
类型 数值型 默认值 5
最小值 0
最大值 4294967295
确定启动时等待连接到管理服务器的时间(尝试之间的时间由
--connect-retries
选项控制)。默认值为 5 秒。此选项代替了
--connect-delay
选项,该选项现在已弃用,将在 NDB 集群的未来版本中删除。此选项的简写形式
-r
也已弃用,因此将被删除。请使用长形式替代。 -
命令行格式 --connect-string=connection_string
类型 字符串 默认值 [无]
与
--ndb-connectstring
相同。 -
命令行格式 --core-file
在错误时写入核心文件;用于调试。
--daemon
,-d
命令行格式 --daemon
指示 ndbd 或 ndbmtd 作为守护进程执行。这是默认行为。
--nodaemon
可用于阻止进程作为守护进程运行。-
命令行格式 --defaults-extra-file=path
类型 字符串 默认值 [无]
在读取全局文件后读取给定文件。
-
命令行格式 --defaults-file=path
类型 字符串 默认值 [无]
仅从给定文件读取默认选项。
-
命令行格式 --defaults-group-suffix=string
类型 字符串 默认值 [无]
还读取具有 concat(group, suffix) 的组。
-
命令行格式 --filesystem-password=password
使用
stdin
、tty
或my.cnf
文件将文件系统加密和解密密码传递给数据节点进程。有关更多信息,请参见 第 25.6.14 节,“NDB 集群的文件系统加密”.
--filesystem-password-from-stdin
命令行格式 --filesystem-password-from-stdin={TRUE|FALSE}
将文件系统加密和解密密码从
stdin
(仅)传递给数据节点进程。有关更多信息,请参见 第 25.6.14 节,“NDB 集群的文件系统加密”.
-
命令行格式 --foreground
导致 ndbd 或 ndbmtd 作为前台进程执行,主要用于调试目的。此选项意味着
--nodaemon
选项。 -
命令行格式 --help
显示帮助文本并退出。
-
命令行格式 --initial
指示 ndbd 执行初始启动。初始启动会擦除之前 ndbd 实例创建的任何用于恢复目的的文件。它还会重新创建恢复日志文件。在某些操作系统上,此过程可能需要相当长的时间。
此选项还会导致删除与磁盘数据表空间关联的所有数据文件以及与以前在此数据节点上存在的日志文件组关联的撤销日志文件(参见 第 25.6.11 节,“NDB 集群磁盘数据表”)。
--initial
启动仅应在 非常特殊的情况下 启动 ndbd 进程时使用;这是因为此选项会导致从 NDB 集群文件系统中删除所有文件,并重新创建所有重做日志文件。这些情况列于此处执行已更改任何文件内容的软件升级时。
使用 ndbd 的新版本重新启动节点时。
作为最后的手段,当由于某种原因节点重启或系统重启反复失败时。在这种情况下,请注意,由于数据文件已销毁,此节点将无法再用于恢复数据。
警告为了避免最终丢失数据的可能性,建议您 不要 将
--initial
选项与StopOnError = 0
一起使用。相反,仅在集群启动后在config.ini
中将StopOnError
设置为 0,然后正常重启数据节点——也就是说,不使用--initial
选项。有关此问题的详细说明,请参见StopOnError
参数的描述。(Bug #24945638)使用此选项会阻止
StartPartialTimeout
和StartPartitionedTimeout
配置参数产生任何影响。重要此选项 不会 影响已由受影响节点创建的备份文件。
此选项对正在从已运行的数据节点(除非它们也是用
--initial
启动的,作为初始重启的一部分)启动(或重新启动)的数据节点恢复数据也无效。这种数据恢复会自动发生,并且在正常运行的 NDB 集群中不需要用户干预。在第一次启动集群时(即在创建任何数据节点文件之前)可以使用此选项;但是,这样做并非必要。
-
命令行格式 --initial-start
此选项用于执行集群的部分初始启动。每个节点都应使用此选项启动,以及
--nowait-nodes
。假设您有一个 4 节点集群,其数据节点的 ID 为 2、3、4 和 5,并且您希望仅使用节点 2、4 和 5 执行部分初始启动,即省略节点 3。
$> ndbd --ndb-nodeid=2 --nowait-nodes=3 --initial-start $> ndbd --ndb-nodeid=4 --nowait-nodes=3 --initial-start $> ndbd --ndb-nodeid=5 --nowait-nodes=3 --initial-start
使用此选项时,还必须使用
--ndb-nodeid
选项指定要启动的数据节点的节点 ID。重要不要将此选项与
--nowait-nodes
选项混淆,该选项用于ndb_mgmd,它可以用于使配置了多个管理服务器的集群在没有所有管理服务器在线的情况下启动。 -
命令行格式 --install[=name]
平台特定 Windows 类型 字符串 默认值 ndbd
导致ndbd作为 Windows 服务安装。可以选择为服务指定一个名称;如果未设置,服务名称默认为
ndbd
。虽然最好在my.ini
或my.cnf
配置文件中指定其他ndbd程序选项,但可以与--install
一起使用。但是,在这种情况下,必须首先指定--install
选项,然后再给出任何其他选项,以使 Windows 服务安装成功。通常不建议将此选项与
--initial
选项一起使用,因为这会导致数据节点文件系统在每次停止和启动服务时被擦除和重建。如果您打算使用任何其他影响数据节点启动的ndbd选项,包括--initial-start
、--nostart
和--nowait-nodes
,以及--install
,也应格外小心,并确保您完全理解并允许这样做可能产生的任何后果。--install
选项对非 Windows 平台没有影响。 -
命令行格式 --logbuffer-size=#
类型 整数 默认值 32768
最小值 2048
最大值 4294967295
设置数据节点日志缓冲区的大小。在使用大量额外日志进行调试时,如果日志消息过多,日志缓冲区可能会用完空间,在这种情况下,一些日志消息可能会丢失。这在正常操作期间不应发生。
-
命令行格式 --login-path=path
类型 字符串 默认值 [无]
从登录文件中读取给定的路径。
-
命令行格式 --no-login-paths
跳过从登录路径文件读取选项。
-
命令行格式 --ndb-connectstring=connection_string
类型 字符串 默认值 [无]
设置连接到ndb_mgmd的连接字符串。语法:
[nodeid=
。覆盖id
;][host=]hostname
[:port
]NDB_CONNECTSTRING
和my.cnf
中的条目。 -
命令行格式 --ndb-mgmd-host=connection_string
类型 字符串 默认值 [无]
与
--ndb-connectstring
相同。 -
命令行格式 --ndb-mgm-tls=level
类型 枚举 默认值 relaxed
有效值 relaxed
strict
设置连接到管理服务器所需的 TLS 支持级别;
relaxed
或strict
之一。relaxed
(默认)表示尝试建立 TLS 连接,但不要求成功;strict
表示连接需要 TLS。 -
命令行格式 --ndb-nodeid=#
类型 整数 默认值 [无]
设置此节点的节点 ID,覆盖
--ndb-connectstring
设置的任何 ID。 --ndb-optimized-node-selection
命令行格式 --ndb-optimized-node-selection
启用用于选择事务节点的优化。默认情况下启用;使用
--skip-ndb-optimized-node-selection
禁用。-
命令行格式 --ndb-tls-search-path=list
类型 路径名 默认值(Unix) $HOME/ndb-tls
默认值(Windows) $HOMEDIR/ndb-tls
指定一个目录列表,以搜索 CA 文件。在 Unix 平台上,目录名称由冒号 (
:
) 分隔;在 Windows 系统上,分号 (;
) 用作分隔符。目录引用可以是相对的或绝对的;它可以包含一个或多个环境变量,每个环境变量都由一个前缀美元符号 ($
) 表示,并在使用前扩展。搜索从最左边的命名目录开始,并从左到右进行,直到找到文件。空字符串表示空搜索路径,这会导致所有搜索失败。由单个点 (
.
) 组成的字符串表示搜索路径限制为当前工作目录。如果没有提供搜索路径,则使用编译时默认值。此值取决于使用的平台:在 Windows 上,它是
\ndb-tls
;在其他平台(包括 Linux)上,它是$HOME/ndb-tls
。这可以通过使用-DWITH_NDB_TLS_SEARCH_PATH
编译 NDB 集群来覆盖。 -
命令行格式 --nodaemon
阻止ndbd或ndbmtd作为守护进程执行。此选项覆盖
--daemon
选项。这对于在调试二进制文件时将输出重定向到屏幕很有用。Windows 上ndbd和ndbmtd的默认行为是在前台运行,使此选项在 Windows 平台上变得没有必要,因为它在 Windows 平台上没有影响。
-
命令行格式 --no-defaults
不要从除登录文件以外的任何选项文件读取默认选项。
--nostart
,-n
命令行格式 --nostart
指示ndbd不要自动启动。当使用此选项时,ndbd连接到管理服务器,从管理服务器获取配置数据,并初始化通信对象。但是,它不会实际启动执行引擎,直到管理服务器明确要求这样做。这可以通过在管理客户端中发出适当的
START
命令来实现(参见第 25.6.1 节“NDB 集群管理客户端中的命令”)。--nowait-nodes=
node_id_1
[,node_id_2
[, ...]]命令行格式 --nowait-nodes=list
类型 字符串 默认值 此选项接受一个数据节点列表,集群在启动之前不会等待这些节点。
这可以用于在分区状态下启动集群。例如,要仅使用一半的数据节点(节点 2、3、4 和 5)启动 4 节点集群,可以将每个ndbd进程与
--nowait-nodes=3,5
一起启动。在这种情况下,集群在节点 2 和 4 连接后立即启动,并且不会等待StartPartitionedTimeout
毫秒以等待节点 3 和 5 连接,就像它通常那样。如果您想启动与前一个示例中相同的集群,但缺少一个ndbd(例如,节点 3 的主机出现硬件故障),那么使用
--nowait-nodes=3
启动节点 2、4 和 5。然后,集群在节点 2、4 和 5 连接后立即启动,并且不会等待节点 3 启动。-
命令行格式 --print-defaults
打印程序参数列表并退出。
-
命令行格式 --remove[=name]
平台特定 Windows 类型 字符串 默认值 ndbd
导致以前作为 Windows 服务安装的ndbd进程被删除。可以选择为要卸载的服务指定一个名称;如果未设置,服务名称默认为
ndbd
。--remove
选项对非 Windows 平台没有影响。 -
命令行格式 --usage
显示帮助文本并退出;与 --help 相同。
--verbose
,-v
导致将额外的调试输出写入节点日志。
您还可以使用
NODELOG DEBUG ON
和NODELOG DEBUG OFF
在数据节点运行时启用和禁用此额外的日志记录。-
命令行格式 --version
显示版本信息并退出。
ndbd 生成一组日志文件,这些文件被放置在由 DataDir
在 config.ini
配置文件中指定的目录中。
这些日志文件列在下面。 node_id
是节点的唯一标识符。例如,ndb_2_error.log
是由节点 ID 为 2
的数据节点生成的错误日志。
ndb_
是一个包含引用的所有崩溃记录的文件 ndbd 进程遇到的问题。此文件中的每个记录都包含一个简短的错误字符串以及对该崩溃的跟踪文件的引用。此文件中的典型条目可能如下所示node_id
_error.logDate/Time: Saturday 30 July 2004 - 00:20:01 Type of error: error Message: Internal program error (failed ndbrequire) Fault ID: 2341 Problem data: DbtupFixAlloc.cpp Object of reference: DBTUP (Line: 173) ProgramName: NDB Kernel ProcessID: 14909 TraceFile: ndb_2_trace.log.2 ***EOM***
可以在 数据节点错误消息 中找到数据节点进程过早关闭时生成的可能 ndbd 退出代码和消息的列表。
重要错误日志文件中的最后一个条目不一定是最新条目(也不太可能是)。错误日志中的条目不是按时间顺序排列的;相反,它们对应于
ndb_
文件中确定的跟踪文件顺序(见下文)。因此,错误日志条目以循环方式而不是顺序方式覆盖。node_id
_trace.log.nextndb_
是一个跟踪文件,它描述了发生错误之前发生了什么。这些信息对 NDB 集群开发团队的分析很有用。node_id
_trace.log.trace_id
可以配置在覆盖旧文件之前创建的这些跟踪文件的数量。
trace_id
是一个数字,它为每个连续的跟踪文件递增。ndb_
是用于跟踪要分配的下一个跟踪文件编号的文件。node_id
_trace.log.nextndb_
是一个包含由 ndbd 进程输出的任何数据的文件。此文件仅在 ndbd 作为守护进程启动时创建,这是默认行为。node_id
_out.logndb_
是一个包含 ndbd 进程的进程 ID 的文件,当作为守护进程启动时。它还充当一个锁文件,以避免启动具有相同标识符的节点。node_id
.pidndb_
是一个仅在 ndbd 的调试版本中使用的文件,在该版本中,可以跟踪所有传入、传出和内部消息及其在 ndbd 进程中的数据。node_id
_signal.log
建议不要使用通过 NFS 挂载的目录,因为在某些环境中,这会导致 .pid
文件上的锁即使在进程终止后仍然有效的问题。
要启动 ndbd,可能还需要指定管理服务器的主机名以及它正在监听的端口。可以选择指定进程要使用的节点 ID。
$> ndbd --connect-string="nodeid=2;host=ndb_mgmd.mysql.com:1186"
有关此问题的更多信息,请参见 第 25.4.3.3 节,“NDB 集群连接字符串”。有关数据节点配置参数的更多信息,请参见 第 25.4.3.6 节,“定义 NDB 集群数据节点”。
当 ndbd 启动时,它实际上启动了两个进程。第一个称为 “守护进程”;它的唯一任务是在执行进程完成时发现,然后重新启动 ndbd 进程(如果配置了这样做)。因此,如果您尝试使用 Unix kill 命令来终止 ndbd,则需要终止这两个进程,从守护进程开始。终止 ndbd 进程的首选方法是使用管理客户端并从那里停止进程。
执行进程使用一个线程来读取、写入和扫描数据,以及所有其他活动。此线程是异步实现的,因此它可以轻松处理数千个并发操作。此外,一个看门狗线程监督执行线程以确保它不会挂在无限循环中。一个线程池处理文件 I/O,每个线程可以处理一个打开的文件。线程也可以由 ndbd 进程中的传输器用于传输器连接。在执行大量操作(包括更新)的多处理器系统中, ndbd 进程如果允许,可以消耗多达 2 个 CPU。
对于具有多个 CPU 的机器,可以使用多个属于不同节点组的 ndbd 进程;但是,这种配置仍然被认为是实验性的,并且在生产环境中不受 MySQL 9.0 支持。请参见 第 25.2.7 节,“NDB 集群的已知限制”。