NDB 集群节点之间的通信通常使用 TCP/IP 处理。共享内存 (SHM) 传输器的特点是信号是通过在内存中写入而不是在套接字上传输的。当在同一主机上同时运行 API 节点(通常是 SQL 节点)和数据节点时,共享内存传输器 (SHM) 可以通过消除 TCP 连接所需高达 20% 的开销来提高性能。您可以通过以下两种方法之一启用共享内存连接
假设一个集群正在运行一个节点 ID 为 1 的数据节点和一个节点 ID 为 51 的 SQL 节点,它们位于同一台主机 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。Checksum
:表示通过传输器发送的每个信号中都包含校验和。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]
部分中基于每个连接覆盖这些参数。每个此类部分必须使用 NodeId1
和 NodeId2
与给定的 SHM 连接相关联;这些参数所需的值是由传输器连接的两个节点的节点 ID。您还可以使用 HostName1
和 HostName2
通过主机名标识节点,但这些参数不是必需的。
未设置主机名的 API 节点使用 TCP 传输器与数据节点通信,而与它们启动所在的主机无关;配置文件的 [tcp default]
部分中设置的参数和值适用于集群中的所有 TCP 传输器。
为了获得最佳性能,您可以为 SHM 传输器定义旋转时间(ShmSpinTime
参数);这会影响数据节点接收器线程和 NDB
中的轮询所有者(接收器线程或用户线程)。
-
版本(或更高版本) NDB 类型或单位 布尔值 默认值 true 范围 true, false 重启类型 节点重启:需要对集群进行滚动重启。
此参数是一个布尔值(
Y
/N
)参数,默认情况下禁用。启用后,将在将所有消息放入发送缓冲区之前计算其校验和。此功能可防止消息在发送缓冲区中等待时损坏。它还可以检查数据在传输过程中是否损坏。
-
版本(或更高版本) NDB 类型或单位 无符号整数 默认值 35 范围 0 - 200 重启类型 节点重启:需要对集群进行滚动重启。
确定组邻近度;较小的值表示更接近。默认值足以满足大多数情况。
-
版本(或更高版本) NDB 类型或单位 名称或 IP 地址 默认值 [...] 范围 ... 重启类型 节点重启:需要对集群进行滚动重启。
HostName1
和HostName2
参数可用于指定要用于两个节点之间给定 SHM 连接的特定网络接口。用于这些参数的值可以是主机名或 IP 地址。 -
版本(或更高版本) NDB 类型或单位 名称或 IP 地址 默认值 [...] 范围 ... 重启类型 节点重启:需要对集群进行滚动重启。
HostName1
和HostName2
参数可用于指定要用于两个节点之间给定 SHM 连接的特定网络接口。用于这些参数的值可以是主机名或 IP 地址。 -
版本(或更高版本) NDB 类型或单位 数字 默认值 [无] 范围 1 - 255 重启类型 节点重启:需要对集群进行滚动重启。
要标识两个节点之间的连接,需要为每个节点提供节点标识符,如
NodeId1
和NodeId2
。 -
版本(或更高版本) NDB 类型或单位 数字 默认值 [无] 范围 1 - 255 重启类型 节点重启:需要对集群进行滚动重启。
要标识两个节点之间的连接,需要为每个节点提供节点标识符,如
NodeId1
和NodeId2
。 -
版本(或更高版本) NDB 类型或单位 数字 默认值 [无] 范围 1 - 63 重启类型 节点重启:需要对集群进行滚动重启。
标识共享内存连接的服务器端。默认情况下,这是数据节点的节点 ID。
-
版本(或更高版本) NDB 类型或单位 字节 默认值 0 范围 0 - 4294967039 (0xFFFFFEFF) 重启类型 节点重启:需要对集群进行滚动重启。
当发送缓冲区中有超过此数量的未发送字节时,该连接被视为过载。有关更多信息,请参阅第 25.4.3.14 节“配置 NDB 集群发送缓冲区参数”和第 25.6.17.66 节“ndbinfo transporters 表”。
-
版本(或更高版本) NDB 类型或单位 布尔值 默认值 false 范围 true, false 重启类型 节点重启:需要对集群进行滚动重启。
如果此参数和
Checksum
都启用,则执行发送前校验和检查,并检查节点之间所有 SHM 信号是否存在错误。如果未同时启用Checksum
,则此参数无效。 -
版本(或更高版本) NDB 类型或单位 整数 默认值 2M 范围 256K - 4294967039 (0xFFFFFEFF) 重启类型 节点重启:需要对集群进行滚动重启。
使用共享内存连接从此节点发送的信号的共享内存缓冲区的大小(以字节为单位)。
-
版本(或更高版本) NDB 类型或单位 布尔值 默认值 false 范围 true, false 重启类型 节点重启:需要对集群进行滚动重启。
要回溯分布式消息的路径,需要为每条消息提供唯一标识符。将此参数设置为
Y
会导致这些消息 ID 也在网络上传输。此功能在生产版本中默认禁用,在-debug
版本中启用。 -
版本(或更高版本) NDB 类型或单位 无符号整数 默认值 0 范围 0 - 4294967039 (0xFFFFFEFF) 重启类型 节点重启:需要对集群进行滚动重启。
设置共享内存段时,使用表示为整数的节点 ID 来唯一标识用于通信的共享内存段。没有默认值。如果启用了
UseShm
,则NDB
会自动计算共享内存密钥。 -
版本(或更高版本) NDB 类型或单位 字节 默认值 4M 范围 64K - 4294967039 (0xFFFFFEFF) 重启类型 节点重启:需要对集群进行滚动重启。
每个 SHM 连接都有一个共享内存段,发送方将节点之间的消息放入其中,读取方从中读取消息。此段的大小由
ShmSize
定义。默认值为 4MB。 -
版本(或更高版本) NDB 类型或单位 整数 默认值 0 范围 0 - 2000 重启类型 节点重启:需要对集群进行滚动重启。
接收时,休眠前的等待时间(以微秒为单位)。
-
版本(或更高版本) NDB 类型或单位 无符号整数 默认值 [...] 范围 0 - 4294967039 (0xFFFFFEFF) 已弃用 是(在 NDB 7.6 中) 重启类型 节点重启:需要对集群进行滚动重启。
此参数以前用于覆盖操作系统信号号;在 NDB 9.0 中,它不再使用,并且将忽略对它的任何设置。
重启类型。下表显示了有关本节中参数说明所使用的重启类型的信息
表 25.21 NDB 集群重启类型
符号 | 重启类型 | 说明 |
---|---|---|
N | 节点 | 可以使用滚动重启更新参数(请参阅第 25.6.5 节“执行 NDB 集群的滚动重启”) |
S | 系统 | 必须完全关闭所有集群节点,然后重新启动,才能使此参数的更改生效 |
I | 初始 | 必须使用 --initial 选项重新启动数据节点 |