我正在构建一个只有 3 台机器的非常小的 NDB 集群。这意味着机器 1 将同时作为 MGM 服务器、MySQL 服务器和 NDB 数据节点。数据库只有 7 GB,所以我计划至少复制每个节点一次。现在,由于查询可能最终使用缓存在机器一上 NDB 节点中的数据,即使它不是该数据的主要来源节点,访问也会快得多(原因很明显)。
NDB 集群是这样工作的吗?我看到的每个示例都至少有 5 台机器。该手册似乎没有提到如何处理像这样的节点差异。
我正在构建一个只有 3 台机器的非常小的 NDB 集群。这意味着机器 1 将同时作为 MGM 服务器、MySQL 服务器和 NDB 数据节点。数据库只有 7 GB,所以我计划至少复制每个节点一次。现在,由于查询可能最终使用缓存在机器一上 NDB 节点中的数据,即使它不是该数据的主要来源节点,访问也会快得多(原因很明显)。
NDB 集群是这样工作的吗?我看到的每个示例都至少有 5 台机器。该手册似乎没有提到如何处理像这样的节点差异。
这里有几个问题:
可用性 / NoOfReplicas
当跨 2 个或更多数据节点进程复制数据时,MySQL Cluster 可以提供高可用性。这要求将 NoOfReplicas 配置参数设置为 2 或更大。NoOfReplicas=1 时,每一行只存储在一个数据节点中,数据节点故障意味着部分数据不可用,因此整个数据库不可用。
机器/主机数量
对于 NoOfReplicas=2 的 HA 配置,应该至少有 3 个独立的主机。每个数据节点进程都需要 1,它具有所有数据的副本。当两个数据节点进程之间的通信失败时,需要第三个充当“仲裁者”。这确保只有一个数据节点继续接受写入事务,并避免数据分歧(脑裂)。只有两台主机,集群只能对其中一台主机的故障有弹性,如果另一台主机发生故障,整个集群都会失败。仲裁角色非常轻量级,因此这第三台机器也可以用于几乎任何其他任务。
数据局部性
在 NoOfReplicas=2 的 2 节点配置中,每个数据节点进程存储所有数据。但是,这并不意味着只使用一个数据节点进程来读取/写入数据。两个进程都涉及写入(因为它们必须维护副本),通常,任何一个进程都可能涉及读取。
正在考虑在 2 节点配置中改进读取局部性的一些工作,但没有什么是具体的。
这意味着当 MySQLD(或另一个 NdbApi 客户端)与两个数据节点之一位于同一位置时,仍然会与另一个数据节点进行大量通信。