17.4.1 ndbd — The MySQL Cluster Data Node Daemon

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 data 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.

Causes ndbd to bind to a specific network
interface (host name or IP address). This option has no
default value.

This option was added in MySQL 5.0.29.

--daemon, -d

Command-Line Format

--daemon

Permitted Values

Type

boolean

Default

TRUE

Instructs ndbd to execute as a daemon
process. This is the default behavior.
--nodaemon can be used to prevent the
process from running as a daemon.

--initial

Command-Line Format

--initial

Permitted Values

Type

boolean

Default

FALSE

Instructs ndbd to perform an initial
start. An initial start erases any files created for
recovery purposes by earlier instances of
ndbd. It also re-creates recovery log
files. Note that on some operating systems this process can
take a substantial amount of time.

An --initial start is to be used
only when starting the
ndbd process under very special
circumstances; this is because this option causes all files
to be removed from the Cluster file system and all redo log
files to be re-created. These circumstances are listed here:

When performing a software upgrade which has changed the
contents of any files.

As a measure of last resort when for some reason the
node restart or system restart repeatedly fails. In this
case, be aware that this node can no longer be used to
restore data due to the destruction of the data files.

Use of this option prevents the
StartPartialTimeout and
StartPartitionedTimeout configuration
parameters from having any effect.

Important

This option does not affect any
backup files that have already been created by the
affected node.

This option also has no effect on recovery of data by a
data node that is just starting (or restarting) from data
nodes that are already running. This recovery of data
occurs automatically, and requires no user intervention in
a MySQL Cluster that is running normally.

It is permissible to use this option when starting the
cluster for the very first time (that is, before any data
node files have been created); however, it is
not necessary to do so.

--initial-start

Introduced

5.0.21

Command-Line Format

--initial-start

Permitted Values

Type

boolean

Default

FALSE

This option is used when performing a partial initial start
of the cluster. Each node should be started with this
option, as well as
--nowait-nodes.

Suppose that you have a 4-node cluster whose data nodes have
the IDs 2, 3, 4, and 5, and you wish to perform a partial
initial start using only nodes 2, 4, and 5—that is,
omitting node 3:

This option takes a list of data nodes which for which the
cluster will not wait for before starting.

This can be used to start the cluster in a partitioned
state. For example, to start the cluster with only half of
the data nodes (nodes 2, 3, 4, and 5) running in a 4-node
cluster, you can start each ndbd process
with --nowait-nodes=3,5. In this case, the
cluster starts as soon as nodes 2 and 4 connect, and does
not wait
StartPartitionedTimeout milliseconds for
nodes 3 and 5 to connect as it would otherwise.

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 will
start as soon as nodes 2, 4, and 5 connect and will not wait
for node 3 to start.

When using this option, you must also specify the node ID
for the data node being started with the
--ndb-nodeid option.

This option was added in MySQL 5.0.21.

--nodaemon

Command-Line Format

--nodaemon

Permitted Values

Type

boolean

Default

FALSE

Instructs ndbd not to start as a daemon
process. This is useful when ndbd is
being debugged and you want output to be redirected to the
screen.

--foreground

Command-Line Format

--foreground

Permitted Values

Type

boolean

Default

FALSE

Causes ndbd to execute as a foreground
process, primarily for debugging purposes. This option
implies the --nodaemon option.

--nostart, -n

Command-Line Format

--nostart

Permitted Values

Type

boolean

Default

FALSE

Instructs ndbd not to start
automatically. When this option is used,
ndbd connects to the management server,
obtains configuration data from it, and initializes
communication objects. However, it does not actually start
the execution engine until specifically requested to do so
by the management server. This can be accomplished by
issuing the proper START command in the
management client (see
Section 17.5.2, “Commands in the MySQL Cluster Management Client”).

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.
node_id is the node's unique
identifier. Note that node_id
represents the node's unique identifier. For example,
ndb_2_error.log is the error log generated
by the data 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:

Listings of possible ndbd exit codes and
messages generated when a data node process shuts down
prematurely can be found in
ndbd Error Messages.

Important

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, which is
the default behavior.

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 host name 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.

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 using 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 actions. 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 multi-processor 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 possible to use several
ndbd processes which belong to different node
groups; however, such a configuration is still considered
experimental and is not supported for MySQL 5.0 in
a production setting. See
Section 17.1.5, “Known Limitations of MySQL Cluster”.