Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


18.1.1 MySQL Cluster の主な概念

NDBCLUSTER (NDB とも呼ばれる) は、高可用性とデータ永続性の機能を備えたインメモリーストレージエンジンです。

NDBCLUSTER ストレージエンジンはさまざまなフェイルオーバーとロードバランシングのオプションを使って構成できますが、クラスタレベルのストレージエンジンから始めるのがもっとも簡単です。MySQL Cluster の NDB ストレージエンジンには、クラスタ自体の内部にあるほかのデータにのみ依存する完全なデータセットが格納されます。

MySQL Cluster のクラスタ部分は、MySQL Server とは別個に構成されます。MySQL Cluster では、クラスタの各部分がノードとみなされます。

注記

ノードという用語は、多くのコンテキストではコンピュータを示すために使用されますが、MySQL Cluster について説明するときはプロセスを意味します。1 台のコンピュータで複数のノードを実行できます。1 つ以上のクラスタノードを実行しているコンピュータに対しては、クラスタホストという用語を使用します。

クラスタノードには 3 つのタイプがあります。最小限の MySQL Cluster 構成には少なくとも 3 つのノードがあり、各ノードがこれらのタイプのそれぞれに対応します。

  • 管理ノード: このタイプのノードの役割は、構成データの提供、ノードの起動と停止、バックアップの実行などの機能を実行して、MySQL Cluster 内のほかのノードを管理することです。このノードタイプはほかのノードの構成を管理するため、このタイプのノードは最初に (ほかのノードより先に) 起動するようにしてください。MGM ノードは ndb_mgmd コマンドで起動します。

  • データノード: このタイプのノードにはクラスタのデータが格納されます。データノードの数は、レプリカの数にフラグメントの数を乗算した数です (セクション18.1.2「MySQL Cluster のノード、ノードグループ、レプリカ、およびパーティション」を参照してください)。たとえば、レプリカが 2 つあり、それぞれにフラグメントが 2 つある場合は、4 つのデータノードが必要です。データストレージとしては 1 つのレプリカで十分ですが、それでは冗長性がありません。したがって、レプリカを 2 つ以上にして、冗長性 (およびその結果としての高可用性) を確保することをお勧めします。データノードは、ndbd (セクション18.4.1「ndbd — MySQL Cluster データノードデーモン」を参照してください) または ndbmtd (セクション18.4.3「ndbmtd — MySQL Cluster データノードデーモン (マルチスレッド)」を参照してください) コマンドで起動します。

    通常、MySQL Cluster テーブルはディスクではなくメモリー内に完全に格納されます (MySQL Cluster をインメモリーデータベースと呼ぶ理由はここにあります)。ただし、MySQL Cluster の一部のデータはディスクに格納できます。詳細は、セクション18.5.12「MySQL Cluster ディスクデータテーブル」を参照してください。

  • SQL ノード: これは、クラスタデータにアクセスするノードです。MySQL Cluster の場合、SQL ノードは NDBCLUSTER ストレージエンジンを使用する従来の MySQL Server です。SQL ノードは、--ndbcluster および --ndb-connectstring オプション (これらについては、この章の別の場所で説明します) を指定して起動される mysqld プロセスです。場合によっては、追加の MySQL Server オプションも指定できます。

    SQL ノードは、実際には MySQL Cluster データにアクセスするアプリケーションが指定された特別なタイプの API ノードです。API ノードのもう 1 つの例は、クラスタのバックアップをリストアするために使われる ndb_restore ユーティリティーです。NDB API を使用してこのようなアプリケーションを作成できます。NDB API の基本情報については、Getting Started with the NDB APIを参照してください。

重要

本番環境で 3 ノードセットアップの採用を期待するのは現実的ではありません。このような構成には冗長性がありません。MySQL Cluster の高可用性機能の恩恵を受けるには、複数のデータノードと SQL ノードを使用する必要があります。複数の管理ノードを使用することも、強くお勧めします。

