ndbd 是处理使用 NDB 集群存储引擎的所有数据的进程。这是使数据节点能够实现分布式事务处理、节点恢复、磁盘检查点、在线备份和相关任务的进程。
在 NDB 集群中,一组 ndbd 进程合作处理数据。这些进程可以在同一台计算机(主机)或不同的计算机上执行。数据节点和集群主机之间的对应关系完全可以配置。
可以与 ndbd 一起使用的选项如下表所示。表格后面是详细描述。
表 25.23 与程序 ndbd 一起使用的命令行选项
Format | Description | Added, Deprecated, or Removed |
---|---|---|
本地绑定地址 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
包含字符集的目录 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
设置连接尝试的次数;0 表示仅尝试一次(不重试);-1 表示无限次重试 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
在尝试联系管理服务器之间等待的时间(以秒为单位);0 表示不等待 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
与 --ndb-connectstring 相同 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
在错误时写入核心文件;用于调试 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
以守护进程形式启动 ndbd(默认);使用 --nodaemon 可以覆盖 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
在读取全局文件后读取给定的文件 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
仅从给定的文件中读取默认选项 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
也读取带有 concat(group, suffix) 的组 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
节点文件系统加密的密码;可以从 stdin、tty 或 my.cnf 文件中传递 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
从 stdin 传递节点文件系统加密的密码 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
在前台运行 ndbd,用于调试目的(隐含 --nodaemon) |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
显示帮助文本并退出 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
执行 ndbd 的初始启动,包括文件系统清洁;在使用此选项之前,请consult 文档 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
执行部分初始启动(需要 --nowait-nodes) |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
用于安装数据节点进程作为 Windows 服务;不适用于其他平台 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
控制日志缓冲区的大小;用于调试时生成大量日志消息;默认值足以满足正常操作 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
从登录文件中读取给定的路径 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
不从登录路径文件中读取登录路径 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
设置连接字符串以连接到 ndb_mgmd。语法:"[nodeid=id;][host=]hostname[:port]"。Overrides NDB_CONNECTSTRING 和 my.cnf 中的条目 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
ndb_mgm 客户端 TLS 要求级别 |
ADDED: 8.3.0 |
|
与 --ndb-connectstring 相同 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
设置此节点的节点 ID,覆盖 --ndb-connectstring 中设置的任何 ID |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
包含 TLS 密钥和证书的目录列表 |
ADDED: 8.3.0 |
|
不以守护进程方式启动 ndbd;仅供测试目的使用 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
不从任何选项文件中读取默认选项,除登录文件外 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
不立即启动 ndbd;ndbd 等待来自 ndb_mgm 的启动命令 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
不等待这些数据节点启动(采用逗号分隔的节点 ID 列表);需要 --ndb-nodeid |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
打印程序参数列表并退出 |
(在所有基于 MySQL 8.3 的 NDB 版本中支持) |
|
用于删除之前作为 Windows 服务安装的数据节点进程;不适用于其他平台 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
显示帮助文本并退出;与 --help 相同 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
将额外的调试信息写入节点日志 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
|
显示版本信息并退出 |
(在所有基于 MySQL 8.3 的 NDB 发布版本中支持) |
-
Command-Line Format --bind-address=name
Type 字符串 Default Value 使 ndbd 绑定到特定的网络接口(主机名或 IP 地址)。此选项没有默认值。
-
Command-Line Format --character-sets-dir=path
包含字符集的目录。
-
Command-Line Format --connect-delay=#
Deprecated 是 Type 数字 Default Value 5
Minimum Value 0
Maximum Value 3600
确定在启动时等待联系管理服务器的时间(尝试次数由
--connect-retries
选项控制)。默认为 5 秒。此选项已弃用,将在未来 NDB 集群版本中删除。请使用
--connect-retry-delay
选项代替。 -
Command-Line Format --connect-retries=#
Type 数字 Default Value 12
Minimum Value -1
Maximum Value 65535
设置连接尝试次数;0 表示仅尝试一次(不重试)。默认为 12 次尝试。尝试之间的等待时间由
--connect-retry-delay
选项控制。也可以将此选项设置为 -1,在这种情况下,数据节点进程将无限期地尝试连接。
-
Command-Line Format --connect-retry-delay=#
Type 数字 Default Value 5
Minimum Value 0
Maximum Value 4294967295
确定在启动时等待联系管理服务器的时间(尝试之间的时间由
--connect-retries
选项控制)。默认为5秒。该选项取代了
--connect-delay
选项,该选项现在已弃用,并将在未来版本的NDB Cluster中删除。该选项的短形式
-r
也已弃用,因此将在未来版本中删除。请使用长形式。 -
Command-Line Format --connect-string=connection_string
Type 字符串 Default Value [none]
-
Command-Line Format --core-file
在错误时写入核心文件;用于调试。
-
--daemon
,-d
Command-Line Format --daemon
指示ndbd或ndbmtd以守护进程形式执行。这是默认行为。
--nodaemon
可以用于防止进程以守护进程形式运行。 -
Command-Line Format --defaults-extra-file=path
Type 字符串 Default Value [none]
在读取全局文件后读取给定的文件。
-
Command-Line Format --defaults-file=path
Type 字符串 Default Value [none]
仅从给定的文件中读取默认选项。
-
Command-Line Format --defaults-group-suffix=string
Type 字符串 Default Value [none]
还读取带有concat(group,suffix)的组。
-
Command-Line Format --filesystem-password=password
使用
stdin
、tty
或my.cnf
文件将文件系统加密和解密密码传递给数据节点进程。有关更多信息,请参阅第 25.6.14 节,“NDB 集群文件系统加密”。
-
--filesystem-password-from-stdin
Command-Line Format --filesystem-password-from-stdin={TRUE|FALSE}
从
stdin
传递文件系统加密和解密密码给数据节点进程(仅限)。有关更多信息,请参阅第 25.6.14 节,“NDB 集群文件系统加密”。
-
Command-Line Format --foreground
使ndbd或ndbmtd在前台执行,主要用于调试目的。这选项隐含
--nodaemon
选项。 -
Command-Line Format --help
显示帮助文本并退出。
-
Command-Line Format --initial
指示ndbd执行初始启动。初始启动将擦除以前实例创建的恢复文件,也重新创建恢复日志文件。在某些操作系统上,这个过程可能需要很长时间。
该选项还会删除与磁盘数据表空间关联的所有数据文件和与日志文件组关联的撤销日志文件(见第 25.6.11 节,「NDB 集群磁盘数据表」).
仅在特殊情况下使用
--initial
启动,因为这将删除 NDB 集群文件系统中的所有文件并重新创建 redo 日志文件。这些情况如下:-
在执行软件升级时,该升级改变了文件的内容。
-
在使用新版本的ndbd重新启动节点时。
-
作为最后的手段,当节点重启或系统重启反复失败时。在这种情况下,请注意该节点不能用于恢复数据,因为数据文件将被销毁。
Warning为了避免可能的数据丢失,我们建议您不使用--initial选项与StopOnError = 0结合使用。相反,在config.ini中将StopOnError设置为 0,然后重新启动数据节点——即,不使用--initial选项。请参阅
StopOnError
参数的描述,以获取该问题的详细解释。(Bug #24945638)使用该选项将阻止
StartPartialTimeout
和StartPartitionedTimeout
配置参数生效。Important该选项不会影响已经创建的备份文件。
该选项也不会影响正在运行的数据节点从其他数据节点恢复数据(除非它们也使用--initial选项重新启动)。这种恢复过程将自动发生,不需要用户干预正常运行的 NDB 集群中。
-
-
Command-Line Format --初始启动
当执行部分初始启动集群时使用此选项。每个节点都应该使用此选项启动,同时也使用
--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。Important不要将此选项与
--nowait-nodes
选项混淆,该选项用于 ndb_mgmd,可以用于启用配置了多个管理服务器的集群,而不需要所有管理服务器在线。 -
Command-Line Format --安装[=名称]
Platform Specific Windows Type 字符串 Default Value ndbd
使 ndbd 作为 Windows 服务安装。可选地,您可以指定服务的名称;如果不设置,默认服务名称为
ndbd
。虽然可以在my.ini
或my.cnf
配置文件中指定其他 ndbd 程序选项,但是在使用--install
选项时,必须首先指定该选项,然后才能指定其他选项,以便 Windows 服务安装成功。通常不建议将此选项与
--initial
选项一起使用,因为这将导致每次停止和启动服务时数据节点文件系统被擦除和重建。同时,如果您计划使用其他影响数据节点启动的 ndbd 选项,包括--initial-start
、--nostart
和--nowait-nodes
,您应该完全理解可能的后果。该
--install
选项在非 Windows 平台上无效。 -
Command-Line Format --日志缓冲区大小=#
Type 整数 Default Value 32768
Minimum Value 2048
Maximum Value 4294967295
设置数据节点日志缓冲区的大小。在调试大量额外日志记录时,如果日志消息太多,日志缓冲区可能会溢出,从而导致一些日志消息丢失。这在正常操作中不应该发生。
-
Command-Line Format --登录路径=path
Type 字符串 Default Value [none]
从登录文件中读取给定的路径。
-
Command-Line Format --不读取登录路径
跳过从登录路径文件中读取选项。
-
Command-Line Format --ndb-connectstring=连接字符串
Type 字符串 Default Value [none]
设置连接到 ndb_mgmd 的连接字符串。语法:
[nodeid=
。覆盖id
;][host=]主机名
[:端口
]NDB_CONNECTSTRING
和my.cnf
中的条目。 -
Command-Line Format --ndb-mgmd-host=连接字符串
Type 字符串 Default Value [none]
与
--ndb-connectstring
相同。 -
Command-Line Format --ndb-mgm-tls=级别
Type 枚举 Default Value relaxed
Valid Values relaxed
strict
设置连接到管理服务器所需的 TLS 级别;可以是
relaxed
或strict
。relaxed
(默认) 表示尝试使用 TLS 连接,但不要求成功;strict
表示需要 TLS 连接。 -
Command-Line Format --ndb-nodeid=#
Type 整数 Default Value [none]
设置该节点的节点 ID,覆盖 --ndb-connectstring 中的 ID。
-
--ndb-optimized-node-selection
Command-Line Format --ndb-optimized-node-selection
启用事务节点选择的优化。默认启用;使用
--skip-ndb-optimized-node-selection
禁用。 -
Command-Line Format --ndb-tls-search-path=列表
Type 路径名 Default Value (Unix) $HOME/ndb-tls
Default Value (Windows) $HOMEDIR/ndb-tls
指定要搜索 CA 文件的目录列表。在 Unix 平台上,目录名之间用冒号 (
:
) 分隔;在 Windows 系统上,分号 (;
) 用作分隔符。目录引用可以是相对的或绝对的,可以包含一个或多个环境变量,每个变量以美元符号 ($
) 开头,并在使用前展开。搜索从左到右进行,直到找到文件。空字符串表示空搜索路径,导致所有搜索失败。点 (
.
) 表示搜索路径仅限于当前工作目录。如果未提供搜索路径,将使用编译时的默认值。该值取决于平台:在 Windows 上是
\ndb-tls
;在其他平台(包括 Linux)上是$HOME/ndb-tls
。这可以通过使用-DWITH_NDB_TLS_SEARCH_PATH
编译 NDB 集群来覆盖。 -
Command-Line Format --nodaemon
防止 ndbd 或 ndbmtd 作为守护进程执行。这将覆盖
--daemon
选项。这在调试二进制文件时将输出重定向到屏幕上非常有用。默认情况下,ndbd 和 ndbmtd 在 Windows 平台上的默认行为是前台运行,因此在 Windows 平台上不需要此选项,它不起作用。
-
Command-Line Format --no-defaults
不从任何选项文件中读取默认选项,除了登录文件。
-
--nostart
,-n
Command-Line Format --nostart
指示 ndbd 不自动启动。当使用此选项时,ndbd 连接到管理服务器,获取配置数据,并初始化通信对象。但是,它不会实际启动执行引擎,直到管理服务器明确请求它这样做。这可以通过在管理客户端中发出适当的
START
命令来实现(见 第 25.6.1 节,“NDB 集群管理客户端命令”)。 -
--nowait-nodes=
node_id_1
[,node_id_2
[, ...]]Command-Line Format --nowait-nodes=list
Type 字符串 Default Value 该选项采用数据节点列表,集群在启动之前不等待这些节点。
这可以用来在分区状态下启动集群。例如,要在 4 节点集群中仅使用半个数据节点(节点 2、3、4 和 5)启动集群,可以在每个 ndbd 进程中使用
--nowait-nodes=3,5
。在这种情况下,集群将在节点 2 和 4 连接时启动,不会等待节点 3 和 5 连接StartPartitionedTimeout
毫秒。如果您想在上一个示例中启动相同的集群,但不包括一个 ndbd(例如,假设节点 3 的主机机器出现硬件故障),那么可以使用
--nowait-nodes=3
启动节点 2、4 和 5。然后,集群将在节点 2、4 和 5 连接时启动,不等待节点 3 启动。 -
Command-Line Format --print-defaults
打印程序参数列表并退出。
-
Command-Line Format --remove[=name]
Platform Specific Windows Type 字符串 Default Value ndbd
使 ndbd 进程从 Windows 服务中删除。可选地,您可以指定要卸载的服务名称;如果不设置,默认服务名称为
ndbd
。该
--remove
选项在非 Windows 平台上无效。 -
Command-Line Format --usage
显示帮助文本并退出;与 --help 相同。
-
--verbose
,-v
使节点日志中写入额外的调试输出。
您也可以使用
NODELOG DEBUG ON
和NODELOG DEBUG OFF
在数据节点运行时启用和禁用额外的日志记录。 -
Command-Line Format --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 退出代码和消息的列表可以在 数据节点错误消息 中找到。
Important错误日志文件中的最后一条记录不一定是最新的(也不是)。错误日志条目 不 按照时间顺序列出,而是根据
ndb_
文件(见下文)中的顺序。错误日志条目因此以循环方式覆盖,而不是顺序方式。node_id
_trace.log.next -
ndb_
是一个跟踪文件,描述了错误发生前的确切情况。这对于 NDB 集群开发团队的分析非常有用。node_id
_trace.log.trace_id
可以配置创建的跟踪文件数量,以便在旧文件被覆盖之前。
trace_id
是一个递增的数字,用于每个连续的跟踪文件。 -
ndb_
是一个文件,用于跟踪下一个要分配的跟踪文件编号。node_id
_trace.log.next -
ndb_
是一个文件,包含了 ndbd 进程的所有输出数据。只有在 ndbd 作为守护进程启动时,才会创建该文件。node_id
_out.log -
ndb_
是一个文件,包含了 ndbd 进程的进程 ID,当其作为守护进程启动时。它也作为锁文件,以避免具有相同标识符的节点的启动。node_id
.pid -
ndb_
是一个文件,仅在调试版本的 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,每个线程可以处理一个打开的文件。线程也可以用于 transporter 连接,由 ndbd 进程中的 transporter 处理。在多处理器系统中执行大量操作(包括更新)时,ndbd 进程可以消耗高达 2 个 CPU,如果允许这样做。
对于具有多个 CPU 的机器,可以使用多个 ndbd 进程,这些进程属于不同的节点组;然而,这种配置仍然被认为是实验性的,并且不支持 MySQL 8.3 在生产环境中使用。请参阅 第 25.2.7 节,“NDB 集群的已知限制”。