このセクションでは、NDB Cluster に新しいデータノードを追加するために必要な基本的な手順を示します。 この手順は、データノードのプロセスに ndbd バイナリと ndbmtd バイナリのどちらを使用する場合でも適用されます。 詳細な例については、セクション23.5.7.3「NDB Cluster データノードのオンラインでの追加: 詳細な例」を参照してください。
NDB Cluster がすでに実行されていると仮定すると、データノードをオンラインで追加するには、次の手順が必要です:
-
追加対象のノードに対応する新しい
[ndbd]
セクションを追加して、クラスタ構成config.ini
ファイルを編集します。 クラスタで複数の管理サーバーが使用されている場合は、管理サーバーで使用されるすべてのconfig.ini
ファイルに、これらの変更を加える必要があります。config.ini
ファイルに追加される新しいデータノードのノード ID が、既存のノードで使用されるノード ID と重複しないように注意する必要があります。 動的に割り当てられたノード ID を使用している API ノードがあり、それらの ID が新しいノードに使用するノード ID と一致する場合は、この手順の後半で説明するように、このような API ノードを強制的に「移行」できます。 -
すべての NDB Cluster 管理サーバーのローリング再起動を実行します。
重要新しい構成を強制的に読み取るには、すべての管理サーバーを
--reload
または--initial
オプションを付けて再起動する必要があります。 -
すべての既存の NDB Cluster データノードのローリング再起動を実行します。 既存のデータノードを再起動するときは、
--initial
を使用する必要がありません (通常は望ましくもありません)。新しいデータノードに割り当てるいずれかのノード ID と一致する動的に割り当てられた ID を持つ API ノードを使用している場合は、このステップでデータノードプロセスのいずれかを再起動する前に、すべての API ノード (SQL ノードを含む) を再起動する必要があります。 これにより、事前に明示的に割り当てられなかったノード ID を持つ API ノードは、このようなノード ID を放棄し、新しい ID を取得します。
NDB Cluster に接続されている SQL または API ノードのローリング再起動を実行します。
-
新しいデータノードを起動します。
新しいデータノードは、任意の順序で起動できます。 またそれらは、既存のすべてのデータノードのローリング再起動が完了してから、次のステップに進むまでの間に起動されるかぎり、同時に起動することもできます。
NDB Cluster 管理クライアントで 1 つまたは複数の
CREATE NODEGROUP
コマンドを実行して、新しいデータノードが属する新しいノードグループまたはノードグループを作成します。-
新しいデータノードを含め、すべてのデータノード間でクラスタデータを再配布します。 通常、これを行うには、
NDBCLUSTER
テーブルごとに mysql クライアントでALTER TABLE ... ALGORITHM=INPLACE, REORGANIZE PARTITION
ステートメントを発行します。例外:
MAX_ROWS
オプションを使用して作成されたテーブルの場合、このステートメントは機能しません。かわりに、ALTER TABLE ... ALGORITHM=INPLACE MAX_ROWS=...
を使用してこのようなテーブルを再編成します。 また、MAX_ROWS
を使用してパーティション数をこの方法で設定することは非推奨であり、かわりにPARTITION_BALANCE
を使用する必要があります。詳細は、セクション13.1.20.11「NDB_TABLE オプションの設定」 を参照してください。注記これは、新しいノードグループを追加する時点ですでに存在しているテーブルに対してのみ実行する必要があります。 新しいノードグループが追加された後に作成されたテーブルのデータは自動的に分散されますが、新しいノードが追加される前に存在していた特定のテーブル
tbl
に追加されたデータは、そのテーブルが再編成されるまで新しいノードを使用して分散されません。 -
ALTER TABLE ... REORGANIZE PARTITION ALGORITHM=INPLACE
はパーティションを再編成しますが、「old」 ノードで解放された領域は再利用しません。 これを行うには、mysql クライアントでNDBCLUSTER
テーブルごとにOPTIMIZE TABLE
ステートメントを発行します。これは、インメモリー
NDB
テーブルの可変幅カラムで使用される領域に対して機能します。OPTIMIZE TABLE
は、インメモリーテーブルの固定幅カラムではサポートされていません。「ディスクデータ」テーブルでもサポートされていません。
目的のノードをすべて追加してから、複数の CREATE NODEGROUP
コマンドを連続して発行し、新しいノードグループをクラスタに追加できます。