2. 管理节点
为了让数据节点或者 API 节点上线或者重启,需要从管理节点获取配置。
这意味着我们应该至少有两个管理节点。
说明
以上没有考虑应用/SQL节点。
它们可以在三台机器中的任何一台上运行。虽然 3 台服务器可以防止单点故障,但建议至少使用 4 台服务器,这样我们可以将每个管理节点放在不同的服务器上。
对于与数据节点位于同一主机上的ndb_mgmd节点,设置ArbitrationRank = 0很重要。
原因是这绝不能成为仲裁员(至少在另一个 ndb_mgmd 节点在线时)。
在上面的例子中,如果机器 1 崩溃(例如硬件故障或者断电)并且机器 1 上的 ndb_mgmd 是仲裁者,那么整个集群将离线,因为机器 2 上的数据节点将无法赢得仲裁.
4. 仲裁员
MySQL Cluster 使用仲裁器来避免脑裂场景,例如在网络分区的情况下。
默认情况下,管理节点是仲裁者,但 mysqld 节点也可以是仲裁者。
虽然需要两个仲裁器以避免将仲裁器作为单点故障,但在至少一个数据节点出现故障或者存在网络分区之前不需要仲裁器。
因此,考虑到这一点,可以说只有一名仲裁员并不是单点故障。
3. API 节点
API 节点,例如 mysqld,用于允许客户端读取和更新 NDB 表。
为确保在一个 API 节点不可用时继续服务,我们必须至少拥有两个 API 节点。
由于 API 节点可以从相同的服务器运行,因此此要求对所需的服务器数量没有限制。
在这篇文章中,我们将讨论 MySQL 集群设置中的所有服务都没有单点故障的最低要求。
要消除所有单点故障,对集群配置有以下要求:
- 数据必须有两份
- 允许API节点和数据节点上线,必须至少有两个管理节点
- 必须至少有两个 API 节点
- 如果其中一个数据节点离线,则必须有仲裁员在场
以下各节将讨论这些要求中的每一个。
总结
要满足上述要求,我们至少需要三台运行以下服务的服务器:
- 机器1:ndbd(节点组=1),ndb_mgmd(ArbitrationRank=0)
- 机器 2:ndbd(节点组=1)
- 机器 3:ndb_mgmd(ArbitrationRank=1)
建议的设置将包括以下条件的冗余:
- 单个节点组在单独的机器上拆分为两个 ndbd 进程,为数据节点提供单点故障保护。
- ndb_mgmd 不同机器上的两个实例为管理节点提供单点故障保护。
唯一存在“单点故障”的是仲裁。
然而,正如所讨论的,它要求机器 3 上的数据节点和管理节点之一在成为问题之前变得不可用,也可以说这也不是单点故障。
1. 数据两份
这要求我们至少有两个数据节点(ndbd 或者 ndbmtd)并且它们必须在不同的服务器上运行。
我们还需要在 Cluster 配置文件中将副本数设置为 2,例如:
[ndbd default] NoOfReplicas = 2