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