zoukankan      html  css  js  c++  java
  • mesos agent recovery 详细过程分析

    mesos agent 在升级完成后,将会 start mesos agent service, 会打印出一些 (flags, resources, attributes, hostname etc), 然后从目录 /data/mesos/meta 中恢复 mesos agent 状态。与此同时,Group 进程会连接到 ZooKeeper 上,并同步一些 group 操作(比如:joins, cancels, datas 的队列大小等)。然后采用消息摘要算法完成与 ZooKeeper 的认证。

    之后,开始恢复运行在其上的框架(frameworks ) 信息。先恢复框架的 executors ,(与此同时,垃圾回收会启动定时任务(比如在多少天之后回收)以回收该 executor 的资源,这个部分可能会执行。)

    即 recovering executors -> recovering Docker containers -> Recovering containerizer -> provisioner recovery complete .

    恢复 docker container 原理是:会将之前的 container 信息 (container id, slaveId, container state, executorcontainer, pid etc ) 先保留下来, 以创建一个新 container 的方式复制保存。

    之后把之前的老的 container 销毁。销毁的顺序是: 先让该container 中的 executor 退出,然后 destroy container.

    这时,group 会在 zookeeper 中创建一个数据存储的目录。detector 会侦测 leading master

    在 slave 这边,slave 开始从 checkpoint 恢复,同时会回调 container termination 操作,如果设置了重连接 flag, 则会发送重连接 executor 请求 。

    slave 将 framework 的 task 状态更新成 TASK_FAILED,并更新该 task 对应的 container resources 信息。

    status_update_manager.cpp 会接收 TASK_FAILED 的状态更新并更新检查点

    如果该 slave 正处在 RECOVERING 状态,slave 会丢弃 TASK_FAILED 状态更新。

    最后,slave 会清除所有未重新注册的 executors 。此时,mesos agent 完成 recovery 操作了。

    status_update_manager.cpp 会 Resuming sending status updates, 并发送两次 Resending status update TASK_FAILED 给 slave 。然后 slave.cpp 会将该 task 的 TASK_FAILED 状态 forward 给 mesos master .

    之后,status_update_manager.cpp 会收到 Received status update acknowledgement 并且会 Checkpointing ACK for status update TASK_FAILED

    由于 TASK_FAILED ,此时 slave 会清掉该 task 对应的 executor。gc.cpp 也开始对该 task 的资源进行垃圾回收。

    因此,最后在该 agent 上跑的 task 的 executor 都会被清除并将所有的资源回收,该 task 的 FAILED 的状态会由 该 agent 汇报给 master ,所以 该失败 task 如果不在当前 agent 上重新注册执行就会在另外一个 agent 上重新执行。。。

    如果是在当前 agent 上执行,则 slave 会接收到该任务,并加入到 queue 队列并准备执行, docker 会为其准备启动 container 并检查 checkpoint , systemd 会分配一个 pid 给 mesos_executors.slice 。slave 此时,会得到 executors 重新注册的消息,并将在队列中的 task 发给那个 executor , 并更新成 TASK_RUNNING 状态,slave 也会将该状态转发给 master , 此时 task 恢复执行了。

  • 相关阅读:
    [WPF系列] window自定义
    [WPF系列]-Prism+EF
    C#基础-事件 继承类无法直接引发基类的事件
    [WPF系列] 高级 调试
    [WPF系列]-DynamicResource与StaticResource的区别
    [WPF系列]-DataBinding 绑定计算表达式
    [WPF系列]- Style
    [WPF系列]-基础 TextBlock
    [WPF系列]-ListBox
    [WPF系列]-DataBinding 枚举类型数据源
  • 原文地址:https://www.cnblogs.com/qianggezhishen/p/7349336.html
Copyright © 2011-2022 走看看