MySQL 8.0 リファレンスマニュアル


23.3.3.12 NDB Cluster の共有メモリー接続

NDB クラスタノード間の通信は通常、TCP/IP を使用して処理されます。 共有メモリー (SHM) トランスポータは、ソケット上ではなくメモリー内に書き込むことによってシグナルが送信されるという事実によって区別されます。 共有メモリートランスポータ (SHM) は、同じホスト上で API ノード (通常は SQL ノード) とデータノードを同時に実行するときに TCP 接続に必要なオーバーヘッドの最大 20% を軽減することで、パフォーマンスを向上させることができます。 共有メモリー接続は、次の 2 つの方法のいずれかで有効にできます:

  • UseShm データノード構成パラメータを 1 に設定し、データノードには HostName、API ノードには HostName を同じ値に設定します。

  • クラスタ構成ファイルの[shm]セクションを使用することで、それぞれに NodeId1 および NodeId2 の設定が含まれます。 このメソッドの詳細は、このセクションの後半で説明します。

クラスタが、ノード ID 1 を持つデータノードと、10.0.0.1 の同じホストコンピュータ上にノード ID 51 を持つ SQL ノードを実行しているとします。 これら 2 つのノード間の SHM 接続を有効にするには、次のエントリがクラスタ構成ファイルに含まれていることを確認する必要があります:

[ndbd]
NodeId=1
HostName=10.0.0.1
UseShm=1

[mysqld]
NodeId=51
HostName=10.0.0.1
重要

ここで示した 2 つのエントリは、クラスタで必要な他のエントリおよびパラメータ設定に追加されています。 より完全な例は、このセクションの後半で示します。

SHM 接続を使用するデータノードを起動する前に、そのようなデータノードをホストする各コンピュータ上のオペレーティングシステムに、共有メモリーセグメントに十分なメモリーが割り当てられていることも確認する必要があります。 詳細は、ご使用のオペレーティングプラットフォームのドキュメントを参照してください。 複数のホストがそれぞれデータノードと API ノードを実行している設定では、構成ファイルの[ndbd default]セクションで UseShm を設定することによって、このようなすべてのホストで共有メモリーを有効にできます。 これをこのセクションの後半の例に示します。

厳密には必要ありませんが、クラスタ構成 (config.ini) ファイルの[shm default]セクションで次のパラメータのいずれかまたは複数を設定することで、クラスタ内のすべての SHM 接続のチューニングを実行できます:

  • ShmSize : 共有メモリーサイズ

  • ShmSpinTime : スリープ前にスピンする時間 (秒)

  • SendBufferMemory : このノードから送信されたシグナルのバッファサイズ (バイト単位)。

  • SendSignalId : トランスポータを介して送信される各シグナルにシグナル ID が含まれていることを示します。

  • Checksum : トランスポータを介して送信される各シグナルにチェックサムが含まれることを示します。

  • PreSendChecksum : チェックサムのチェックはシグナルの送信前に行われます。これが機能するにはチェックサムも有効にする必要があります

この例は、NDB Cluster 内の複数のホストに SHM 接続が定義されている単純な設定を示しています。ここにリストされている 3 台のコンピュータをホスト名別に使用し、示されているノードタイプをホストします:

  1. 10.0.0.0: 管理サーバー

  2. 10.0.0.1: データノードと SQL ノード

  3. 10.0.0.2: データノードと SQL ノード

このシナリオでは、各データノードは TCP トランスポータを使用して管理サーバーとほかのデータノードの両方と通信します。各 SQL ノードは共有メモリートランスポータを使用してローカルのデータノードと通信し、TCP トランスポータを使用してリモートデータノードと通信します。 この設定を反映する基本構成は、次に示す内容の config.ini ファイルによって有効になります:

[ndbd default]
DataDir=/path/to/datadir
UseShm=1

[shm default]
ShmSize=8M
ShmSpintime=200
SendBufferMemory=4M

[tcp default]
SendBufferMemory=8M

[ndb_mgmd]
NodeId=49
Hostname=10.0.0.0
DataDir=/path/to/datadir

[ndbd]
NodeId=1
Hostname=10.0.0.1
DataDir=/path/to/datadir

[ndbd]
NodeId=2
Hostname=10.0.0.2
DataDir=/path/to/datadir

[mysqld]
NodeId=51
Hostname=10.0.0.1

[mysqld]
NodeId=52
Hostname=10.0.0.2

[api]
[api]

すべての共有メモリートランスポータに影響するパラメータは、[shm default]セクションで設定されます。これらは、1 つ以上の[shm]セクションで接続ごとにオーバーライドできます。 このような各セクションは、NodeId1 および NodeId2 を使用して特定の SHM 接続に関連付ける必要があります。これらのパラメータに必要な値は、トランスポータによって接続された 2 つのノードのノード ID です。 HostName1 および HostName2 を使用してホスト名でノードを識別することもできますが、これらのパラメータは必須ではありません。

ホスト名が設定されていない API ノードは、TCP トランスポータを使用して、起動されたホストから独立したデータノードと通信します。構成ファイルの[tcp default]セクションで設定されたパラメータと値は、クラスタ内のすべての TCP トランスポータに適用されます。

