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