Spec-Zone .ru
спецификации, руководства, описания, API
|
NDBCLUSTER
(also known as NDB
) is an in-memory storage engine offering high-availability and
data-persistence features.
The NDBCLUSTER
storage engine can be configured with a range of failover and load-balancing options, but it is easiest to start
with the storage engine at the cluster level. MySQL Cluster's NDB
storage engine contains a complete set of data, dependent only on other
data within the cluster itself.
The "Cluster" portion of MySQL Cluster is configured independently of the MySQL servers. In a MySQL Cluster, each part of the cluster is considered to be a node.
In many contexts, the term "node" is used to indicate a computer, but when discussing MySQL Cluster it means a process. It is possible to run multiple nodes on a single computer; for a computer on which one or more cluster nodes are being run we use the term cluster host.
There are three types of cluster nodes, and in a minimal MySQL Cluster configuration, there will be at least three nodes, one of each of these types:
Management node: The role of this type of node is to manage the other nodes within the MySQL Cluster, performing such functions as providing configuration data, starting and stopping nodes, running backup, and so forth. Because this node type manages the configuration of the other nodes, a node of this type should be started first, before any other node. An MGM node is started with the command ndb_mgmd.
Data node: This type of node stores cluster data. There are as many data nodes as there are replicas, times the number of fragments (see Section 17.1.2, "MySQL Cluster Nodes, Node Groups, Replicas, and Partitions"). For example, with two replicas, each having two fragments, you need four data nodes. One replica is sufficient for data storage, but provides no redundancy; therefore, it is recommended to have 2 (or more) replicas to provide redundancy, and thus high availability. A data node is started with the command ndbd (see Section 17.4.1, "ndbd — The MySQL Cluster Data Node Daemon") or ndbmtd (see Section 17.4.3, "ndbmtd — The MySQL Cluster Data Node Daemon (Multi-Threaded)").
MySQL Cluster tables are normally stored completely in memory rather than on disk (this is why we refer to MySQL Cluster as an in-memory database). However, some MySQL Cluster data can be stored on disk; see Section 17.5.12, "MySQL Cluster Disk Data Tables", for more information.
SQL node: This is a node that accesses the cluster data.
In the case of MySQL Cluster, an SQL node is a traditional MySQL server that uses the NDBCLUSTER
storage engine. An SQL node is a mysqld process started with the --ndbcluster
and --ndb-connectstring
options, which are explained elsewhere in this chapter, possibly with additional MySQL server options as
well.
An SQL node is actually just a specialized type of API node, which
designates any application which accesses MySQL Cluster data. Another example of an API node is the
ndb_restore
utility that is used to restore a cluster backup. It is possible to write such applications using
the NDB API. For basic information about the NDB API, see
It is not realistic to expect to employ a three-node setup in a production environment. Such a configuration provides no redundancy; to benefit from MySQL Cluster's high-availability features, you must use multiple data and SQL nodes. The use of multiple management nodes is also highly recommended.
For a brief introduction to the relationships between nodes, node groups, replicas, and partitions in MySQL Cluster, see Section 17.1.2, "MySQL Cluster Nodes, Node Groups, Replicas, and Partitions".
Configuration of a cluster involves configuring each individual node in the cluster and setting up individual communication links between nodes. MySQL Cluster is currently designed with the intention that data nodes are homogeneous in terms of processor power, memory space, and bandwidth. In addition, to provide a single point of configuration, all configuration data for the cluster as a whole is located in one configuration file.
The management server manages the cluster configuration file and the cluster log. Each node in the cluster retrieves the configuration data from the management server, and so requires a way to determine where the management server resides. When interesting events occur in the data nodes, the nodes transfer information about these events to the management server, which then writes the information to the cluster log.
In addition, there can be any number of cluster client processes or applications. These include standard MySQL
clients, NDB
-specific API programs, and management clients. These are described in
the next few paragraphs.
Standard MySQL clients. MySQL Cluster can be used with existing MySQL applications written in PHP, Perl, C, C++, Java, Python, Ruby, and so on. Such client applications send SQL statements to and receive responses from MySQL servers acting as MySQL Cluster SQL nodes in much the same way that they interact with standalone MySQL servers.
MySQL clients using a MySQL Cluster as a data source can be modified to take advantage of the ability to connect
with multiple MySQL servers to achieve load balancing and failover. For example, Java clients using Connector/J
5.0.6 and later can use jdbc:mysql:loadbalance://
URLs (improved in Connector/J
5.1.7) to achieve load balancing transparently; for more information about using Connector/J with MySQL Cluster,
see
NDB
client programs. Client programs can be written that access MySQL
Cluster data directly from the NDBCLUSTER
storage engine, bypassing any MySQL
Servers that may connected to the cluster, using the NDB API, a high-level C++ API.
Such applications may be useful for specialized purposes where an SQL interface to the data is not needed. For
more information, see
NDB
-specific Java applications can also be written for MySQL Cluster using the MySQL Cluster Connector for Java. This MySQL Cluster Connector includes ClusterJ, a high-level database API similar to object-relational mapping persistence
frameworks such as Hibernate and JPA that connect directly to NDBCLUSTER
, and so
does not require access to a MySQL Server. Support is also provided in MySQL Cluster NDB 7.1 and later for ClusterJPA, an OpenJPA implementation for MySQL Cluster that leverages the
strengths of ClusterJ and JDBC; ID lookups and other fast operations are performed using ClusterJ (bypassing the
MySQL Server), while more complex queries that can benefit from MySQL's query optimizer are sent through the
MySQL Server, using JDBC. See
MySQL Cluster NDB 7.3 also supports applications written in JavaScript using Node.js. The MySQL Connector for
JavaScript includes adapters for direct access to the NDB
storage engine and as
well as for the MySQL Server. Applications using this Connector are typically event-driven and use a domain
object model similar in many ways to that employed by ClusterJ. For more information, see
The Memcache API for MySQL Cluster, implemented as the loadable ndbmemcache storage engine for memcached version 1.6 and later, can be used to provide a persistent MySQL Cluster data store, accessed using the memcache protocol.
The standard memcached caching engine is included in the MySQL Cluster NDB 7.3 distribution. Each memcached server has direct access to data stored in MySQL Cluster, but is also able to cache data locally and to serve (some) requests from this local cache.
For more information, see ndbmemcache
—Memcache API for MySQL
Cluster
Management clients. These clients connect to the management server and provide commands for starting and
stopping nodes gracefully, starting and stopping message tracing (debug versions only), showing node versions
and status, starting and stopping backups, and so on. An example of this type of program is the ndb_mgm management client supplied with MySQL Cluster (see
Section 17.4.5, "ndb_mgm
— The MySQL Cluster Management Client"). Such applications can be written using the MGM API, a C-language API that communicates directly with one or more MySQL
Cluster management servers. For more information, see
Oracle also makes available MySQL Cluster Manager, which provides an advanced command-line interface simplifying
many complex MySQL Cluster management tasks, such restarting a MySQL Cluster with a large number of nodes. The
MySQL Cluster Manager client also supports commands for getting and setting the values of most node
configuration parameters as well as mysqld
server options and variables relating to MySQL Cluster. MySQL Cluster Manager 1.1 provides support for adding
data nodes online. See the
Event logs. MySQL Cluster logs events by category (startup, shutdown, errors, checkpoints, and so on), priority, and severity. A complete listing of all reportable events may be found in Section 17.5.6, "Event Reports Generated in MySQL Cluster". Event logs are of the two types listed here:
Cluster log: Keeps a record of all desired reportable events for the cluster as a whole.
Node log: A separate log which is also kept for each individual node.
Under normal circumstances, it is necessary and sufficient to keep and examine only the cluster log. The node logs need be consulted only for application development and debugging purposes.
Checkpoint. Generally speaking, when data is saved to disk, it is said that a checkpoint
has been reached. More specific to MySQL Cluster, a checkpoint is a point in time where all committed
transactions are stored on disk. With regard to the NDB
storage engine, there are two types of checkpoints which work together to
ensure that a consistent view of the cluster's data is maintained. These are shown in the following list:
Local Checkpoint (LCP): This is a checkpoint that is specific to a single node; however, LCPs take place for all nodes in the cluster more or less concurrently. An LCP involves saving all of a node's data to disk, and so usually occurs every few minutes. The precise interval varies, and depends upon the amount of data stored by the node, the level of cluster activity, and other factors.
Global Checkpoint (GCP): A GCP occurs every few seconds, when transactions for all nodes are synchronized and the redo-log is flushed to disk.
For more information about the files and directories created by local checkpoints and global checkpoints, see FileSystemDir
Files