【问题标题】:How to avoid loss of internal state of a master during fail-over to new master during a network partition如何避免在网络分区期间故障转移到新主服务器期间丢失主服务器的内部状态
【发布时间】:2018-11-01 10:26:10
【问题描述】:

我试图针对多个备份节点系统实现一个简单的单个主节点,以了解分布式和容错架构。

目前我的系统是这样的:

  1. N 个不同的节点,每个节点都相同。 1 个主节点运行一个简单的网络服务器。

  2. 所有节点都使用简单的心跳协议相互通信,并且每个节点都保持全局状态(可用节点的数量、谁是主节点、彼此的停机时间和正常运行时间。)

  3. 如果任何节点在一段时间内没有收到主节点的消息,则发出警报。如果达成共识,master 宕机,则选举新的 master。

  4. 如果节点网络被分区。

    • 并且master在minor partition,那么它会停止服务请求,并在设定的一段时间后自行down掉。 Minor group 不能选举 master(一些最小节点需要做出决定)
    • 在未收到旧 master 的消息后,新 master 在主分区中被选中。

Now I am stuck with a problem, that is, in the step 4 above, there is a time gap where the old master is still serving the requests, while new master getting elected in the major node.

如果某些客户端决定将新数据写入旧主机,这似乎会导致整个系统的数据不一致。我们如何避免这个问题。如果有人指出我正确的方向会很高兴。

【问题讨论】:

    标签: distributed-computing distributed-system fault-tolerance


    【解决方案1】:

    在这种情况下,您想要的不是接受对少数主节点的写入,而是简单地拒绝对旧主节点的写入,您可以通过在每次写入时尝试验证其与集群中的大多数节点的主控权来做到这一点。如果主节点位于分区的少数方,它将不再能够联系集群的大多数成员,因此将无法确认客户端的请求。在基于仲裁的系统中,这段短暂的不可用时间比丢失已确认的写入更可取。

    您应该阅读 Raft 论文。您正在慢慢实现 Raft 协议,它可能会回答您在此过程中可能遇到的许多问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 2015-10-13
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多