【问题标题】:Can you use weights to avoid split brain in a quorum?您可以使用权重来避免仲裁中的脑裂吗?
【发布时间】:2018-02-04 15:43:38
【问题描述】:

我们正在考虑部署一个集群数据库,我们希望在系统中增加和减少节点数量,一些系统有一个、两个或三个节点。 Percona Clustered DB 具有加权仲裁机制。我认为可以选择权重来破坏对称性,从而始终避免裂脑。但是,我找不到任何文献说这让我怀疑自己。

这就是想法。为每个节点分配以下权重之一:127 + 0、127 + 1、127 + 2、127 + 4、127 + 8、127 + 16、.. 等等。

鉴于集群中节点的两个不相交子集 ab,我认为必须维护的两个要求是:

1) 如果一个子集 a 比另一个 b 有更多的节点,那么它的权重之和 w(a) , 总是大于其他集合的权重之和..

|a| > |b| --> w(a) > w(b)

2) 对称性破坏.. 给定任何两个子集,那么权重将不相等。这是避免偶数节点裂脑的要求。

|a| = |b| --> w(a) != w(b)

这种方法有什么问题吗?如果有,它们是什么?

更多问题描述...

  1. 理想情况下,我们应该为多个节点配置提供相同的解决方案以节省测试时间。
  2. 节点权重不能动态更改(它们可以.. 但这并不完全安全.. Percona 集群的限制以及可能的 quorum 算法?)。
  3. Percona 将在完全关闭节点后重新计算总节点权重。

【问题讨论】:

  • 您的子集数量受限于用于子集的数量的大小。本质上,您为每个节点分配一位。这是否是限制取决于您的配置。
  • 是的...但实际上集群中的节点数量不会很大。随着集群规模的增长,集群相互通信以保持同步的开销也会增加。因此集群大小在其他方面受到限制(取决于事物的设置方式)。我也可以选择比 127 更大的初始权重。所以在这种情况下,大小的限制不是问题

标签: algorithm cluster-computing high-availability quorum


【解决方案1】:

这听起来就像您描述的那样,但对于您的描述来说似乎不必要地复杂。据我从网络搜索 (https://www.percona.com/blog/2015/06/12/percona-xtradb-cluster-quorum-availability-cluster/) 得知,当系统正常运行时,它知道每个节点上的权重总和是多少。在失去连接后,连接的子集只有在它仍然具有超过 50% 的权重时才允许写入。在潜在的脑裂情况下,分裂的双方不可能相信他们都拥有超过 50% 的权重,因为那样的话,每一半的权重总和必须超过所有权重的总和,这是不可能的。

只有当分裂正好在中间时,你才能避免双方都读 - 但这不是裂脑的通常含义。 https://en.wikipedia.org/wiki/Split-brain_(computing)。如果您的目标是最大化某些剩余部分在失败后仍然能够写入的概率,或者最大化失败后写入客户端的可用性,那么我的猜测是您最好的猜测是开始考虑可能存在哪些失败,给定您的物理网络拓扑,并将其纳入您的计算中。每种可能的不可用性模式似乎不太可能具有相同的可能性。

如果您有奇数个节点并为每个节点赋予 1 的权重,则没有分割将在每一侧留下相等的权重,因为总权重必须是奇数。如果您有偶数个节点,则给一个节点的权重为 2,其他节点的权重为 1。然后你的总重量又是奇数,所以没有分裂可以给每一半相同的重量。当然,如果您在拆分中丢失了一个节点,那么其余节点可以平均拆分,例如一个 | B,C,D| E,F,G 但我不确定您是否希望 E,F,G 在这种情况下继续,因为如果拆分只是双向的 A,B,C,D | E,F,G 您可能希望 A,B,C,D 继续,而 E,F,G 无法判断拆分是否为 A | B,C,D | E,F,G 或 A,B,C,D | E,F,G

【讨论】:

  • 你当然有道理。但是,我们正在处理的事情会部署在多个具有不同拓扑结构的地方(可能是 1、2 或 3 个节点,但也可能是 5 或 7 个节点)。我正在尝试对所有拓扑使用相同的架构和一种解决方案,以减少我们必须单独测试的配置数量。例如。我们可以从 1 个节点开始添加 2 个节点,然后出现故障返回 2 个节点,或者网络故障并归结为三批一个。
  • Percona 会在您让节点彻底关闭时重新计算仲裁权重。这意味着在热插拔期间会发生 3 到 2 的情况。在运行时更改节点权重也有点不安全,确实应该通过重新启动来完成。所以理想情况下,我想在启动时选择权重。因此,我正在寻找适用于三个、两个或一个节点的通用解决方案(例如,三节点集群转变成一个主从)。
  • 我已编辑问题以将这些限制添加到问题中。
  • 我想说的是,奇数个节点的相同权重解决方案在一个节点完全关闭后会出现裂脑。
  • 如果您希望保持每个节点的权重固定但能够从不同的节点子集开始,您的解决方案似乎确实比更简单的解决方案更有优势。跨度>
猜你喜欢
  • 2012-08-21
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多