MySQL NDB群集是否考虑节点距离?如果它们更近,它会使用重复吗?

时间:2012-05-01 22:45:21

标签: mysql replication mysql-management

我正在构建一个只有3台机器的非常小的NDB集群。这意味着机器1将同时用作MGM服务器,MySQL服务器和NDB数据节点。数据库只有7 GB,所以我计划至少复制一次每个节点。现在,由于查询可能最终使用在机器1上的NDB节点中缓存的数据,即使它不是该数据的主要源节点,访问也会快得多(出于显而易见的原因)。 p>

NDB群集是否像这样工作?我看到的每个例子至少有5台机器。手册似乎没有提到如何处理像这样的节点差异。

1 个答案:

答案 0 :(得分:2)

这里有几个问题:

可用性/ NoOfReplicas

当跨两个或多个数据节点进程复制数据时,MySQL Cluster可以提供高可用性。这要求NoOfReplicas配置参数设置为2或更大。 NoOfReplicas = 1时,每行只存储在一个数据节点中,数据节点故障意味着某些数据不可用,因此数据库整体不可用。

机器/主机数量

对于NoOfReplicas = 2的HA配置,应至少有3个单独的主机。每个数据节点进程都需要1,其中包含所有数据的副本。当2个数据节点进程之间的通信失败时,需要第三个充当“仲裁者”。这确保了只有一个数据节点继续接受写入事务,并避免数据分歧(裂脑)。如果只有两台主机,则群集只能恢复其中一台主机的故障,如果另一台主机发生故障,则整个群集将失败。仲裁角色非常轻量级,因此第三台机器几乎可以用于任何其他任务。

数据位置

在NoOfReplicas = 2的2节点配置中,每个数据节点进程都存储所有数据。但是,这并不意味着只使用一个数据节点进程来读/写数据。这两个过程都涉及写入(因为它们必须维护副本),并且通常,任何一个过程都可能涉及读取。

正在考虑改进双节点配置中的读取局部性的一些工作,但没有什么是具体的。

这意味着当MySQLD(或另一个NdbApi客户端)与两个数据节点之一共存时,仍然会与其他数据节点进行大量通信。