25.4.3.12 NDB 集群共享内存连接
NDB 集群节点之间的通信通常使用 TCP/IP 处理。共享内存(SHM)传输器通过写入内存而非在套接字上进行信号传递而被区分出来。共享内存传输器(SHM)可以通过减少与运行 API 节点(通常是 SQL 节点)和数据节点在同一主机上的 TCP 连接相关的开销来提高性能,通常可以节省 20% 的开销。当一个 API 节点(通常是一个 SQL 节点)和一个数据节点在同一主机上运行时。您可以通过以下两种方式之一启用共享内存连接:
假设一个集群正在运行一个节点 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
以下两个条目除此之外,还需要考虑集群中的其他条目和参数设置。一个更完整的例子将在本节稍后展示。
在启动使用SHM连接的数据节点之前,必须确保每台主机上的操作系统都为共享内存段分配了足够的内存。有关此信息,请参考您操作平台的文档。在多个主机上运行数据节点和API节点的情况下,可以通过在配置文件中的`[ndbd default]`部分设置 `UseShm
` 来启用共享内存。这将在本节稍后展示的例子中显示。
虽然不是必需的,但可以通过在集群配置文件(config.ini
)中的`[shm default]`部分设置以下参数来对所有SHM连接进行调优:
-
ShmSize
:共享内存大小 -
ShmSpinTime
:睡眠前旋转的时间,单位为微秒 -
SendBufferMemory
:从该节点发送信号时信号缓冲区的大小,单位为字节。 -
SendSignalId
:指示每个通过传输器发送的信号中都包含一个信号ID。 -
校验和
:表示在每个信号通过传输器时都包含了校验和。 -
PreSendChecksum
:在发送信号之前进行校验和检查;必须同时启用校验和功能才能工作。
这个例子展示了一个简单的设置,其中在多个主机上定义了SHM连接,用于NDB集群中的3台计算机,按主机名列出,分别运行以下节点类型:
-
10.0.0.0
:管理服务器 -
10.0.0.1
:数据节点和SQL节点 -
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 连接关联,使用 NodeId1 和 NodeId2;所需的这些参数的值是连接传输器的两个节点的节点 ID。您还可以通过 HostName1 和 HostName2 来识别节点,但这些参数是可选的。
没有设置主机名的 API 节点使用 TCP 传输器与数据节点独立于它们启动的主机通信;配置文件中的 [tcp default] 部分中设置的参数和值适用于集群中的所有 TCP 传输器。
为了获得最佳性能,您可以为 SHM 传输器定义一个旋转时间(ShmSpinTime 参数);这影响 NDB 中数据节点接收线程和轮询所有者(接收线程或用户线程)。
-
Version (or later) NDB 8.4.0 Type or units 布尔值 Default true Range true, false Restart Type 节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)
这个参数是一个布尔类型(
Y
/N
),默认禁用。当它被启用时,将在将消息放入发送缓冲区之前计算所有消息的校验和。这项功能防止了在发送缓冲区等待期间消息被损坏,也作为传输过程中数据不被损坏的一种检查。
-
Version (or later) NDB 8.4.0 Type or units 无符号整数 Default 35 Range 0 - 200 Restart Type 节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)
确定组的接近程度;较小的值被解释为更靠近。默认值对于大多数情况来说足够了。
-
Version (or later) NDB 8.4.0 Type or units 名称或IP地址 Default [...] Range ... Restart Type 节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)
可以使用
HostName1
和HostName2
参数来指定两个节点之间特定网络接口的SHM连接。这些参数的值可以是主机名或IP地址。 -
Version (or later) NDB 8.4.0 Type or units 主机名或IP地址 Default [...] Range ... Restart Type 节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)
可以使用
HostName1
和HostName2
参数来指定两个节点之间特定网络接口的SHM连接。这些参数的值可以是主机名或IP地址。 -
Version (or later) NDB 8.4.0 Type or units 数字 Default [无] Range 1 - 255 Restart Type 节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)
要识别两个节点之间的连接,需要为每个节点提供相应的节点标识符,即
NodeId1
和NodeId2
。 -
Version (or later) NDB 8.4.0 Type or units 数字 Default [无] Range 1 - 255 Restart Type 节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)
要确定两个节点之间的连接,需要为每个节点提供其对应的节点标识符,即
节点ID1
和节点ID2
。 -
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信息传输器表”,获取更多信息。
-
Version (or later) NDB 8.4.0 Type or units 布尔值 Default false Range true, false Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.4.0)
如果同时启用了这个参数和
Checksum
,则在发送数据之前进行预发送校验,并检查所有SHM信号之间的错误。没有效果,如果Checksum
未启用。 -
Version (or later) NDB 8.4.0 Type or units 整数 Default 2M Range 256K - 4294967039(0xFFFFFEFF) Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.4.0)
共享内存缓冲区大小(以字节为单位),用于从该节点发送信号时使用的共享内存连接。
-
Version (or later) NDB 8.4.0 Type or units 布尔值 Default false Range true, false Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.4.0)
为了追踪分布式消息的路径,需要为每条消息提供一个唯一标识符。将此参数设置为
Y
会导致这些消息ID被传输到网络上。此功能默认禁用在生产版本中,并且在-debug
版本中启用。 -
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
自动计算共享内存键。 -
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。 -
Version (or later) NDB 8.4.0 Type or units 整数 Default 0 Range 0 - 2000 Restart Type 节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)
在接收到消息时,等待睡眠的时间,单位为微秒。
-
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 选项重启 |