Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

25.4.3.12 NDB 集群共享内存连接

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

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

  • 使用 [shm] 部分在集群配置文件中,每个部分包含对 NodeId1NodeId2 的设置。这种方法在本节稍后将得到更详细的描述。

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

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

[mysqld]
NodeId=51
HostName=10.0.0.1
Important

以下两个条目除此之外,还需要考虑集群中的其他条目和参数设置。一个更完整的例子将在本节稍后展示。

在启动使用SHM连接的数据节点之前,必须确保每台主机上的操作系统都为共享内存段分配了足够的内存。有关此信息,请参考您操作平台的文档。在多个主机上运行数据节点和API节点的情况下,可以通过在配置文件中的`[ndbd default]`部分设置 `UseShm` 来启用共享内存。这将在本节稍后展示的例子中显示。

虽然不是必需的,但可以通过在集群配置文件(config.ini)中的`[shm default]`部分设置以下参数来对所有SHM连接进行调优:

  • ShmSize:共享内存大小

  • ShmSpinTime:睡眠前旋转的时间,单位为微秒

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

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

  • 校验和:表示在每个信号通过传输器时都包含了校验和。

  • PreSendChecksum:在发送信号之前进行校验和检查;必须同时启用校验和功能才能工作。

这个例子展示了一个简单的设置,其中在多个主机上定义了SHM连接,用于NDB集群中的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。您还可以通过 HostName1HostName2 来识别节点,但这些参数是可选的。

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

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

  • Checksum

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

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

    这个参数是一个布尔类型(Y/N),默认禁用。当它被启用时,将在将消息放入发送缓冲区之前计算所有消息的校验和。

    这项功能防止了在发送缓冲区等待期间消息被损坏,也作为传输过程中数据不被损坏的一种检查。

  • Group

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

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

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

  • HostName1

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

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

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

  • HostName2

    Version (or later) NDB 8.4.0
    Type or units 主机名或IP地址
    Default [...]
    Range ...
    Restart Type

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

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

  • NodeId1

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

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

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

  • 节点ID2

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

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

    要确定两个节点之间的连接,需要为每个节点提供其对应的节点标识符,即节点ID1节点ID2

  • 节点ID服务器

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

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

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

  • 超载限制

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

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

    当发送缓冲区中的未发送字节数超过这个数量时,连接被认为是过载。请参阅第25.4.3.14节,“配置NDB集群发送缓冲区参数”,以及第25.6.17.66节,“NDB信息传输器表”,获取更多信息。

  • PreSendChecksum

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

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

    如果同时启用了这个参数和Checksum,则在发送数据之前进行预发送校验,并检查所有SHM信号之间的错误。没有效果,如果Checksum未启用。

  • SendBufferMemory

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

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

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

  • SendSignalId

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

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

    为了追踪分布式消息的路径,需要为每条消息提供一个唯一标识符。将此参数设置为 Y 会导致这些消息ID被传输到网络上。此功能默认禁用在生产版本中,并且在 -debug 版本中启用。

  • ShmKey

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

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

    在设置共享内存段时,节点ID(以整数形式表示)用于唯一标识要用于通信的共享内存段。没有默认值。如果 UseShm 启用,则由 NDB 自动计算共享内存键。

  • ShmSize

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

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

    每个SHM连接都有一个共享内存段,用于将消息从节点发送到另一个节点。在读取者那里,这些消息被放置。这个段的大小由ShmSize定义。默认值为4MB。

  • ShmSpinTime

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

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

    在接收到消息时,等待睡眠的时间,单位为微秒。

  • SigNum

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

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

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

重启类型。 重启参数描述中使用的重启类型信息,在以下表格中显示:

表25.21 NDB 集群重启类型

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