Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  NDB Cluster Shared-Memory Connections

25.4.3.12 NDB 集群共享内存连接

NDB 集群节点之间的通信通常使用 TCP/IP 处理。共享内存(SHM)传输器的特点是通过写入内存而不是套接字来传输信号。共享内存传输器(SHM)可以通过消除 TCP 连接所需的高达 20% 的开销来提高性能,当 API 节点(通常是 SQL 节点)和数据节点在同一主机上运行时。

  • 可以通过两种方式之一启用共享内存连接:

  • 通过将数据节点配置参数 UseShm 设置为 1,并将数据节点的 HostName 和 API 节点的 HostName 设置为相同的值。

通过在集群配置文件中使用 [shm] 部分,每个部分包含 NodeId1NodeId2 的设置。该方法将在本节后面详细描述。

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

[mysqld]
NodeId=51
HostName=10.0.0.1
Important

假设集群中有一个数据节点,节点 ID 为 1,一个 SQL 节点,节点 ID 为 51,在同一台主机上运行,IP 地址为 10.0.0.1。要启用这两个节点之间的 SHM 连接,只需要确保集群配置文件中包含以下条目:

这些条目是除了集群所需的其他条目和参数设置外的额外条目。完整的示例将在本节后面显示。

在启动使用 SHM 连接的数据节点之前,还需要确保每台主机的操作系统为共享内存段分配了足够的内存。请查看操作平台的文档以获取相关信息。在多台主机上运行数据节点和 API 节点的设置中,可以通过在配置文件的 [ndbd default] 部分中设置 UseShm 来启用所有主机上的共享内存。这将在本节后面显示。

  • 虽然不是必需的,但可以通过在配置文件的 [shm default] 部分中设置以下参数来调整集群中的所有 SHM 连接:

  • ShmSize:共享内存大小

  • ShmSpinTime:旋转时间(µs)在睡眠前

  • SendBufferMemory:从该节点发送信号的缓冲区大小(字节)

  • SendSignalId:指示每个信号中都包含信号 ID

  • Checksum:指示每个信号中都包含校验和

以下示例显示了一个简单的设置,使用 SHM 连接在多台主机上定义,用于 NDB 集群:

  1. 10.0.0.0:管理服务器

  2. 10.0.0.1:数据节点和 SQL 节点

  3. 10.0.0.2:数据节点和 SQL 节点

在这种情况下,每个数据节点使用 TCP 传输器与管理服务器和另一个数据节点通信;每个 SQL 节点使用共享内存传输器与本地数据节点通信,并使用 TCP 传输器与远程数据节点通信。基本配置文件的内容如下所示:

[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] 部分中设置;这些可以在每个连接的基础上在一个或多个 [shm] 部分中被覆盖。每个这样的部分必须与给定的 SHM 连接相关联,使用 NodeId1NodeId2 ;这些参数所需的值是两个节点的节点 ID,连接了传输器。您也可以使用 HostName1HostName2 来标识节点,但这些参数不是必需的。

API 节点没有设置主机名的将使用 TCP 传输器与数据节点独立于启动的主机进行通信;配置文件中的 [tcp default] 部分中的参数和值将应用于集群中的所有 TCP 传输器。

