Mesos 容错、故障

字数 777阅读 245

容错

framework-->master-->(slave->executor->task)

  1. framework宕机(调度器)
    a. framework挂掉不会影响已有任务的执行
    b. 若master实现故障恢复功能, 会重新向master注册并获取所有任务的状态信息

  2. master宕机
    a. mesos使用zookeeper作为选举服务
    b. master使用选举leader保证高可用, 当leader挂掉, 会根据选举算法选出新的leader, 所有framework和slave会向重新新的master进行注册, 而不影响以后框架调度器、slave、执行器和任务不受影响

  3. slave宕机:
    a. master发送slave宕机事件给framework, framewrok决定是否调度任务到健康的slave上
    b. slave恢复后,会向master重新注册

  4. slave进程挂掉
    a. 不会影响执行器, 待slave重启后会恢复任务, 若执行器检查slave恢复时间超过限制则自杀

  5. 执行器或者任务挂掉
    a. 执行器挂掉或者任务挂掉,slave会给master反馈任务执行失败, framework会接收到master发回的事件, 决定任务重新调度

故障

mesos集群通过与zookeeper的连接是否超时判断组件的故障状态, 可将mesos组件分为竞争者和观察者, 框架和slave是观察者, master即使观察者又是竞争者, 默认配置为10s

  1. slave与zookeeper连接超时, slave不会接收任何master发送的任务消息, 当连接恢复slave会重新接收和处理master发送的信息, 在过程中master无论是否重新选举
  2. framewrok调度器驱动和zookeeper连接超时, 则调度器驱动会通知调度器, 由调度器决定
  3. master与zookeeper连接超时
    a. master为leader, 则自杀, 其他守护模式的master进行重新选举, 可以用daemon的方式将master进行守护
    b. master为守护模式, 则等待
  4. master和slave连接超时, master会将slave设置为未激活状态, 设置任务LOST, 将任务状态返回给框架调度器, 为激活状态的slave不会像master重新注册并且会被之后的消息要求主动关闭可以用daemon的方式将slave进行守护)

问题:

  1. slave在master故障时出错, 新选举的master并不值得slave和运行在slave上任务的存在, 导致framework不能正常知道任务的状态信息(框架认为任务正常,而master不清楚任务在历史上的存在)
  2. master在slave故障时出错, slave在master leader选举成功后恢复, 此时新的master并不值得slave的存在允许其以一个新的身份注册, 导致framework和master信息不一致(framework并不知道slave上已经运行的任务)

mesos使用registry持久化已经注册的slave信息, 当slave在注册、重新注册和删除时会查看和修改registry数据,目前实现为内存(zookeeper)、LevelDB、Replicatedlog三种方式

若slave的信息不存在于registery中时不允许器重新注册 c

推荐阅读更多精彩内容