16.5.2. ndbd, the Storage Engine Node Process
ndbd is the process that is used to handle
all the data in tables using the NDB Cluster storage engine.
This is the process that empowers a storage node to accomplish
distributed transaction handling, node recovery, checkpointing
to disk, online backup, and related tasks.
In a MySQL Cluster, a set of ndbd processes
cooperate in handling data. These processes can execute on the
same computer (host) or on different computers. The
correspondences between data nodes and Cluster hosts is
completely configurable.
ndbd generates a set of log files which are
placed in the directory specified by DataDir
in the config.ini
configuration file. These
log files are listed below. Note that
node_id
represents the node's unique
identifier. For example, ndb_2_error.log
is
the error log generated by the storage node whose node ID is
2
.
-
ndb_node_id
_error.log
is a file containing records of all crashes which the
referenced ndbd process has encountered.
Each record in this file contains a brief error string and a
reference to a trace file for this crash. A typical entry in
this file might appear as shown here:
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***
Note: It is very
important to be aware that the last entry in the error log
file is not necessarily the newest one (nor is it
likely to be). Entries in the error log are
not listed in chronological order;
rather, they correspond to the order of the trace files as
determined in the
ndb_node_id
_trace.log.next
file (see below). Error log entries are thus overwritten in
a cyclical and not sequential fashion.
-
ndb_node_id
_trace.log.trace_id
is a trace file describing exactly what happened just before
the error occurred. This information is useful for analysis
by the MySQL Cluster development team.
It is possible to configure the number of these trace files
that will be created before old files are overwritten.
trace_id
is a number which is
incremented for each successive trace file.
ndb_node_id
_trace.log.next
is the file that keeps track of the next trace file number
to be assigned.
ndb_node_id
_out.log
is a file containing any data output by the
ndbd process. This file is created only
if ndbd is started as a daemon.
ndb_node_id
.pid
is a file containing the process ID of the
ndbd process when started as a daemon. It
also functions as a lock file to avoid the starting of nodes
with the same identifier.
ndb_node_id
_signal.log
is a file used only in debug versions of
ndbd, where it is possible to trace all
incoming, outgoing, and internal messages with their data in
the ndbd process.
It is recommended not to use a directory mounted through NFS
because in some environments this can cause problems whereby the
lock on the .pid
file remains in effect
even after the process has terminated.
To start ndbd, it may also be necessary to
specify the hostname of the management server and the port on
which it is listening. Optionally, one may also specify the node
ID that the process is to use.
shell> ndbd --connect-string="nodeid=2;host=ndb_mgmd.mysql.com:1186"
See Section 16.4.4.2, “The MySQL Cluster connectstring
”, for
additional information about this issue.
Section 16.5.5, “Command Options for MySQL Cluster Processes”, describes other
options for ndbd.
When ndbd starts, it actually initiates two
processes. The first of these is called the “angel
process”; its only job is to discover when the execution
process has been completed, and then to restart the
ndbd process if it is configured to do so.
Thus, if you attempt to kill ndbd via the
Unix kill command, it is necessary to kill
both processes, beginning with the angel process. The preferred
method of terminating an ndbd process is to
use the management client and stop the process from there.
The execution process uses one thread for reading, writing, and
scanning data, as well as all other activities. This thread is
implemented asynchronously so that it can easily handle
thousands of concurrent activites. In addition, a watch-dog
thread supervises the execution thread to make sure that it does
not hang in an endless loop. A pool of threads handles file I/O,
with each thread able to handle one open file. Threads can also
be used for transporter connections by the transporters in the
ndbd process. In a system performing a large
number of operations, including updates, the
ndbd process can consume up to 2 CPUs if
permitted to do so. For a machine with many CPUs it is
recommended to use several ndbd processes
which belong to different node groups.