21.4.1 ndbd-NDB 群集数据节点守护程序
ndbd是用于使用 NDB Cluster 存储引擎处理 table 中所有数据的过程。这个过程使数据节点能够完成分布式事务处理,节点恢复,磁盘检查点,在线备份以及相关任务。
在 NDB 群集中,一组ndbd进程合作处理数据。这些过程可以在同一台计算机(主机)上或不同计算机上执行。数据节点与群集主机之间的对应关系是完全可配置的。
下 table 包括特定于 NDB 群集数据节点程序ndbd的命令选项。附加说明如下 table 所示。有关大多数 NDB 群集程序(包括ndbd)共有的选项,请参见第 21.4.32 节“ NDB 群集程序的公用选项-NDB 群集程序的公用选项”。
table21.239 NDBD 程序的命令行选项
Format | Description | 添加,不建议使用或删除 |
---|---|---|
--bind-address=name | 本地绑定地址 | (在所有基于 MySQL 5.7 的版本中受支持) |
--connect-delay=# | 两次尝试联系 Management 服务器之间 await 的时间(以秒为单位); 0table 示不要在两次尝试之间 await | (在所有基于 MySQL 5.7 的版本中受支持) |
--connect-retries=# | 设置放弃前重试连接的次数; 0table 示仅尝试 1 次(并且不重试) | (在所有基于 MySQL 5.7 的版本中受支持) |
--connect-retry-delay=# | 两次尝试联系 Management 服务器之间 await 的时间(以秒为单位); 0table 示不要在两次尝试之间 await | (在所有基于 MySQL 5.7 的版本中受支持) |
--daemon , | ||
-d | 将 ndbd 作为守护程序启动(默认);用--nodaemon | 覆盖((所有基于 MySQL 5.7 的版本均支持) |
--foreground | 在前台运行 ndbd(提供用于调试目的)(意味着--nodaemon) | (在所有基于 MySQL 5.7 的发行版中受支持) |
--initial | 执行 ndbd 的初始启动,包括文件系统清理;使用此选项之前,请参考文档 | (所有基于 MySQL 5.7 的版本均支持) |
--initial-start | 执行部分初始启动(需要--nowait-nodes) | (在所有基于 MySQL 5.7 的版本中受支持) |
--install[=name] | 用于将数据节点进程安装为 Windows 服务;不适用于其他平台 | (在所有基于 MySQL 5.7 的版本中受支持) |
--logbuffer-size=# | 控制日志缓冲区的大小;用于调试时生成许多日志消息;默认值对于正常操作是足够的 | 添加:NDB 7.6.6 |
--nodaemon | 请勿将 ndbd 作为守护程序启动;提供用于测试目的((所有基于 MySQL 5.7 的版本均支持) | |
--nostart ,-n | 不要立即启动 ndbd; ndbdawait 命令从 ndb_mgm | 开始(在所有基于 MySQL 5.7 的发行版中受支持) |
--nowait-nodes=list | 请勿 await 这些数据节点启动(获取以逗号分隔的节点 ID 列 table);需要--ndb-nodeid | (在所有基于 MySQL 5.7 的版本中受支持) |
--remove[=name] | 用于删除以前作为 Windows 服务安装的数据节点进程;不适用于其他平台 | (在所有基于 MySQL 5.7 的版本中受支持) |
--verbose ,-v | 将额外的调试信息写入节点日志 | (所有基于 MySQL 5.7 的版本均支持) |
Property | Value |
---|---|
Command-Line Format | --bind-address=name |
Type | String |
Default Value | `` |
使ndbd绑定到特定的网络接口(主机名或 IP 地址)。此选项没有默认值。
Property | Value |
---|---|
Command-Line Format | --connect-delay=# |
Deprecated | Yes |
Type | Numeric |
Default Value | 5 |
Minimum Value | 0 |
Maximum Value | 3600 |
确定启动时尝试与 Management 服务器联系之间的 await 时间(尝试次数由--connect-retries选项控制)。默认值为 5 秒。
此选项已被弃用,并且在以后的 NDB Cluster 版本中会被删除。请改用--connect-retry-delay。
Property | Value |
---|---|
Command-Line Format | --connect-retries=# |
Type | Numeric |
Default Value | 12 |
Minimum Value | 0 |
Maximum Value | 65535 |
设置放弃前重试连接的次数; 0table 示仅尝试 1 次(并且不重试)。默认值为 12 次尝试。两次尝试之间的 await 时间由--connect-retry-delay选项控制。
Property | Value |
---|---|
Command-Line Format | --connect-retry-delay=# |
Type | Numeric |
Default Value | 5 |
Minimum Value | 0 |
Maximum Value | 4294967295 |
确定启动之间尝试与 Management 服务器联系的 await 时间(两次尝试之间的时间由--connect-retries选项控制)。默认值为 5 秒。
该选项代替了--connect-delay选项,该选项已被弃用,并且在以后的 NDB Cluster 版本中会被删除。
Property | Value |
---|---|
Command-Line Format | --daemon |
Type | Boolean |
Default Value | TRUE |
指示ndbd或ndbmtd作为守护进程执行。这是默认行为。 --nodaemon可用于防止进程作为守护程序运行。
在 Windows 平台上运行ndbd或ndbmtd时,此选项无效。
Property | Value |
---|---|
Command-Line Format | --foreground |
Type | Boolean |
Default Value | FALSE |
使ndbd或ndbmtd作为前台进程执行,主要用于调试目的。此选项暗含--nodaemon选项。
在 Windows 平台上运行ndbd或ndbmtd时,此选项无效。
Property | Value |
---|---|
Command-Line Format | --initial |
Type | Boolean |
Default Value | FALSE |
指示ndbd执行初始启动。初始启动会删除ndbd的较早实例为恢复目的而创建的所有文件。它还会重新创建恢复日志文件。在某些 os 上,此过程可能会花费大量时间。
在非常特殊的情况下,启动ndbd进程时,仅使用--initial start。这是因为此选项导致从 NDB 群集文件系统中删除所有文件,并重新创建所有重做日志文件。这些情况在这里列出:
-
在执行软件升级时,更改了任何文件的内容。
-
使用新版本ndbd重新启动节点时。
-
作为最后的措施,由于某种原因,节点重新启动或系统重新启动会失败。在这种情况下,请注意由于数据文件的破坏,该节点不再可用于还原数据。
-
Warning
为了避免最终数据丢失的可能性,建议您不要与StopOnError = 0
一起使用--initial
选项。相反,仅在启动集群后,才将_5 中的StopOnError
设置为 0,然后正常重新启动数据节点-即不使用--initial
选项。有关此问题的详细说明,请参见StopOnError参数的说明。 (缺陷#24945638)
使用此选项可防止StartPartialTimeout和StartPartitionedTimeout配置参数生效。
Important
此选项不会影响以下两种文件类型:
-
受影响的节点已经创建的备份文件
-
NDB 群集磁盘数据文件(请参阅第 21.5.10 节“ NDB 群集磁盘数据 table”)。
此选项还对刚刚从已运行的数据节点启动(或重新启动)的数据节点的数据恢复没有影响。数据的这种恢复是自动进行的,不需要用户干预正常运行的 NDB 群集。
第一次启动集群(即在创建任何数据节点文件之前)时,可以使用此选项。但是,没有这样做。
Property | Value |
---|---|
Command-Line Format | --initial-start |
Type | Boolean |
Default Value | FALSE |
在执行集群的部分初始启动时使用此选项。每个节点都应以该选项以及--nowait-nodes开头。
假设您有一个 4 节点集群,其数据节点的 ID 为 2、3、4 和 5,并且希望仅使用节点 2、4 和 5(即省略节点 3)来执行部分初始启动。
shell> ndbd --ndb-nodeid=2 --nowait-nodes=3 --initial-start
shell> ndbd --ndb-nodeid=4 --nowait-nodes=3 --initial-start
shell> ndbd --ndb-nodeid=5 --nowait-nodes=3 --initial-start
使用此选项时,还必须为使用--ndb-nodeid选项启动的数据节点指定节点 ID。
Important
不要将此选项与ndb_mgmd的--nowait-nodes选项混淆,该选项可用于启用配置有多个 Management 服务器的群集,而无需所有 Management 服务器都处于联机状态。
Property | Value |
---|---|
Command-Line Format | --install[=name] |
Platform Specific | Windows |
Type | String |
Default Value | ndbd |
使ndbd作为 Windows 服务安装。 (可选)您可以指定服务的名称;如果未设置,则服务名称默认为ndbd
。尽管最好在my.ini
或my.cnf
配置文件中指定其他ndbd程序选项,但是可以与--install
一起使用。但是,在这种情况下,必须先指定--install
选项,然后再给出其他任何选项,Windows 服务安装才能成功。
通常不建议将此选项与--initial选项一起使用,因为这会在每次停止和启动服务时擦除并重建数据节点文件系统。如果打算使用影响--initial-start,--nostart和--nowait-nodes的其他任何ndbd选项(包括--initial-start,--nostart和--nowait-nodes)以及--install,也要格外小心,并且应绝对确保您完全理解并允许任何其他操作。这样做可能带来的后果。
--install选项在非 Windows 平台上无效。
Property | Value |
---|---|
Command-Line Format | --logbuffer-size=# |
Introduced | 5.7.22-ndb-7.6.6 |
Type | Integer |
Default Value | 32768 |
Minimum Value | 2048 |
Maximum Value | 4294967295 |
设置数据节点日志缓冲区的大小。使用大量额外日志进行调试时,如果日志消息太多,则日志缓冲区可能会用完空间,在这种情况下,某些日志消息可能会丢失。在正常操作期间不应发生这种情况。
Property | Value |
---|---|
Command-Line Format | --nodaemon |
Type | Boolean |
Default Value | FALSE |
阻止ndbd或ndbmtd作为守护进程执行。此选项将覆盖--daemon选项。在调试二进制文件时,这对于将输出重定向到屏幕很有用。
Windows 上ndbd和ndbmtd的默认行为是在前台运行,从而使该选项在 Windows 平台上不再起作用,在该平台上无效。
Property | Value |
---|---|
Command-Line Format | --nostart |
Type | Boolean |
Default Value | FALSE |
指示ndbd不要自动启动。使用此选项时,ndbd连接到 Management 服务器,从中获取配置数据,并初始化通信对象。但是,它直到 Management 服务器明确要求才 true 启动执行引擎。这可以通过在 ManagementClient 端中发出正确的START命令来实现(请参见第 21.5.1 节“ NDB 群集 ManagementClient 端中的命令”)。
Property | Value |
---|---|
Command-Line Format | --nowait-nodes=list |
Type | String |
Default Value | `` |
此选项获取一个数据节点列 table,群集在启动之前将不为其 await 数据节点。
这可用于以分区状态启动群集。例如,要在四节点集群中仅运行一半的数据节点(节点 2、3、4 和 5)来启动集群,可以使用--nowait-nodes=3,5
启动每个ndbd进程。在这种情况下,群集将在节点 2 和 4 连接后立即启动,并且不像其他情况那样 awaitStartPartitionedTimeout毫秒 await 节点 3 和 5 连接。
如果要启动与上一个示例相同的群集而没有一个ndbd(例如,节点 3 的主机发生硬件故障),请使用--nowait-nodes=3
启动节点 2、4 和 5.然后,群集将在节点 2、4 和 5 连接后立即启动,并且不会 await 节点 3 启动。
Property | Value |
---|---|
Command-Line Format | --remove[=name] |
Platform Specific | Windows |
Type | String |
Default Value | ndbd |
导致删除先前作为 Windows 服务安装的ndbd进程。 (可选)您可以指定要卸载的服务的名称。如果未设置,则服务名称默认为ndbd
。
--remove选项在非 Windows 平台上无效。
导致将额外的调试输出写入节点日志。
在 NDB 7.6.4 和更高版本中,您还可以在数据节点运行时使用NODELOG 调试开启和NODELOG 调试关闭启用和禁用此额外的日志记录。
ndbd生成一组日志文件,这些日志文件位于config.ini
配置文件中DataDir指定的目录中。
这些日志文件在下面列出。 * node_id
*是并且 table 示节点的唯一标识符。例如,ndb_2_error.log
是由节点 ID 为2
的数据节点生成的错误日志。
-
ndb_node_id_error.log
是一个文件,其中包含引用的ndbd进程遇到的所有崩溃的记录。该文件中的每个记录都包含一个简短的错误字符串以及对此崩溃的跟踪文件的引用。该文件中的典型条目可能如下所示:
Date/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退出代码和在数据节点进程过早关闭时生成的消息的列 table。
Important
错误日志文件中的最后一个条目不一定是最新的(也可能不是)。错误日志中的条目未按时间 Sequences 列出;相反,它们与ndb_node_id_trace.log.next
文件中确定的跟踪文件的 Sequences 相对应(请参见下文)。因此,错误日志条目将以周期性而非 Sequences 的方式被覆盖。
可以配置在覆盖旧文件之前将创建的这些跟踪文件的数量。 * trace_id
*是对于每个连续的跟踪文件递增的数字。
-
ndb_node_id_trace.log.next
是跟踪要分配的下一个跟踪文件编号的文件。 -
ndb_node_id_out.log
是包含ndbd进程输出的任何数据的文件。仅当ndbd作为守护程序启动时才创建此文件,这是默认行为。 -
ndb_node_id.pid
是一个文件,其中包含作为守护程序启动的ndbd进程的进程 ID。它还用作锁定文件,以避免启动具有相同标识符的节点。 -
ndb_node_id_signal.log
是仅在ndbd的调试版本中使用的文件,在ndbd进程中可以跟踪所有传入,传出和内部消息及其数据。
建议不要使用通过 NFS 挂载的目录,因为在某些环境中,这可能会导致问题,即使进程终止后,对.pid
文件的锁定仍然有效。
要启动ndbd,可能还需要指定 Management 服务器的主机名和它正在监听的端口。可选地,还可以指定该进程要使用的节点 ID。
shell> ndbd --connect-string="nodeid=2;host=ndb_mgmd.mysql.com:1186"
有关此问题的其他信息,请参见第 21.3.3.3 节“ NDB 群集连接字符串”。 第 21.4.32 节“ NDB 群集程序的公用选项-NDB 群集程序的公用选项”,描述了可与ndbd一起使用的其他命令行选项。有关数据节点配置参数的信息,请参见第 21.3.3.6 节,“定义 NDB 群集数据节点”。
ndbd启动时,实际上会启动两个进程。其中第一个被称为“天使过程”;它的唯一工作是发现执行过程何时完成,然后重新配置ndbd进程(如果已配置)。因此,如果您尝试使用 Unix kill命令杀死ndbd,则有必要杀死两个进程,从 angel 进程开始。终止ndbd进程的首选方法是使用 ManagementClient 端,然后从那里停止该进程。
执行过程使用一个线程来读取,写入和扫描数据以及所有其他活动。该线程是异步实现的,因此它可以轻松处理数千个并发操作。此外,监视线程监视执行线程,以确保它不会死于无限循环。线程池处理文件 I/O,每个线程都能够处理一个打开的文件。线程也可以在ndbd进程中用于传输器的连接。在执行大量操作(包括更新)的 multiprocessing 器系统中,如果允许ndbd进程最多消耗 2 个 CPU。
对于具有许多 CPU 的机器,可以使用多个ndbd进程,这些进程属于不同的节点组。但是,这种配置仍被认为是实验性配置,在生产环境中不受 MySQL 5.7 支持。参见第 21.1.7 节“ NDB 群集的已知限制”。