MySQL Cluster のノード間、ノードグループ間、レプリカ間、およびパーティション間の関係の概要については、セクション18.1.2「MySQL Cluster のノード、ノードグループ、レプリカ、およびパーティション」を参照してください。

クラスタの構成には、クラスタ内の各ノードの構成と、ノード間の個々の通信リンクの設定が含まれます。MySQL Cluster は現在、データノードがプロセッサの性能、メモリースペース、および帯域幅に関して均一になるよう開発されています。さらに、一元管理の構成を提供するため、クラスタのすべての構成データが全体として 1 つの構成ファイルに格納されます。

管理サーバーは、クラスタ構成ファイルとクラスタログを管理します。クラスタ内の各ノードは、管理サーバーから構成データを取得するため、管理サーバーがどこにあるかを特定する手段を必要とします。データノードで注目に値するイベントが発生すると、そのノードはこれらのイベントに関する情報を管理サーバーに転送し、管理サーバーはその情報をクラスタログに書き込みます。

さらに、任意の数のクラスタクライアントプロセスまたはアプリケーションが存在する可能性があります。これらには、標準の MySQL クライアント、NDB 専用の API プログラム、管理クライアントなどが含まれます。次のいくつかの段落で、これらについて説明します。

標準の MySQL クライアント  MySQL Cluster は、PHP、Perl、C、C++、Java、Python、Ruby などで作成された既存の MySQL アプリケーションとともに使用できます。このようなクライアントアプリケーションは、スタンドアロンの MySQL Server とやり取りする場合とほとんど同じ方法で、MySQL Cluster の SQL ノードとして機能する MySQL Server に SQL ステートメントを送信し、その MySQL Server から応答を受信します。

MySQL Cluster をデータソースとして使用する MySQL クライアントは、複数の MySQL Server に接続する機能を利用してロードバランシングとフェイルオーバーを実現するように変更できます。たとえば、Connector/J 5.0.6 以降を使用する Java クライアントは、jdbc:mysql:loadbalance:// URL (Connector/J 5.1.7 で改良済み) を使用してロードバランシングを透過的に実現できます。MySQL Cluster での Connector/J の使用方法の詳細は、Using Connector/J with MySQL Clusterを参照してください。

NDB クライアントプログラム  クラスタに接続されている可能性がある MySQL Server をバイパスし、高レベルの C++ API である NDB API を使用して NDBCLUSTER ストレージエンジンから直接 MySQL Cluster データにアクセスするクライアントプログラムを作成できます。このようなアプリケーションは、データへの SQL インタフェースを必要としない特殊な目的に役立ちます。詳細は、The NDB APIを参照してください。

Java 用 MySQL Cluster Connector を使用して、MySQL Cluster 用に NDB 専用の Java アプリケーションを作成することもできます。この MySQL Cluster Connector には、NDBCLUSTER に直接接続する Hibernate や JPA のようなオブジェクトリレーショナルマッピングの永続性フレームワークに似た高レベルのデータベース API である ClusterJ が含まれているため、MySQL Server へのアクセスは必要ありません。MySQL Cluster NDB 7.1 以降では、ClusterJ と JDBC の長所を生かした MySQL Cluster 用の OpenJPA 実装である ClusterJPA もサポートされます。ID ルックアップやその他の高速処理は ClusterJ を使用して (MySQL Server をバイパスして) 実行されますが、MySQL のクエリーオプティマイザによるメリットが得られるより複雑なクエリーは、JDBC を使用して MySQL Server 経由で送信されます。詳細は、Java and MySQL ClusterおよびThe ClusterJ API and Data Object Modelを参照してください。

MySQL Cluster NDB 7.3 以降では、Node.js を使用して JavaScript で作成されたアプリケーションもサポートされます。JavaScript 用の MySQL Connector には、MySQL Server だけでなく、NDB ストレージエンジンに直接アクセスするためのアダプタも含まれています。この Connector を使用するアプリケーションは、通常イベント駆動型であり、ClusterJ に採用されているものと多くの点で似ているドメインオブジェクトモデルを使用します。詳細は、MySQL NoSQL Connector for JavaScriptを参照してください。