最適なパフォーマンスを得るために、SHM トランスポータ (ShmSpinTime パラメータ) のスピン時間を定義できます。これは、NDB のデータノード受信側スレッドとポーリング所有者 (受信スレッドまたはユーザースレッド) の両方に影響します。

  • Checksum

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 boolean
    デフォルト true
    範囲 true, false
    再起動タイプ

    N (NDB 8.0.13)

    このパラメータはブール (Y/N) パラメータであり、デフォルトで無効になっています。 有効にすると、送信バッファーに配置される前にすべてのメッセージのチェックサムが計算されます。

    この機能によって、送信バッファーで待機中のメッセージの破損が回避されます。 これは、トランスポート時のデータ破損に対するチェックとしても機能します。

  • グループ

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 unsigned
    デフォルト 35
    範囲 0 - 200
    再起動タイプ

    N (NDB 8.0.13)

    グループの近接度を決定します。小さい値は近いと解釈されます。 ほとんどの場合、デフォルト値で十分です。

  • HostName1

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 name or IP address
    デフォルト [...]
    範囲 ...
    再起動タイプ

    N (NDB 8.0.13)

    HostName1 および HostName2 パラメータを使用すると、2 つのノード間の特定の SHM 接続で使用する特定のネットワークインタフェースを指定できます。 これらのパラメータに使用する値は、ホスト名または IP アドレスです。

  • HostName2

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 name or IP address
    デフォルト [...]
    範囲 ...
    再起動タイプ

    N (NDB 8.0.13)

    HostName1 および HostName2 パラメータを使用すると、2 つのノード間の特定の SHM 接続で使用する特定のネットワークインタフェースを指定できます。 これらのパラメータに使用する値は、ホスト名または IP アドレスです。

  • NodeId1

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 numeric
    デフォルト [none]
    範囲 1 - 255
    再起動タイプ

    N (NDB 8.0.13)

    2 つのノード間の接続を識別するには、各ノードのノード識別子を NodeId1 および NodeId2 として指定する必要があります。

  • NodeId2

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 numeric
    デフォルト [none]
    範囲 1 - 255
    再起動タイプ

    N (NDB 8.0.13)

    2 つのノード間の接続を識別するには、各ノードのノード識別子を NodeId1 および NodeId2 として指定する必要があります。

  • NodeIdServer

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 numeric
    デフォルト [none]
    範囲 1 - 63
    再起動タイプ

    N (NDB 8.0.13)

    共有メモリー接続のサーバー側を識別します。 デフォルトでは、これはデータノードのノード ID です。

  • OverloadLimit

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 bytes
    デフォルト 0
    範囲 0 - 4294967039 (0xFFFFFEFF)
    再起動タイプ

    N (NDB 8.0.13)

    送信バッファーにこれより多くの未送信バイトがあるときは、接続が過負荷状態であるとみなされます。 詳細は、セクション23.3.3.14「NDB Cluster 送信バッファーパラメータの構成」およびセクション23.5.14.55「ndbinfo transporters テーブル」を参照してください。

  • PreSendChecksum

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 boolean
    デフォルト false
    範囲 true, false
    再起動タイプ

    このパラメータと Checksum の両方が有効になっている場合は、送信前チェックサムチェックを実行し、ノード間のすべての SHM シグナルにエラーがないかどうかを確認します。 Checksum も有効になっていない場合は、何の効果もありません。

  • SendBufferMemory

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 integer
    デフォルト 2M
    範囲 256K - 4294967039 (0xFFFFFEFF)
    再起動タイプ

    N (NDB 8.0.13)

    共有メモリー接続を使用してこのノードから送信されたシグナルの共有メモリーバッファのサイズ (バイト)。

  • SendSignalId

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 boolean
    デフォルト false
    範囲 true, false
    再起動タイプ

    N (NDB 8.0.13)

    配信されたメッセージの経路をたどるには、各メッセージに一意の識別子を設定する必要があります。 このパラメータを Y に設定すると、メッセージ ID もネットワーク経由で転送されるようになります。 この機能は、製品ビルドではデフォルトで無効になっており、-debug ビルドで有効になります。

  • ShmKey

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 unsigned
    デフォルト 0
    範囲 0 - 4294967039 (0xFFFFFEFF)
    再起動タイプ

    N (NDB 8.0.13)

    共有メモリーセグメントを設定するときは、整数で表されるノード ID を使用して、通信に使用する共有メモリーセグメントを一意に識別します。 デフォルト値はありません。 UseShm が有効な場合、共有メモリーキーは NDB によって自動的に計算されます。

  • ShmSize

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 bytes
    デフォルト 4M
    範囲 64K - 4294967039 (0xFFFFFEFF)
    再起動タイプ

    N (NDB 8.0.13)

    各 SHM 接続には、送信側と読み取り側でノード間のメッセージを配置する共有メモリーセグメントがあります。 このセグメントのサイズは ShmSize で定義されます。 デフォルトの値は 4M バイトです。

  • ShmSpinTime

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 integer
    デフォルト 0
    範囲 0 - 2000
    再起動タイプ

    受信時にスリープ前に待機する時間 (マイクロ秒)。

  • SigNum

    バージョン (またはそれ以降) NDB 8.0.13
    タイプまたは単位 unsigned
    デフォルト [...]
    範囲 0 - 4294967039 (0xFFFFFEFF)
    非推奨 Yes (in NDB 7.6)
    再起動タイプ

    N (NDB 8.0.13)

    このパラメータは以前はオペレーティングシステムのシグナル番号をオーバーライドするために使用されていました。NDB 8.0 では使用されなくなり、その設定は無視されます。

再起動のタイプ.  このセクションのパラメータの説明で使用される再起動タイプに関する情報を次のテーブルに示します:

表 23.22 NDB Cluster の再起動タイプ

シンボル 再起動タイプ 説明
N ノード パラメータはローリング再起動を使用して更新できます (セクション23.5.5「NDB Cluster のローリング再起動の実行」 を参照)
S システム このパラメータの変更を有効にするには、すべてのクラスタノードを完全に停止してから再起動する必要があります
I Initial --initial オプションを使用してデータノードを再起動する必要があります


関連キーワード:  NDB, テーブル, ノード, ndbinfo, タイプ, パラメータ, データ, ndb, 接続, 構成