第17章:MySQL簇 / 17.5. MySQL簇中的进程管理 / 17.5.2. ndbd,存储引擎节点进程

ndbd是使用NDB簇存储引擎处理表中所有数据的进程。通过该进程,存储节点能够实现分布式事务处理,节点恢复,对磁盘的检查点操作,在线备份,以及相关的任务。

MySQL簇中,一组ndbd进程能够共同处理数据。这些进程可以在相同的计算机(主机)上执行,也能在不同的计算机上执行。数据节点和簇主机之间的通信是完全可配置的。

Ndbd将生成一组日志文件,这些文件位于由配置文件中DataDir指定的目录下。下面列出了这些日志文件。注意,node_id代表节点的唯一ID。例如,ndb_2_error.log是由节点ID2的存储节点生成的错误日志。

·         ndb_node_id_error.log是包含所引用ndbd进程所遇到的所有崩溃记录的文件。该文件中的每条记录均包含1个简要的错误字符串,以及对该崩溃跟踪文件的引用。该文件的典型条目与下面给出的类似:

·                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***

注释:请记住,错误日志文件中的最后1个条目并不必然是最新的(也不太可能),这点很重要错误日志中的条目不是按时间顺序排列的,而是与ndb_node_id_trace.log.next(请参见下面的介绍)中定义的跟踪文件的顺序对应。因此,错误日志条目是按循环方式而不是顺序方式覆盖的。

·         ndb_node_id_trace.log.trace_id是准确描述了错误出现之时所发生情况的跟踪文件。该信息在MySQL簇开发团队进行分析时很有帮助。

能够对覆盖旧文件之前创建的跟踪文件的数目进行配置。trace_id是为每个连续的跟踪文件增加的编号。

·         ndb_node_id_trace.log.next是记录了要指定的下一个跟踪文件编号的文件。

·         ndb_node_id_out.log是包含ndbd进程的任何数据输出的文件。仅当将ndbd启动为端口监督程序时才会创建该文件。

·         ndb_node_id.pid是包含启动时作为端口监督程序的ndbd进程的进程ID的文件。它还能起到锁定文件的作用,以防止启动具有相同ID的节点。

·         ndb_node_id_signal.log是仅在ndbd调试版下使用的文件,它能跟踪ndbd进程中所有的入站、出站和内部消息。以及它们的数据。

建议不要使用通过NFS安装的目录,这是因为在某些情况下,如果pid-file上的锁定依旧有效,即使当进程中止后也会产生问题。

启动ndbd时,或许需要指定管理服务器的主机名以及监听的端口号。作为可选方式,也可以指定进程将使用的节点ID

shell> ndbd --connect-string="nodeid=2;host=ndb_mgmd.mysql.com:1186"

关于这方面的额外信息,请参见17.4.4.2节,“MySQL簇连接字符串

启动ndbd时,它实际上将启动两种进程。第1种进程称为“angel process”(天使进程),它的唯一任务是发现执行进程在何时完成,然后重启ndbd进程(如果作了该配置的话)。因此,如果你打算使用Unixkill命令杀死ndbd进程,就需要杀死这两个进程。中止ndbd进程的更恰当方法是使用管理客户端,并通过该管理客户端停止进程。

执行进程采用了1个线程,用于读取、写入和扫描数据,以及所有其他任务。该线程是异步实施的,以便能方便地处理数以千计的并发活动。此外,看门狗线程负责监督执行线程,以确保执行线程不会陷入无限循环。线程池负责处理文件I/O,每个线程均能处理一个打开的文件。这些线程也能被ndbd进程中的传输器用作传输器连接。在执行包含更新在内的大量操作的系统中,如果允许,ndbd进程能占用2CPU。对于拥有多CPU的机器,建议使用属于不同节点组的数个ndbd进程。