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

时间:2016-02-02 12:19:17

标签: mesos

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

由于代码部署,有时需要重新启动调度程序。

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

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

我的目标:

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

  2. 我希望调度程序在重新启动时检测到活动任务。

  3. 我能用mesos实现这个吗?

1 个答案:

答案 0 :(得分:7)

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

  1. 每个名为failover timeout的框架都有一个配置,这意味着"如果调度程序断开连接,等待杀死执行程序需要多长时间。默认为0(例如,如果调度程序断开连接,则立即终止)。要更改此设置,请在注册期间通过FrameworkInfo指定框架的故障转移超时(如Mesos Kafka Scheduler

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

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