Mesos - 当调度程序断开连接时如何保持执行程序任务 运行

Mesos - how do I keep the executor task running when scheduler disconnects

我正在尝试实现一个 Mesos 框架,其中有一个具有自定义调度逻辑和长 运行 任务的调度程序。

偶尔因为代码部署需要重启调度器

我注意到,每当调度程序断开连接时,所有 运行 执行程序都会停止。

I0202 14:12:48.099814  8539 exec.cpp:383] Executor asked to shutdown

我的目标:

  1. 我希望执行程序在调度程序重新启动期间继续 运行。

  2. 我希望调度程序在再次恢复时检测活动任务。

我可以用 mesos 实现吗?

是的,你可以实现两个目标:

  1. 每个框架都有一个名为 failover timeout which means "how much time to wait until killing executors if a scheduler disconnects" and defaults to 0 (e.g. kill immediately if scheduler disconnects). To change this you specify failover timeout for your framework via FrameworkInfo during registration (like Mesos Kafka Scheduler)

    的配置
  2. Mesos 有一个叫做 Reconciliation 的机制来处理这种情况。简而言之,当您的调度程序由于某种原因失败时,您需要使用相同的框架 ID 重新启动它(明确地说您必须在某处存储框架 ID 并在失败后恢复它)并执行协调。

    在协调期间,Mesos 将向您发送所有已知任务的状态更新,以更新您的调度程序状态。想象一下这样一种情况,当你有一个包含 5 个任务 运行 的框架,然后你的调度程序死了。在您重新启动调度程序 2 之前,任务也已终止。然后,在您重新注册您的调度程序并执行协调后,Mesos 应该向您发送 5 个任务的状态更新 - 其中 3 个 TASK_RUNNING 和 2 个 TASK_LOST 用于死任务。这样您就可以与 Mesos 同步并恢复对活动任务的控制。