Documentation Home

21.4.3.12 NDB Cluster 共享内存连接

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

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

  • 通过使用[shm]集群配置文件中的部分,每个部分包含 NodeId1和 的设置NodeId2。本节稍后将更详细地描述此方法。

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

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

[mysqld]
NodeId=51
HostName=10.0.0.1
重要的

刚刚显示的两个条目是集群所需的任何其他条目和参数设置的补充。本节后面将显示一个更完整的示例。

在启动使用 SHM 连接的数据节点之前,还需要确保托管此类数据节点的每台计算机上的操作系统都有足够的内存分配给共享内存段。有关这方面的信息,请参阅您的操作平台的文档。在多个主机各自运行一个数据节点和一个 API 节点的设置中,可以通过在配置文件的部分中设置UseShm在所有这些主机上启用共享内存。[ndbd default]这将在本节后面的示例中显示。

虽然不是严格要求,但可以通过在集群配置 ( ) 文件 的[shm default]部分中设置以下一个或多个参数来调整集群中的所有 SHM 连接:config.ini

  • ShmSize: 共享内存大小

  • ShmSpinTime: 以微秒为单位的时间在睡觉前自旋

  • SendBufferMemory:从该节点发送的信号的缓冲区大小,以字节为单位。

  • SendSignalId:表示信号 ID 包含在通过传输器发送的每个信号中。

  • Checksum:表示通过传输器发送的每个信号中都包含校验和。

  • PreSendChecksum:在发送信号之前检查校验和;还必须启用校验和才能使其工作

此示例显示了一个简单的设置,在多个主机上定义了 SHM 连接,在 NDB Cluster 中使用此处按主机名列出的 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]部分中设置;[shm]这些可以在一个或多个部分中基于每个连接被覆盖 。每个这样的部分必须与给定的 SHM 连接相关联,使用 NodeId1NodeId2;这些参数所需的值是传输器连接的两个节点的节点 ID。您还可以使用HostName1 和按主机名标识节点HostName2,但这些参数不是必需的。

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

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

  • Checksum

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 布尔值
    默认 真的
    范围 真假
    重启类型

    N(新开发银行 7.5.0)

    此参数是一个布尔值 ( Y/ N) 参数,默认情况下禁用。启用后,所有消息的校验和都会在放入发送缓冲区之前进行计算。

    此功能可防止消息在发送缓冲区中等待时被损坏。它还可以检查数据在传输过程中是否损坏。

  • Group

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 35
    范围 0 - 200
    重启类型

    N(新开发银行 7.5.0)

    确定组接近度;较小的值被解释为更接近。对于大多数情况,默认值就足够了。

  • HostName1

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 名称或 IP 地址
    默认 [...]
    范围 ...
    重启类型

    N(新开发银行 7.5.0)

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

  • HostName2

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 名称或 IP 地址
    默认 [...]
    范围 ...
    重启类型

    N(新开发银行 7.5.0)

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

  • NodeId1

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 [没有任何]
    范围 1 - 255
    重启类型

    N(新开发银行 7.5.0)

    要识别两个节点之间的连接,有必要为每个节点提供节点标识符,如 NodeId1NodeId2

  • NodeId2

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 [没有任何]
    范围 1 - 255
    重启类型

    N(新开发银行 7.5.0)

    要识别两个节点之间的连接,有必要为每个节点提供节点标识符,如 NodeId1NodeId2

  • NodeIdServer

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 [没有任何]
    范围 1 - 63
    重启类型

    N(新开发银行 7.5.0)

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

  • OverloadLimit

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 0
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    当发送缓冲区中的未发送字节多于此数量时,连接将被视为过载。

    此参数可用于确定在连接被视为过载之前必须存在于发送缓冲区中的未发送数据量。有关更多信息,请参阅 第 21.4.3.13 节,“配置 NDB Cluster 发送缓冲区参数”第 21.6.15.44 节,“ndbinfo 传输器表”

  • PortNumber

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 [...]
    范围 0 - 64K
    删除 新开发银行 7.5.1
    重启类型

    S(NDB 7.5.0)

    设置 SHM 传输器要使用的端口。

  • PreSendChecksum

    版本(或更高版本) 新开发银行 7.6.6
    类型或单位 布尔值
    默认 错误的
    范围 真假
    添加 新开发银行 7.6.6
    重启类型

    N(新开发银行 7.5.0)

    如果此参数和 Checksum都启用,则执行发送前校验和检查,并检查节点之间的所有 SHM 信号是否有错误。如果 Checksum未同时启用,则无效。

  • SendBufferMemory

    版本(或更高版本) 新开发银行 7.6.6
    类型或单位 整数
    默认 2M
    范围 256K - 4294967039 (0xFFFFFEFF)
    添加 新开发银行 7.6.6
    重启类型

    N(新开发银行 7.5.0)

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

  • SendSignalId

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 布尔值
    默认 错误的
    范围 真假
    重启类型

    N(新开发银行 7.5.0)

    要追溯分布式消息的路径,必须为每条消息提供唯一标识符。将此参数设置为Y会导致这些消息 ID 也通过网络传输。默认情况下,此功能在生产构建中禁用,并在-debug构建中启用。

  • ShmKey

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 0
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    设置共享内存段时,使用整数表示的节点 ID 来唯一标识要用于通信的共享内存段。没有默认值。如果 UseShm启用,共享内存密钥由 自动计算 NDB

  • ShmSize

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 1M
    范围 64K - 4294967039 (0xFFFFFEFF)
    版本(或更高版本) 新开发银行 7.6.6
    类型或单位 字节
    默认 4M
    范围 64K - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

  • ShmSpinTime

    版本(或更高版本) 新开发银行 7.6.6
    类型或单位 整数
    默认 0
    范围 0 - 2000
    添加 新开发银行 7.6.6
    重启类型

    N(新开发银行 7.5.0)

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

  • SigNum

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 [...]
    范围 0 - 4294967039 (0xFFFFFEFF)
    弃用 新开发银行 7.6.6
    重启类型

    N(新开发银行 7.5.0)

    NDB 7.6 中不再使用此参数,在该版本中忽略它的任何设置。

    以下仅适用于 NDB 7.5(及更早版本):

    使用共享内存传输器时,当共享内存中有可用的新数据时,一个进程会向另一个进程发送操作系统信号。如果该信号与现有信号冲突,则可以使用此参数对其进行更改。由于不同的操作系统使用不同的信号编号,因此在使用 SHM 时可能会出现这种情况。

    默认值为 SigNum0;因此,必须设置它以避免在使用共享内存传输器时集群日志中出现错误。通常,此参数在文件的[shm default]部分中 设置为 10 config.ini

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

表 21.20 NDB Cluster 重启类型

象征 重启类型 描述
节点 可以使用滚动重启更新参数(请参阅 第 21.6.5 节,“执行 NDB Cluster 的滚动重启”
小号 系统 所有集群节点必须完全关闭,然后重新启动,以影响此参数的更改
最初的 必须使用该 --initial选项重新启动数据节点