一种将一台服务器设置为主服务器的算法?

问题描述 投票:0回答:2

想知道是否有人对一种好的算法有任何建议或示例,以保证一台且只有一台服务器在同时启动的多台服务器中被设置为主服务器?

我想出了以下内容,但问题在于下面的最后一个问题:

  1. 启动时,会运行一个小服务来获取主机名并写入 将其保存到共享网络驱动器上的文件。
  2. 机器来了 最后的将是获胜者,因此被设置为大师。
  3. 如果任何机器出现故障并再次出现,则该机器将是 大师。
  4. 但是如果 master 宕机了并且没有宕机,会发生什么? 回来了?

或者这一切从一开始就很糟糕吗?有更好的办法吗?

c# algorithm master-slave
2个回答
1
投票

这个问题有多种解决方案。如果您假设共享文件系统始终可用,那么问题就简单了。

  • 每次计算机启动时,它都会检查共享系统上的“主”文件。
  • 如果不存在,它将创建主文件并将其名称写入其中。
  • 如果存在,它会检查主主机名是否已启动。如果主主机名已启动,则它不会执行任何操作。
  • 如果主主机名未启动,它将其名称写入主文件,并且现在它是主主机。
  • 在任何机器执行任何“主”操作之前,它都会检查共享主机名以确保它是主设备。

这不是一个万无一失的解决方案,因为它依赖文件系统来控制对文件的访问(两台计算机都尝试同时写入文件)。然而,因为主文件中应该只有一个主机名,所以最后一步应该保证只有一台计算机真正认为它是主文件。

如果不假设始终存在共享文件系统,问题会有点困难。


0
投票

您描述的问题称为“领导者选举”。一种可能的解决方案称为筏算法。 github上有一个c#实现:https://github.com/hhblaze/Raft.Net

© www.soinside.com 2019 - 2024. All rights reserved.