我正在尝试实现一个Mesos框架,其中有一个带有自定义调度逻辑和长时间运行任务的调度程序.
有时,由于代码部署,需要重新启动调度程序.
我注意到,每当调度程序断开连接时,所有正在运行的执行程序都会停止.
I0202 14:12:48.099814 8539 exec.cpp:383] Executor asked to shutdown
Run Code Online (Sandbox Code Playgroud)
我的目标:
我希望执行程序在调度程序重启期间继续运行.
我希望调度程序在重新启动时检测活动任务.
我可以用mesos实现这个目标吗?
是的,你可以实现这两个目标:
每个框架都有一个称为故障转移超时的配置,这意味着"如果调度程序断开连接,等待直到杀死执行程序需要多长时间"并且默认为0(例如,如果调度程序断开连接则立即终止).要更改此设置,请FrameworkInfo在注册期间为框架指定故障转移超时(如Mesos Kafka Scheduler)
Mesos有一种叫做Reconciliation的机制来处理这种情况.简而言之,当您的调度程序由于某种原因而失败时,您需要使用相同的框架ID重新启动它(明确表示您必须在某处存储框架ID并在失败后恢复它)并执行协调.
在协调期间,Mesos将向您发送所有已知任务的状态更新,以更新您的调度程序状态.想象一下当你有一个框架有5个任务正在运行然后你的调度程序死亡时的情况.在重新启动调度程序2之前,任务也已死亡.然后,在您重新注册调度程序并执行协调后,Mesos应该向您发送5个任务的状态更新 - 其中3个将执行TASK_RUNNING,2个TASK_LOST执行死任务.这样,您就可以与Mesos同步并恢复对活动任务的控制.