正如Mesos HA 文档所解释的,您可以启动多个 Mesos 主节点并让 ZK 选举领导者。那么如果你的领主失败了,你还有至少2个可以处理的事情。通常使用 systemd 之类的东西在同一主机上自动重启 mesos-master(如果它仍然健康的话),或者使用 Amazon AutoScalingGroups 之类的东西来确保即使主机死机也始终拥有 3 台主机。
Marathon 在其HA 模式下也可以这样做(默认情况下,如果您启动多个指向同一个 znode 的实例)。许多用户在与他们的 Mesos 主节点相同的 3 个节点上启动这些,使用 systemd 重新启动失败的 Marathon 服务,并使用相同的 ASG 来确保有 3 个 Mesos/Marathon 主节点。
这些相同的 3 个节点通常也被配置为 ZK 仲裁,因此您只需管理 3 个节点即可在 Mesos 之外运行所有这些服务。
可以想象,您可以将 Mesos-master 和 Marathon 作为 Marathon/Mesos 任务引导到集群中。启动一个 Mesos+Marathon 主节点以启动集群,然后在 Marathon 中创建一个 Mesos-master 应用程序以启动 2-3 个主节点作为 Mesos 任务,并在 Marathon 中创建一个 Marathon-master 应用程序以启动几个 HA Marathon 实例(作为 Mesos 任务)。一旦它们是健康的,您可以杀死原来的独立 Mesos/Marathon 主服务器,集群将故障转移到自托管的 Mesos 和 Marathon 主服务器,如果它们发生故障,它们将在集群的其他地方自动重新启动。也许这也适用于 ZK。您可能需要Mesos-DNS和/或 ELB 之类的东西来让其他服务找到 Mesos/Marathon。我怀疑是否有人以这种方式运行 Mesos,但这太疯狂了,它可能会起作用!