为了获得最佳性能,您可以为 SHM 传输器定义一个旋转时间 (ShmSpinTime 参数) ;这将影响数据节点接收器线程和 NDB 中的轮询所有者(接收线程或用户线程)。

  • Checksum

    Version (or later) NDB 8.3.0
    Type or units 布尔值
    Default true
    Range true, false
    Restart Type

    节点重启:需要集群的 滚动重启。 (NDB 8.3.0)

    该参数是一个布尔值(Y/N)参数,默认情况下禁用。当启用时,对所有消息进行 checksum 计算,然后将其放入发送缓冲区。

    该功能防止消息在发送缓冲区中被损坏,也作为数据在传输过程中被损坏的检查。

  • Group

    Version (or later) NDB 8.3.0
    Type or units 无符号整数
    Default 35
    Range 0 - 200
    Restart Type

    节点重启:需要集群的 滚动重启。 (NDB 8.3.0)

    确定组近似度;较小的值被解释为更近。默认值对于大多数情况已经足够。

  • HostName1

    Version (or later) NDB 8.3.0
    Type or units 名称或 IP 地址
    Default [...]
    Range ...
    Restart Type

    节点重启:需要集群的 滚动重启。 (NDB 8.3.0)

    可以使用 HostName1HostName2 参数来指定特定的网络接口,以便在两个节点之间的给定 SHM 连接中使用。这些参数的值可以是主机名或 IP 地址。

  • HostName2

    Version (or later) NDB 8.3.0
    Type or units 名称或 IP 地址
    Default [...]
    Range ...
    Restart Type

    节点重启:需要集群的 滚动重启。 (NDB 8.3.0)

    可以使用 HostName1HostName2 参数来指定特定的网络接口,以便在两个节点之间的给定 SHM 连接中使用。这些参数的值可以是主机名或 IP 地址。

  • NodeId1

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default [none]
    Range 1 - 255
    Restart Type

    节点重启:需要集群的 滚动重启。 (NDB 8.3.0)

    要标识两个节点之间的连接,需要为每个节点提供节点标识符,作为 NodeId1NodeId2

  • NodeId2

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default [none]
    Range 1 - 255
    Restart Type

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    要标识两个节点之间的连接,需要为每个节点提供节点标识符,作为NodeId1NodeId2

  • NodeIdServer

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default [none]
    Range 1 - 63
    Restart Type

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    标识共享内存连接的服务器端。默认情况下,这是数据节点的节点 ID。

  • OverloadLimit

    Version (or later) NDB 8.3.0
    Type or units 字节
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    当发送缓冲区中的未发送字节数超过这个值时,连接将被认为过载。请参阅第 25.4.3.14 节,“配置 NDB 集群发送缓冲参数”第 25.6.17.65 节,“ndbinfo transporters 表”,以获取更多信息。

  • PreSendChecksum

    Version (or later) NDB 8.3.0
    Type or units 布尔值
    Default false
    Range true, false
    Restart Type

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    如果启用了这个参数和Checksum,则在发送之前执行 checksum 检查,并检查节点之间的所有 SHM 信号以检测错误。如果 Checksum 未启用,则无效。

  • SendBufferMemory

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 2M
    Range 256K - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    使用共享内存连接从这个节点发送信号的共享内存缓冲区的大小(以字节为单位)。

  • SendSignalId

    Version (or later) NDB 8.3.0
    Type or units 布尔值
    Default false
    Range true, false
    Restart Type

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    要追踪分布式消息的路径,需要为每个消息提供唯一的标识符。将这个参数设置为 Y 可以使这些消息 ID 也被传输到网络上。这个功能在生产版本中默认禁用,在调试版本中默认启用。

  • ShmKey

    Version (or later) NDB 8.3.0
    Type or units 无符号整数
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    当设置共享内存段时,使用整数表示的节点 ID 来唯一标识共享内存段。没有默认值。如果启用了UseShm,则共享内存键将由 NDB 自动计算。

  • ShmSize

    Version (or later) NDB 8.3.0
    Type or units 字节
    Default 4M
    Range 64K - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。(NDB 8.3.0)

    每个 SHM 连接都有一个共享内存段,其中节点之间的消息由发送方放置并由读取方读取。该段的大小由ShmSize定义。默认值为 4MB。

  • ShmSpinTime

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 0
    Range 0 - 2000
    Restart Type

    节点重启:需要对集群进行滚动重启。(NDB 8.3.0)

    在接收时,等待睡眠前的时间,以微秒为单位。

  • SigNum

    Version (or later) NDB 8.3.0
    Type or units 无符号整数
    Default [...]
    Range 0 - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 7.6 中)
    Restart Type

    节点重启:需要对集群进行滚动重启。(NDB 8.3.0)

    该参数以前用于覆盖操作系统信号号;在 NDB 8.3 中,它不再使用,并且任何设置都将被忽略。

重启类型。 本节中的参数描述中使用的重启类型信息如下表所示:

表 25.21 NDB 集群重启类型

Symbol Restart Type Description
N 节点 该参数可以使用滚动重启(见第 25.6.5 节,“执行 NDB 集群的滚动重启”
S 系统 所有集群节点必须完全关闭,然后重新启动,以便更改该参数
I 初始 数据节点必须使用--initial选项重新启动