memcached バージョン 1.6 以降用のロード可能な ndbmemcache ストレージエンジンとして実装されている MySQL Cluster 用の Memcache API を使用して、memcache プロトコルを使用してアクセスされる永続的な MySQL Cluster データストアを提供できます。

標準の memcached キャッシュエンジンは、MySQL Cluster NDB 7.3 以降の配布に含まれています。各 memcached サーバーは、MySQL Cluster に格納されたデータに直接アクセスしますが、データをローカルでキャッシュして、このローカルキャッシュから要求を処理することもできます。

詳細は、ndbmemcache—Memcache API for MySQL Clusterを参照してください。

管理クライアント  これらのクライアントは、管理サーバーに接続して、ノードの正常な起動と停止、メッセージトレースの開始と停止 (デバッグバージョンのみ)、ノードのバージョンとステータスの表示、バックアップの開始と停止などのコマンドを提供します。このタイプのプログラムの例として、MySQL Cluster に付属の ndb_mgm 管理クライアントがあります (セクション18.4.5「ndb_mgm — MySQL Cluster 管理クライアント」を参照してください)。このようなアプリケーションは、1 つ以上の MySQL Cluster 管理サーバーと直接通信する C 言語 API である MGM API を使用して作成できます。詳細は、The MGM APIを参照してください。

オラクルは、多数のノードを含む MySQL Cluster の再起動など、MySQL Cluster の多くの複雑な管理タスクを簡略化する高度なコマンド行インタフェースを備えた MySQL Cluster Manager も提供しています。MySQL Cluster Manager クライアントは、MySQL Cluster に関連する mysqld サーバーのオプションや変数に加えて、ほとんどのノード構成パラメータの値を取得および設定するためのコマンドもサポートします。詳細は、MySQL™ Cluster Manager 1.3.6 User Manualを参照してください。

イベントログ  MySQL Cluster は、イベントをカテゴリ (起動、シャットダウン、エラー、チェックポイントなど)、優先度、および重大度別に記録します。すべてのレポート可能イベントの完全なリストについては、セクション18.5.6「MySQL Cluster で生成されたイベントレポート」を参照してください。イベントログには、ここに示す 2 つのタイプがあります。

  • クラスタログ: クラスタに関する必要なすべてのレポート可能イベントが全体として保持されます。

  • ノードログ: 個々のノードごとに保持される個別のログです。

注記

通常の状況では、クラスタログのみを保持して調べるだけで必要十分です。ノードログを調べる必要があるのは、アプリケーション開発やデバッグの場合だけです。

チェックポイント  一般的には、データをディスクに保存したときにチェックポイントに達したといいます。MySQL Cluster に限定した場合、チェックポイントはコミットされたトランザクションがディスクに格納された時点です。NDB ストレージエンジンについては 2 つのタイプのチェックポイントがあり、その組み合わせによってクラスタのデータを一貫して確認し続けることができます。次のリストにそれらを示します。

  • ローカルチェックポイント (LCP): これは、1 つのノードに固有のチェックポイントです。ただし、LCP はクラスタ内のすべてのノードである程度同時に発生します。LCP は、ノードのすべてのデータをディスクに保存する必要があるため、通常は数分間隔で発生します。正確な間隔は、ノードに格納されているデータの量、クラスタのアクティビティーのレベル、およびその他の要因によって異なります。

  • グローバルチェックポイント (GCP): GCP は、すべてのノードのトランザクションが同期し、Redo ログがディスクにフラッシュされたときに、数秒間隔で発生します。

ローカルチェックポイントとグローバルチェックポイントによって作成されるファイルおよびディレクトリの詳細は、MySQL Cluster Data Node File System Directory Filesを参照してください。


User Comments
Sign Up Login You must be logged in to post a comment.