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