このセクションでは、MySQL Cluster が格納するデータを分割および複製する方法について説明します。
次の各段落では、このトピックを理解する上で中心となるいくつかの概念について説明します。
(データ) ノード レプリカ (そのノードがメンバーとなっているノードグループに割り当てられたパーティション (次を参照してください) のコピー) を格納する ndbd プロセスです。
各データノードは、別個のコンピュータに配置するようにしてください。1 つのコンピュータで複数の ndbd プロセスをホストすることも可能ですが、そのような構成はサポートされていません。
通常、ndbd プロセスに言及するときは、「ノード」と「データノード」を区別せずに使用します。この説明で管理ノード (ndb_mgmd プロセス) と SQL ノード (mysqld プロセス) に言及するときは、そのように明示します。
ノードグループ ノードグループは、1 つ以上のノードで構成され、パーティションまたはレプリカ (次の項目を参照してください) のセットを格納します。
MySQL Cluster 内のノードグループの数を直接構成することはできません。これは、ここに示すように、データノードの数とレプリカの数 (NoOfReplicas
構成パラメータ) の関数です。
[number_of_node_groups] = number_of_data_nodes / NoOfReplicas
したがって、4 つのデータノードを含む MySQL Cluster で、config.ini
ファイルの NoOfReplicas
が 1 に設定されている場合は 4 つのノードグループが存在し、NoOfReplicas
が 2 に設定されている場合は 2 つのノードグループが存在し、NoOfReplicas
が 4 に設定されている場合は 1 つのノードグループが存在します。レプリカについてはこのセクションで後述します。NoOfReplicas
の詳細は、セクション18.3.2.6「MySQL Cluster データノードの定義」を参照してください。
MySQL Cluster 内のすべてのノードグループに同じ数のデータノードが含まれている必要があります。
実行中の MySQL Cluster にオンラインで新しいノードグループ (およびその結果としての新しいデータノード) を追加できます。詳細は、セクション18.5.13「MySQL Cluster データノードのオンライン追加」を参照してください。
パーティション これは、クラスタに格納されるデータの一部分です。クラスタに参加するノードと同じ数のクラスタパーティションが存在します。各ノードは、そのノードに割り当てられたパーティションの少なくとも 1 つのコピー (つまり、少なくとも 1 つレプリカ) をクラスタで利用可能な状態に維持する役割を担います。
レプリカは完全に 1 つのノードに属します。ノードには複数のレプリカを格納できます (そして通常はそのようにします)。
NDB とユーザー定義のパーティション化
通常、MySQL Cluster は NDBCLUSTER
テーブルを自動的にパーティション化します。ただし、NDBCLUSTER
テーブルにユーザー定義のパーティション化を適用することもできます。これには、次の制限があります。
NDB
テーブルには、KEY
およびLINEAR KEY
パーティション化スキームのみを使用できます。-
ndbd を使用する場合、
NDB
テーブルに対して明示的に定義できるパーティションの最大数は8 * [
です。(MySQL Cluster 内のノードグループの数は、このセクションで前述した方法で決定されます。)ノードグループの数
]ndbmtd を使用する場合、この最大数は
MaxNoOfExecutionThreads
構成パラメータの値によって決定されるローカルクエリーハンドラスレッドの数にも影響されます。このような場合、NDB
テーブルに対して明示的に定義できるパーティションの最大数は4 * MaxNoOfExecutionThreads * [
になります。ノードグループの数
]詳細は、セクション18.4.3「ndbmtd — MySQL Cluster データノードデーモン (マルチスレッド)」を参照してください。
MySQL Cluster とユーザー定義のパーティション化に関する詳細は、セクション18.1.6「MySQL Cluster の既知の制限」およびセクション19.6.2「ストレージエンジンに関連するパーティショニング制限」を参照してください。
レプリカ これは、クラスタパーティションのコピーです。レプリカは、ノードグループ内の各ノードに格納されます。パーティションレプリカと呼ばれることもあります。レプリカの数は、ノードグループあたりのノード数と同じになります。
次の図に、4 つのデータノードを含む MySQL Cluster を示します。これらのノードはそれぞれ 2 ノードから成る 2 つのノードグループに配置されています。ノード 1 および 2 はノードグループ 0 に属し、ノード 3 および 4 はノードグループ 1 に属します。ここにはデータ (ndbd) ノードのみを表示しています。正常に機能するクラスタにはクラスタ管理用の ndb_mgm プロセスと、クラスタに格納されているデータにアクセスするための SQL ノードが少なくとも 1 つ必要ですが、この図ではわかりやすくするためにこれらを省略しています。

クラスタに格納されたデータは、0、1、2、3 の番号が付けられた 4 つのパーティションに分割されています。各パーティションは同じノードグループに (複数のコピーで) 格納されます。パーティションは、次のように各ノードグループに交互に格納されます。
パーティション 0 はノードグループ 0 に格納されます。プライマリレプリカ (プライマリコピー) がノード 1 に格納され、バックアップレプリカ (パーティションのバックアップコピー) がノード 2 に格納されます。
パーティション 1 は別のノードグループ (ノードグループ 1) に格納されます。このパーティションのプライマリレプリカがノード 3 に格納され、そのバックアップレプリカがノード 4 に格納されます。
パーティション 2 はノードグループ 0 に格納されます。ただし、その 2 つのレプリカはパーティション 0 とは逆に配置されます。プライマリレプリカがノード 2 に格納され、バックアップレプリカがノード 1 に格納されます。
パーティション 3 はノードグループ 1 に格納され、その 2 つのレプリカはパーティション 1 とは逆に配置されます。つまり、プライマリレプリカがノード 4 に格納され、バックアップレプリカがノード 3 に格納されます。
これは、MySQL Cluster の継続的な運用に関して次のような意味を持っています。クラスタに参加している各ノードグループで少なくとも 1 つのノードが動作しているかぎり、クラスタはすべてのデータの完全なコピーを保持し、実行可能な状態を維持します。これを次の図に示します。

この例では、クラスタはそれぞれに 2 つのノードを含む 2 つのノードグループで構成されており、クラスタを「存続」させるには、ノードグループ 0 の少なくとも 1 つのノードとノードグループ 1 の少なくとも 1 つのノードの任意の組み合わせ (図の矢印で示したもの) があれば十分です。ただし、どちらかのノードグループの両方のノードに障害が発生した場合、残りの 2 つのノード (X 印を付けた矢印で示したもの) では不十分です。どちらの場合も、クラスタからパーティション全体が消失するため、すべてのクラスタデータの完全なセットへのアクセスを提供できなくなります。