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

ode*_*fos 2 mesos

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

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

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

I0202 14:12:48.099814  8539 exec.cpp:383] Executor asked to shutdown
Run Code Online (Sandbox Code Playgroud)

我的目标:

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

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

我可以用mesos实现这个目标吗?

ser*_*jja 7

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

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

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

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