このページは機械翻訳したものです。
このセクションでは、NDB Cluster がストレージのデータを分割および複製する方法について説明します。
次の各段落では、このトピックを理解する上で中心となるいくつかの概念について説明します。
データノード. ndbd または ndbmtd プロセス。ノードがメンバーであるノードグループに割り当てられたフラグメントレプリカ、つまりパーティションのコピーを格納します。
各データノードは、別個のコンピュータに配置するようにしてください。 単一のコンピュータ上で複数のデータノードプロセスをホストすることもできますが、このような構成は通常はお勧めしません。
「「ノード」」および「「データノード」」という用語は、ndbd または ndbmtd プロセスを参照するときに同じ意味で使用されます。ここで言及しているように、管理ノード (ndb_mgmd プロセス) および SQL ノード (mysqld プロセス) はこの説明で指定されています。
ノードグループ. ノードグループは、1 つ以上のノードで構成され、パーティションまたはフラグメントレプリカのセットを格納します (次の項目を参照)。
NDB Cluster 内のノードグループの数は直接構成できません。次に示すように、データノードの数とフラグメントレプリカの数 (NoOfReplicas
構成パラメータ) の関数です:
[# of node groups] = [# of data nodes] / NoOfReplicas
したがって、4 つのデータノードを持つ NDB Cluster には、config.ini
ファイルで NoOfReplicas
が 1 に設定されている場合は 4 つのノードグループ、NoOfReplicas
が 2 に設定されている場合は 2 つのノードグループ、NoOfReplicas
が 4 に設定されている場合は 1 つのノードグループがあります。 フラグメントレプリカについては、このセクションの後半で説明します。NoOfReplicas
の詳細は、セクション23.3.3.6「NDB Cluster データノードの定義」 を参照してください。
NDB Cluster 内のすべてのノードグループは、同じ数のデータノードを持つ必要があります。
実行中の NDB Cluster に新しいノードグループ (およびその結果として新しいデータノード) をオンラインで追加できます。詳細は、セクション23.5.7「NDB Cluster データノードのオンラインでの追加」 を参照してください。
パーティション. これは、クラスタに格納されるデータの一部分です。 各ノードは、そのノードに割り当てられているパーティション (少なくとも 1 つのフラグメントレプリカ) の少なくとも 1 つのコピーをクラスタで使用できるようにします。
NDB Cluster によってデフォルトで使用されるパーティションの数は、次に示すように、データノードの数およびデータノードで使用されている LDM スレッドの数によって異なります:
[# of partitions] = [# of data nodes] * [# of LDM threads]
ndbmtd を実行しているデータノードを使用する場合、LDM スレッドの数は MaxNoOfExecutionThreads
の設定によって制御されます。 ndbd を使用する場合、単一の LDM スレッドが存在します。つまり、クラスタに参加しているノードと同じ数のクラスタパーティションが存在します。 これは、MaxNoOfExecutionThreads
を 3 以下に設定して ndbmtd を使用する場合にも当てはまります。 (LDM スレッドの数はこのパラメータの値とともに増加しますが、厳密に線形な方法では増加せず、設定に追加の制約があることに注意してください。詳細は、MaxNoOfExecutionThreads
の説明を参照してください。)
NDB とユーザー定義のパーティション化.
NDB Cluster は通常、NDBCLUSTER
テーブルを自動的にパーティション化します。 ただし、NDBCLUSTER
テーブルにユーザー定義のパーティション化を適用することもできます。 これには、次の制限があります。
NDB
テーブルを使用した本番では、KEY
およびLINEAR KEY
パーティション化スキームのみがサポートされます。-
任意の
NDB
テーブルに対して明示的に定義できるパーティションの最大数は、このセクションで前述したように決定される NDB Cluster 内のノードグループの数である8 * [
です。 データノードプロセスに対して ndbd を実行している場合、LDM スレッドの数を設定しても効果はありません (number of LDM threads
] * [number of node groups
]ThreadConfig
は ndbmtd にのみ適用されるため)。このような場合、この計算を実行するために、この値は 1 と同等であるかのように処理できます。詳細は、セクション23.4.3「ndbmtd — NDB Cluster データノードデーモン (マルチスレッド)」を参照してください。
NDB Cluster およびユーザー定義パーティショニングに関する詳細は、セクション23.1.7「NDB Cluster の既知の制限事項」、および セクション24.6.2「ストレージエンジンに関連するパーティショニング制限」 を参照してください。
フラグメントのレプリカ. これは、クラスタパーティションのコピーです。 ノードグループ内の各ノードには、フラグメントレプリカが格納されます。 パーティションレプリカと呼ばれることもあります。 フラグメントレプリカの数は、ノードグループ当たりのノード数と同じです。
フラグメントレプリカは、完全に単一のノードに属します。ノードには、複数のフラグメントレプリカを格納できます (通常は格納できます)。
次の図は、ndbd を実行している 4 つのデータノードがあり、それぞれ 2 つのノードの 2 つのノードグループに配置されている NDB Cluster を示しています。ノード 1 と 2 はノードグループ 0 に属し、ノード 3 と 4 はノードグループ 1 に属しています。
ここにはデータノードのみが表示されます。動作中の NDB Cluster では、クラスタ管理のために ndb_mgmd プロセスが必要ですが、クラスタによって格納されているデータにアクセスするために少なくとも 1 つの SQL ノードが必要ですが、わかりやすくするため、これらは図から省略されています。
クラスタに格納されたデータは、0、1、2、3 の番号が付けられた 4 つのパーティションに分割されています。 各パーティションは同じノードグループに (複数のコピーで) 格納されます。 パーティションは、次のように各ノードグループに交互に格納されます。
パーティション 0 はノードグループ 0 に格納され、プライマリフラグメントレプリカ (プライマリコピー) はノード 1 に格納され、バックアップフラグメントのレプリカ (パーティションのバックアップコピー) はノード 2 に格納されます。
パーティション 1 は他のノードグループ (ノードグループ 1) に格納され、このパーティションのプライマリフラグメントレプリカはノード 3 にあり、そのバックアップフラグメントレプリカはノード 4 にあります。
パーティション 2 はノードグループ 0 に格納されます。 ただし、その 2 つのフラグメントレプリカの配置は、パーティション 0 の配置から逆になります。パーティション 2 の場合、プライマリフラグメントレプリカはノード 2 に格納され、バックアップはノード 1 に格納されます。
パーティション 3 はノードグループ 1 に格納され、その 2 つのフラグメントレプリカの配置はパーティション 1 の配置から逆になります。 つまり、プライマリフラグメントレプリカはノード 4 にあり、バックアップはノード 3 にあります。
NDB Cluster の継続的な操作に関する意味は次のとおりです: クラスタに参加している各ノードグループのノードが少なくとも 1 つ動作しているかぎり、クラスタにはすべてのデータの完全なコピーがあり、実行可能なままです。 これを次の図に示します。
この例では、クラスタはそれぞれ 2 つのデータノードで構成される 2 つのノードグループで構成されています。 各データノードは、ndbd のインスタンスを実行しています。 クラスタ「「アライブ」」を保持するには、ノードグループ 0 の少なくとも 1 つのノードとノードグループ 1 の少なくとも 1 つのノードの組み合わせで十分です。 ただし、単一ノードグループの両方のノードで障害が発生した場合、他のノードグループの残りの 2 つのノードで構成される組合せでは不十分です。 この状況では、クラスタはパーティション全体を失ったため、すべての NDB Cluster データの完全なセットにアクセスできなくなります。
単一の NDB Cluster インスタンスでサポートされるノードグループの最大数は 48 です。