多个 SQL 节点。 以下是与将多个 MySQL 服务器用作 NDB 集群 SQL 节点相关的问题,这些问题特定于 NDBCLUSTER
存储引擎
存储程序未分发。 使用
NDB
存储引擎的表支持存储过程、存储函数、触发器和计划事件,但这些程序 不会 在充当集群 SQL 节点的 MySQL 服务器之间自动传播,必须在每个 SQL 节点上单独重新创建。请参阅 NDB 集群中的存储例程和触发器。没有分布式表锁。
LOCK TABLES
语句或GET_LOCK()
调用仅适用于发出锁的 SQL 节点;集群中的任何其他 SQL 节点都 “看不到” 此锁。对于任何将表锁定作为其操作一部分的语句发出的锁,这都是正确的。(有关示例,请参阅下一项。)可以在 API 应用程序中实现
NDBCLUSTER
中的表锁,并确保所有应用程序都首先将LockMode
设置为LM_Read
或LM_Exclusive
。有关如何执行此操作的更多信息,请参阅 NDB 集群 API 指南 中对NdbOperation::getLockHandle()
的描述。ALTER TABLE 操作。 在运行多个 MySQL 服务器(SQL 节点)时,
ALTER TABLE
不会完全锁定。(如上一项所述,NDB 集群不支持分布式表锁。)
如果任何管理服务器在同一主机上运行,则必须在连接字符串中为节点指定显式 ID,因为节点 ID 的自动分配在同一主机上的多个管理服务器之间不起作用。如果每个管理服务器都驻留在不同的主机上,则不需要这样做。
当管理服务器启动时,它首先检查同一个 NDB 集群中是否有任何其他管理服务器,并在成功连接到其他管理服务器后使用其配置数据。这意味着管理服务器
--reload
和--initial
启动选项将被忽略,除非管理服务器是唯一正在运行的服务器。这也意味着,在对具有多个管理节点的 NDB 集群执行滚动重启时,管理服务器仅当(且仅当)它是此 NDB 集群中唯一正在运行的管理服务器时才会读取其自己的配置文件。有关更多信息,请参阅 “第 25.6.5 节 执行 NDB 集群的滚动重启”。
多个网络地址。 不支持每个数据节点多个网络地址。使用这些地址可能会导致问题:如果数据节点发生故障,SQL 节点会等待确认数据节点已关闭,但永远不会收到确认,因为到该数据节点的另一路由保持打开状态。这实际上会使集群无法运行。
可以为单个数据节点使用多个网络硬件 接口(例如以太网卡),但这些接口必须绑定到同一个地址。这也意味着在 config.ini
文件中,每个连接不能使用多个 [tcp]
部分。有关更多信息,请参阅 “第 25.4.3.10 节 NDB 集群 TCP/IP 连接”。