NDB 集群节点之间的通信通常使用 TCP/IP 处理。共享内存(SHM)传输器的特点是通过写入内存而不是套接字来传输信号。共享内存传输器(SHM)可以通过消除 TCP 连接所需的高达 20% 的开销来提高性能,当 API 节点(通常是 SQL 节点)和数据节点在同一主机上运行时。
通过在集群配置文件中使用 [shm]
部分,每个部分包含 NodeId1
和 NodeId2
的设置。该方法将在本节后面详细描述。
[ndbd]
NodeId=1
HostName=10.0.0.1
UseShm=1
[mysqld]
NodeId=51
HostName=10.0.0.1
假设集群中有一个数据节点,节点 ID 为 1,一个 SQL 节点,节点 ID 为 51,在同一台主机上运行,IP 地址为 10.0.0.1。要启用这两个节点之间的 SHM 连接,只需要确保集群配置文件中包含以下条目:
这些条目是除了集群所需的其他条目和参数设置外的额外条目。完整的示例将在本节后面显示。
在启动使用 SHM 连接的数据节点之前,还需要确保每台主机的操作系统为共享内存段分配了足够的内存。请查看操作平台的文档以获取相关信息。在多台主机上运行数据节点和 API 节点的设置中,可以通过在配置文件的 [ndbd default]
部分中设置 UseShm
来启用所有主机上的共享内存。这将在本节后面显示。
-
虽然不是必需的,但可以通过在配置文件的
[shm default]
部分中设置以下参数来调整集群中的所有 SHM 连接: -
ShmSize
:共享内存大小 -
ShmSpinTime
:旋转时间(µs)在睡眠前 -
SendBufferMemory
:从该节点发送信号的缓冲区大小(字节) -
SendSignalId
:指示每个信号中都包含信号 ID -
Checksum
:指示每个信号中都包含校验和
以下示例显示了一个简单的设置,使用 SHM 连接在多台主机上定义,用于 NDB 集群:
-
10.0.0.0
:管理服务器 -
10.0.0.1
:数据节点和 SQL 节点 -
10.0.0.2
:数据节点和 SQL 节点
在这种情况下,每个数据节点使用 TCP 传输器与管理服务器和另一个数据节点通信;每个 SQL 节点使用共享内存传输器与本地数据节点通信,并使用 TCP 传输器与远程数据节点通信。基本配置文件的内容如下所示:
[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.3.0 Type or units 布尔值 Default true Range true, false Restart Type 节点重启:需要集群的 滚动重启。 (NDB 8.3.0)
该参数是一个布尔值(
Y
/N
)参数,默认情况下禁用。当启用时,对所有消息进行 checksum 计算,然后将其放入发送缓冲区。该功能防止消息在发送缓冲区中被损坏,也作为数据在传输过程中被损坏的检查。
-
Version (or later) NDB 8.3.0 Type or units 无符号整数 Default 35 Range 0 - 200 Restart Type 节点重启:需要集群的 滚动重启。 (NDB 8.3.0)
确定组近似度;较小的值被解释为更近。默认值对于大多数情况已经足够。
-
Version (or later) NDB 8.3.0 Type or units 名称或 IP 地址 Default [...] Range ... Restart Type 节点重启:需要集群的 滚动重启。 (NDB 8.3.0)
可以使用
HostName1
和HostName2
参数来指定特定的网络接口,以便在两个节点之间的给定 SHM 连接中使用。这些参数的值可以是主机名或 IP 地址。 -
Version (or later) NDB 8.3.0 Type or units 名称或 IP 地址 Default [...] Range ... Restart Type 节点重启:需要集群的 滚动重启。 (NDB 8.3.0)
可以使用
HostName1
和HostName2
参数来指定特定的网络接口,以便在两个节点之间的给定 SHM 连接中使用。这些参数的值可以是主机名或 IP 地址。 -
Version (or later) NDB 8.3.0 Type or units 数字 Default [none] Range 1 - 255 Restart Type 节点重启:需要集群的 滚动重启。 (NDB 8.3.0)
要标识两个节点之间的连接,需要为每个节点提供节点标识符,作为
NodeId1
和NodeId2
。 -
Version (or later) NDB 8.3.0 Type or units 数字 Default [none] Range 1 - 255 Restart Type 节点重启:需要集群的滚动重启。(NDB 8.3.0)
要标识两个节点之间的连接,需要为每个节点提供节点标识符,作为
NodeId1
和NodeId2
。 -
Version (or later) NDB 8.3.0 Type or units 数字 Default [none] Range 1 - 63 Restart Type 节点重启:需要集群的滚动重启。(NDB 8.3.0)
标识共享内存连接的服务器端。默认情况下,这是数据节点的节点 ID。
-
Version (or later) NDB 8.3.0 Type or units 字节 Default 0 Range 0 - 4294967039 (0xFFFFFEFF) Restart Type 节点重启:需要集群的滚动重启。(NDB 8.3.0)
当发送缓冲区中的未发送字节数超过这个值时,连接将被认为过载。请参阅第 25.4.3.14 节,“配置 NDB 集群发送缓冲参数”和第 25.6.17.65 节,“ndbinfo transporters 表”,以获取更多信息。
-
Version (or later) NDB 8.3.0 Type or units 布尔值 Default false Range true, false Restart Type 节点重启:需要集群的滚动重启。(NDB 8.3.0)
如果启用了这个参数和
Checksum
,则在发送之前执行 checksum 检查,并检查节点之间的所有 SHM 信号以检测错误。如果Checksum
未启用,则无效。 -
Version (or later) NDB 8.3.0 Type or units 整数 Default 2M Range 256K - 4294967039 (0xFFFFFEFF) Restart Type 节点重启:需要集群的滚动重启。(NDB 8.3.0)
使用共享内存连接从这个节点发送信号的共享内存缓冲区的大小(以字节为单位)。
-
Version (or later) NDB 8.3.0 Type or units 布尔值 Default false Range true, false Restart Type 节点重启:需要集群的滚动重启。(NDB 8.3.0)
要追踪分布式消息的路径,需要为每个消息提供唯一的标识符。将这个参数设置为
Y
可以使这些消息 ID 也被传输到网络上。这个功能在生产版本中默认禁用,在调试版本中默认启用。 -
Version (or later) NDB 8.3.0 Type or units 无符号整数 Default 0 Range 0 - 4294967039 (0xFFFFFEFF) Restart Type 节点重启:需要集群的滚动重启。(NDB 8.3.0)
当设置共享内存段时,使用整数表示的节点 ID 来唯一标识共享内存段。没有默认值。如果启用了
UseShm
,则共享内存键将由NDB
自动计算。 -
Version (or later) NDB 8.3.0 Type or units 字节 Default 4M Range 64K - 4294967039 (0xFFFFFEFF) Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.3.0)
每个 SHM 连接都有一个共享内存段,其中节点之间的消息由发送方放置并由读取方读取。该段的大小由
ShmSize
定义。默认值为 4MB。 -
Version (or later) NDB 8.3.0 Type or units 整数 Default 0 Range 0 - 2000 Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.3.0)
在接收时,等待睡眠前的时间,以微秒为单位。
-
Version (or later) NDB 8.3.0 Type or units 无符号整数 Default [...] Range 0 - 4294967039 (0xFFFFFEFF) Deprecated 是(在 NDB 7.6 中) Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.3.0)
该参数以前用于覆盖操作系统信号号;在 NDB 8.3 中,它不再使用,并且任何设置都将被忽略。
重启类型。 本节中的参数描述中使用的重启类型信息如下表所示:
表 25.21 NDB 集群重启类型
Symbol | Restart Type | Description |
---|---|---|
N | 节点 | 该参数可以使用滚动重启(见第 25.6.5 节,“执行 NDB 集群的滚动重启”) |
S | 系统 | 所有集群节点必须完全关闭,然后重新启动,以便更改该参数 |
I | 初始 | 数据节点必须使用--initial 选项重新启动 |