25.5.1 NDB Cluster 数据节点守护进程
ndbd 是用于处理使用 NDB Cluster 存储引擎的表数据的进程。这个进程使得数据节点能够完成分布式事务处理、节点恢复、到磁盘上的检查点、在线备份等任务。
在 NDB Cluster 中,一组 ndbd 进程协作处理数据。这些进程可以在同一计算机(主机)上执行,也可以在不同的计算机上执行。数据节点和集群主机之间的对应关系完全可配置。
使用 ndbd 的选项显示在下表中。附加描述随表格后面出现。
-
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 集群发布中可能会被删除。短形式
-r
的此选项也已弃用,因此将来可能会被删除。请使用长形式代替。 -
Command-Line Format --connect-string=connection_string
Type 字符串 Default Value [none]
与
--ndb-connectstring
相同。 -
Command-Line Format --core-file
在错误时写入核心文件;用于调试。
-
--daemon
,-d
Command-Line Format --daemon
-
Command-Line Format --defaults-extra-file=path
Type 字符串 Default Value [none]
在读取全局文件之后,读取给定文件。
-
Command-Line Format --defaults-file=path
Type String Default Value [none]
从给定文件中只读取默认选项。
-
Command-Line Format --defaults-group-suffix=string
Type String Default Value [none]
还读取组的concat(group,suffix)。
-
Command-Line Format --filesystem-password=password
将文件系统加密和解密密码传递给数据节点进程,使用
stdin
、tty
或my.cnf
文件。更多信息,请参阅Section 25.6.14,“NDB集群的文件系统加密”。
-
--filesystem-password-from-stdin
Command-Line Format --filesystem-password-from-stdin={TRUE|FALSE}
从
stdin
(仅)传递文件系统加密和解密密码给数据节点进程。更多信息,请参见 Section 25.6.14, “NDB集群文件系统加密”.
-
Command-Line Format --foreground
使 ndbd 或 ndbmtd 执行为前台进程,主要用于调试目的。这选项暗示了
--nodaemon
选项。 -
Command-Line Format --help
显示帮助文本并退出。
-
Command-Line Format --initial
指示ndbd执行初始启动。初始启动擦除任何由早期的ndbd实例创建的恢复文件。它还重新创建恢复日志文件。在某些操作系统上,这个过程可能需要很长时间。
该选项也导致删除与磁盘数据表空间相关联的所有数据文件和与日志文件组相关联的以前在这个数据节点上的日志文件(请参阅第25.6.11节,“NDB Cluster Disk Data Tables”)。
一个
--initial
启动应该只在特殊情况下使用;因为这个选项会从NDB集群文件系统中删除所有文件,并重新创建所有重做日志文件。这些情况如下所示:-
When performing a software upgrade which has changed the contents of any files.
-
当使用新的ndbd版本重新启动节点时。
-
作为最后的手段,当节点重启或系统重启反复失败的原因是某些问题。在这种情况下,请注意,这个节点无法再用于恢复数据,因为数据文件被破坏了。
Warning为了避免可能发生的最终数据丢失,建议您不要同时使用
--initial
选项和StopOnError = 0
。相反,在启动集群后,只在config.ini
中设置StopOnError
为0,然后正常重新启动数据节点——也就是说,不使用--initial
选项。请参阅StopOnError
参数的描述,以了解有关此问题的详细解释。(Bug #24945638)使用该选项会阻止
StartPartialTimeout
和StartPartitionedTimeout
配置参数的任何影响。Important该选项不会影响已经由受影响节点创建的备份文件。
此选项对数据节点在启动(或重新启动)时从已运行的其他数据节点恢复数据没有任何影响(除非它们也使用
--initial
选项作为初始重启的一部分)。这种数据恢复是自动发生的,不需要用户干预来进行一个正常运行的 NDB 集群。在第一次启动集群(即在创建任何数据节点文件之前)时,允许使用此选项;然而,这并不必要。
-
-
Command-Line Format --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
在使用此选项时,还必须指定正在启动的数据节点的节点 ID 使用
--ndb-nodeid
选项。Important不要将此选项与
--nowait-nodes
选项混淆,该选项用于ndb_mgmd,可以用来启用配置有多个管理服务器的集群在没有所有管理服务器在线的情况下启动。 -
Command-Line Format --install[=name]
Platform Specific Windows Type String Default Value ndbd
使ndbd作为Windows服务安装。可选地,可以指定服务名称;如果不设置,则默认为
ndbd
。尽管最好在ndbd程序的my.ini
或my.cnf
配置文件中指定其他选项,但是在这种情况下,也可以使用--install
。然而,在这种情况下,必须首先指定--install
选项,然后再给出任何其他选项,以使Windows服务安装成功。使用此选项与
--initial
选项一起使用通常不被建议,因为这会导致每次停止和启动服务时清除并重建数据节点文件系统。极度小心地使用任何影响数据节点启动的ndbd选项,包括--initial-start
、--nostart
和--nowait-nodes
,同时使用--install
选项,并确保完全理解并允许任何可能的后果。在非Windows平台上,
--install
选项没有影响。 -
Command-Line Format --logbuffer-size=#
Type 整数 Default Value 32768
Minimum Value 2048
Maximum Value 4294967295
设置数据节点日志缓冲大小。当进行高级调试时,可能会出现日志缓冲空间不足的情况,如果有太多的日志消息,这样就会丢失一些日志消息。这在正常操作中不会发生。
-
Command-Line Format --login-path=path
Type String Default Value [none]
从登录文件中读取给定路径。
-
Command-Line Format --no-login-paths
跳过从登录路径文件中读取选项。
-
Command-Line Format --ndb-connectstring=connection_string
Type String Default Value [none]
设置连接字符串,以便与ndb_mgmd连接。语法:
[nodeid=
。覆盖id
;][host=]hostname
[:port
]NDB_CONNECTSTRING
和my.cnf
中的条目。 -
Command-Line Format --ndb-mgmd-host=connection_string
Type String Default Value [none]
-
Command-Line Format --ndb-mgm-tls=level
Type Enumeration Default Value relaxed
Valid Values relaxed
strict
设置连接到管理服务器所需的TLS支持级别;可以是
relaxed
或strict
。relaxed
(默认)意味着尝试使用TLS连接,但成功不必要求;strict
意味着必须使用TLS才能连接。 -
Command-Line Format --ndb-nodeid=#
Type Integer 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=list
Type 路径名 Default Value (Unix) $HOME/ndb-tls
Default Value (Windows) $HOMEDIR/ndb-tls
指定搜索CA文件的目录列表。Unix平台上,目录名用冒号(
:
)分隔;Windows系统上,使用分号字符(;
)作为分隔符。一个目录引用可以是相对或绝对路径;它可能包含一个或多个环境变量,每个由前缀的美元符号($
)表示,并在使用之前扩展。搜索从左侧命名目录开始,自左至右进行直到找到文件。空字符串表示空搜索路径,使所有搜索失败。一个由单个点(
.
)组成的字符串表示搜索路径限制为当前工作目录。如果未提供搜索路径,则使用编译时默认值。这取决于所使用的平台:在Windows上,这是
\ndb-tls
;在其他平台(包括Linux)上,它是$HOME/ndb-tls
。可以通过编译NDB集群时使用-DWITH_NDB_TLS_SEARCH_PATH
来重写此值。 -
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
命令来实现(请参阅Section 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
毫秒。If you wanted to start up the same cluster as in the previous example without one ndbd (say, for example, that the host machine for node 3 has suffered a hardware failure) then start nodes 2, 4, and 5 with
--nowait-nodes=3
. Then the cluster starts as soon as nodes 2, 4, and 5 connect, and does not wait for node 3 to start. -
Command-Line Format --print-defaults
Print program argument list and exit.
-
Command-Line Format --remove[=name]
Platform Specific Windows Type String Default Value ndbd
使一个ndbd过程从之前安装为Windows服务被移除。可选地,可以指定一个服务名称要卸载;如果没有设置,则默认为
ndbd
。在非Windows平台上,
--remove
选项没有任何影响。 -
Command-Line Format --usage
显示帮助文本并退出;与
--help
相同。 -
--verbose
,-v
导致额外的调试输出写入节点日志。
您还可以使用
NODELOG DEBUG ON
和NODELOG DEBUG OFF
启用和禁用在数据节点运行时的额外日志记录。 -
Command-Line Format --version
显示版本信息并退出。
ndbd生成一组日志文件,这些日志文件位于由DataDir
指定的目录中,该目录在config.ini
配置文件中的DataDir
参数中定义。
这些日志文件的列表如下。 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***
Listings of possible ndbd exit codes and messages generated when a data node process shuts down prematurely can be found in Data Node Error Messages.
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中使用,它可以跟踪所有传入、传出和内部消息及其数据在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 Cluster Connection Strings”,了解有关此问题的更多信息。关于数据节点配置参数的详细信息,请参阅第25.4.3.6节“定义NDB Cluster Data Nodes”。
当ndbd启动时,它实际会启动两个进程。第一个是称为“angel process”;它的唯一任务就是发现执行过程已完成,然后重新启动ndbd进程,如果配置为这样做。因此,如果您尝试使用Unixkill命令杀死ndbd,需要首先杀死天使进程。终止ndbd的最佳方法是使用管理客户端并从那里停止进程。
执行过程使用一个线程进行读取、写入和扫描数据,以及所有其他活动。这条线程是异步实现的,因此可以轻松地处理数千个并发操作。此外,一个监视线程监督执行线程,以确保它不会陷入无限循环中。文件I/O由线程池处理,每个线程能够处理一个打开的文件。线程还可用于传输器连接,由ndbd过程中的传输器使用。在一个多处理器系统上执行大量操作(包括更新),ndbd过程可以消耗多达2个CPU,如果允许这样做。
对于具有许多CPU的机器,可以使用几个ndbd过程,这些过程属于不同的节点组;然而,如此配置仍被认为是实验性的,并且在MySQL 8.4的生产环境中不受支持。请参阅第25.2.7节,“NDB集群的已知限制”。