当调度程序断开连接时,如何保持executor任务运行

xt0899hw  于 2021-06-26  发布在  Mesos
关注(0)|答案(1)|浏览(507)

我正在尝试实现一个mesos框架,其中有一个具有自定义调度逻辑和长时间运行任务的调度器。
有时,由于代码部署,需要重新启动调度程序。
我注意到,每当调度器断开连接时,所有正在运行的执行器都会停止。

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

我的目标:
我希望执行程序在计划程序重新启动期间继续运行。
我希望调度器在它再次返回时检测活动任务。
我能用mesos实现这个目标吗?

x9ybnkn6

x9ybnkn61#

是的,两个目标都可以:
每个框架都有一个名为failover timeout的配置,这意味着“如果调度器断开连接,在终止执行器之前要等待多长时间”,默认值为0(例如,如果调度器断开连接,则立即终止)。要更改此设置,请通过为框架指定故障转移超时 FrameworkInfo 注册期间(如mesos kafka scheduler)
梅索斯有一种称为和解的机制来处理此类案件。简而言之,当您的计划程序由于某种原因失败时,您需要使用相同的framework id重新启动它(明确地说,您必须将framework id存储在某个地方,并在失败后恢复它),然后执行协调。
在协调过程中,mesos将向您发送所有已知任务的状态更新,以更新您的计划程序状态。想象一下这样一种情况:当你有一个运行了5个任务的框架,然后你的调度程序就死了。在重新启动调度程序之前,有2个任务也已停止。然后,在您重新注册计划程序并执行协调后,mesos应向您发送5个任务的状态更新-其中3个将是 TASK_RUNNING 和2 TASK_LOST 对于死任务。这样,您就可以与mesos同步并恢复对活动任务的控制。

相关问题