21.3.3.12 NDB 群集共享内存连接
通常使用 TCP/IP 处理 NDB 群集节点之间的通信。共享内存(SHM)传输器的特点是,signal 是通过写在内存中而不是在套接字上来传输的。当在同一主机上同时运行 API 节点(通常是 SQL 节点)和数据节点时,共享内存传输器(SHM)可以通过减少 TCP 连接所需的开销的 20%来提高性能。您可以通过以下两种方式之一启用共享内存连接:
-
通过将UseShm数据节点配置参数设置为
1
,并将数据节点的HostName和 API 节点的HostName设置为相同的值。 -
通过使用群集配置文件中的
[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
Important
刚刚显示的两个条目是集群所需的任何其他条目和参数设置的补充。本节稍后将显示一个更完整的示例。
在启动使用 SHM 连接的数据节点之前,还必须确保承载该数据节点的每台计算机上的 os 都有足够的内存分配给共享内存段。有关此信息,请参见您的操作平台的文档。在多个主机分别运行一个数据节点和一个 API 节点的设置中,可以通过在配置文件的[ndbd default]
部分中设置UseShm
来启用所有此类主机上的共享内存。这将在本节后面的示例中显示。
尽管不是严格要求,但是可以通过在集群配置(config.ini
)文件的[shm default]
部分中设置以下一个或多个参数来完成集群中所有 SHM 连接的调整:
-
ShmSize:共享内存大小
-
ShmSpinTime:睡眠前以微秒为单位旋转的时间
-
SendBufferMemory:从该节点发送的 signal 的缓冲区大小,以字节为单位。
-
SendSignalId:table 示通过传输器发送的每个 signal 中都包含一个 signalID。
-
Checksum:table 示通过传输器发送的每个 signal 中都包含一个校验和。
-
PreSendChecksum:在发送 signal 之前检查校验和;校验和也必须启用才能起作用
此示例显示了一个简单的设置,其中在 NDB 群集中使用在主机上列出的 3 种计算机在 NDB 群集中定义了多个主机上的 SHM 连接,该主机托管所示的节点类型:
-
10.0.0.0
:Management 服务器 -
10.0.0.1
:数据节点和 SQL 节点 -
10.0.0.2
:数据节点和 SQL 节点
在这种情况下,每个数据节点都使用 TCP 传输器与 Management 服务器和另一个数据节点进行通信。每个 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]
节中逐个连接地覆盖它们。必须使用NodeId1和NodeId2将每个此类节与给定的 SHM 连接相关联;这些参数所需的值是由传输器连接的两个节点的节点 ID。您也可以使用HostName1和HostName2通过主机名标识节点,但是这些参数不是必需的。
未设置主机名的 API 节点使用 TCP 传输器与独立于其启动主机的数据节点进行通信。配置文件的[tcp default]
部分中设置的参数和值适用于群集中的所有 TCP 传输器。
为了获得最佳性能,您可以定义 SHM 传输器的旋转时间(ShmSpinTime参数)。这会影响NDB
中的数据节点接收者线程和轮询所有者(接收线程或用户线程)。
table21.221 下 table 提供了 Checksum 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | boolean |
Default | true |
Range | true, false |
Restart Type | N |
此参数是默认情况下禁用的布尔值(Y
/N
)。启用后,将计算所有消息的校验和,然后将其放入发送缓冲区。
此功能可防止在发送缓冲区中 await 消息时损坏消息。它还可以检查传输过程中数据是否损坏。
table21.222 此 table 提供了组共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 35 |
Range | 0 - 200 |
Restart Type | N |
确定组的接近度;较小的值被解释为更接近。默认值足以满足大多数条件。
table21.223 该 table 提供了 HostName1 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | 名称或 IP 地址 |
Default | [none] |
Range | ... |
Restart Type | N |
HostName1
和HostName2参数可用于指定要用于两个节点之间的给定 SHM 连接的特定网络接口。这些参数使用的值可以是主机名或 IP 地址。
table21.224 此 table 提供了 HostName1 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | 名称或 IP 地址 |
Default | [none] |
Range | ... |
Restart Type | N |
HostName1和HostName2
参数可用于指定用于两个节点之间的给定 SHM 连接的特定网络接口。这些参数使用的值可以是主机名或 IP 地址。
table21.225 该 table 提供了 NodeId1 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | [none] |
Range | 1 - 255 |
Restart Type | N |
为了标识两个节点之间的连接,有必要为每个节点提供节点标识符,如NodeId1
和NodeId2。
table21.226 此 table 提供了 NodeId2 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | [none] |
Range | 1 - 255 |
Restart Type | N |
为了标识两个节点之间的连接,有必要为每个节点提供节点标识符,如NodeId1和NodeId2
。
table21.227 此 table 提供了 NodeIdServer 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | [none] |
Range | 1 - 63 |
Restart Type | N |
标识共享内存连接的服务器端。默认情况下,这是数据节点的节点 ID。
table21.228 此 table 提供了 OverloadLimit 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 0 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
如果发送缓冲区中的未发送字节数超过此数目,则连接被视为过载。
此参数可用于确定在认为连接超载之前必须存在于发送缓冲区中的未发送数据量。有关更多信息,请参见第 21.3.3.13 节,“配置 NDB 群集发送缓冲区参数”和第 21.5.14.44 节,“ ndbinfo 传输器 table”。
table21.229 此 table 提供了 PreSendChecksum 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.6 |
类型或单位 | boolean |
Default | false |
Range | true, false |
Restart Type | S |
Added | NDB 7.6.6 |
如果同时启用了此参数和Checksum,请执行预发送校验和检查,并检查节点之间的所有 SHMsignal 是否存在错误。如果未同时启用Checksum
,则无效。
table21.230 下 table 提供了 SendBufferMemory 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.6 |
类型或单位 | integer |
Default | 2M |
Range | 256 K-4294967039(0xFFFFFEFF) |
Restart Type | N |
Added | NDB 7.6.6 |
使用共享内存连接从该节点发送的 signal 的共享内存缓冲区的大小(以字节为单位)。
table21.231 该 table 提供了 SendSignalId 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | boolean |
Default | false |
Range | true, false |
Restart Type | N |
要回溯分布式消息的路径,必须为每个消息提供唯一的标识符。将此参数设置为Y
也会导致这些消息 ID 也通过网络传输。默认情况下,此功能在生产版本中处于禁用状态,而在-debug
个版本中处于启用状态。
table21.232 此 table 提供了 ShmKey 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 0 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
设置共享内存段时,节点 ID(以整数 table 示)用于唯一标识要用于通信的共享内存段。没有默认值。如果启用了UseShm,则NDB
将自动计算共享内存密钥。
table21.233 下 table 提供了 ShmSize 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 1M |
Range | 64 K-4294967039(0xFFFFFEFF) |
Restart Type | N |
版本(或更高版本) | NDB 7.6.6 |
类型或单位 | bytes |
Default | 4M |
Range | 64 K-4294967039(0xFFFFFEFF) |
Restart Type | N |
每个 SHM 连接都有一个共享内存段,其中节点之间的消息由发送方放置并由阅读器读取。该段的大小由ShmSize定义。 NDB 7.6.6 和更高版本中的默认值为 4MB。
table21.234 此 table 提供了 ShmSpinTime 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.6 |
类型或单位 | integer |
Default | 0 |
Range | 0 - 2000 |
Restart Type | S |
Added | NDB 7.6.6 |
接收时,入睡前 await 的时间(以微秒为单位)。
table21.235 该 table 提供了 Signum 共享内存配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | [none] |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
Deprecated | NDB 7.6.6 |
从 NDB 7.6.6 开始,不再使用此参数,并且如果在该版本和更高版本中进行了设置,则将被忽略。
以下仅适用于 NDB 7.6.5 和更早版本:
使用共享内存传输器时,如果共享内存中有可用的新数据,则一个进程将 ossignal 发送到另一个进程。如果该 signal 与现有 signal 冲突,则可以使用此参数进行更改。由于不同的 os 使用不同的 signal 编号,因此在使用 SHM 时这是一种可能。
SigNum的默认值为 0;默认值为 0.因此,必须进行设置,以避免在使用共享内存传输器时群集日志中出现错误。通常,此参数在config.ini
文件的[shm default]
部分中设置为 10.
重新启动类型. 下 table 显示了本节中的参数描述所使用的重新启动类型的信息:
table21.236 NDB 群集重新启动类型
Symbol | Restart Type | Description |
---|---|---|
N | Node | 可以使用滚动重启来更新参数(请参见第 21.5.5 节“执行 NDB 群集的滚动重启”) |
S | System | 必须完全关闭所有群集节点,然后重新启动,以更改此参数 |
I | Initial | 必须使用--initial选项重新启动数据节点 |