发布于 2015-12-05 11:10:57 | 511 次阅读 | 评论: 1 | 来源: 网络整理

恢复slave节点是Mesos的一个功能:

  1. 当slave节点进程死亡的时候,让执行器和任务保持运行。
  2. 让slave节点运行的执行器和任务去连接slave节点已重启的进程。

Mesos被控端有两种情况需要重启:升级或者崩溃。此功能在0.14.0 版本后启用。

恢复机制

slave节点恢复工作的前提是:有充足的slave节点监测点信息,包括本地磁盘中运行中的任务和执行器的位置(比如:任务信息,执行器信息,状态变更)。 当slave节点 和应用框架 开启运行锚点监控时,随后的slave进程重启机制 就可以恢复 监测点信息,重新连接 执行器。

注意:当slave节点所运行的slave进程被重启的时候,所有的执行器和任务都将被终止。

> NOTE: 若要开启应用框架恢复功能,必须获取精确的监测信息。 > 另外,可选择不试用监测的情形:当磁盘io读写性能要求较高,不希望监测进程带来额外磁盘读写负载时可选择不用锚点监测。

启用slave节点运行锚点监测

> NOTE: 从Mesos 0.22.0开始,slave节点 运行锚点监测将自动在所有slave节点开启。

此功能有四个参数可供slave节点设置。

  • checkpoint : 设置是否把锚点监测 slave节点和应用框架的信息写入磁盘。 [默认: true].

    • 开启此项将可将重启的slave节点恢复到之前的状态,使用 (--recover=reconnect) 来恢复和终止(--recover=cleanup) 原有执行器。 > NOTE: 从Mesos 0.22.0起,此设置被移除,因为这将作用于所有slave节点。
  • strict : 设置是否执行严格恢复模式 [默认:true].

    • 若设置strict=true,则将只恢复没有任何出错时的状态。
    • 若设置strict=false,所有之前的出错,将被忽略,将尽可能恢复到最近状态。
  • recover : 设置是否恢复状态并重新连接原先的执行器。 [默认重连:reconnect].

    • 若设置为recover=reconnect,将重连运行中的执行器。
    • 若设置为recover=cleanup,则会终止所有原有的、还在活动的执行器然后退出。这可用于想要不向前兼容的slave升级或执行器升级。

    > NOTE: 若无任何监测点信息存在,则无法执行恢复,slave节点在master节点上将被注册为新的slave节点。

  • recovery_timeout : 设置恢复slave节点时的超时总时间 [默认15分钟: 15 mins].
    • 若slave节点恢复所需时间超过设定的时间,则此指向此slave节点、待重连的执行器都将自动中断。 > NOTE: 此设置只有当配置项--checkpoint启用时才有效。

> NOTE: 若所有应用框架都没启用锚点监测, > 当slave节点死亡后,应用框架的执行器和任务都将无法恢复。

重启的slave节点将需要在限定时间内(目前设定为 75秒)重新到master节点那里注册,若超过此限定时间,master节点将关闭slave节点,slave节点里活动的执行器和任务也将被关闭。

所以,强烈建议配置一个slave节点自动重启的工具/机制。(比如使用monit)。

slave节点的完整选项可./mesos-slave.sh --help 查看

启用应用框架锚点监测

若开启应用框架锚点监测,FrameworkInfo在更新的时候,将包含checkpoint字段。 应用若要开启运行监测,需要在向master节点注册之前,设置FrameworkInfo.checkpoint=True

> NOTE: 启用锚点监测的应用框架将只会选用启用锚点监测的slave节点。所以,在设置checkpoint=True之前,要确保集群中存在启用了锚点监测的slave节点。 > 若不存在这种slave节点,应用框架将申请不到任何资源,当然也更无法运行任何任务或者执行器了。

systemd 和 POSIX 隔离方式时会出现的问题

当使用 systemd 加载 mesos-slave 时,若只使用了posix隔离机制,将导致 应用的任务 无法恢复。 由于systemd进程的默认终止进程模式KillMode 是采用 cgroup 以组定策略的,因此当slave节点停止运行的时候,所有子进程也将被停止。

解决办法:需要指定 KillModeprocess以进程定策略,这样执行器就可以在slave节点死亡状态时不被殃及,从而可以在之后重连。

下面是具体的systemd设置方法:

[Service]
ExecStart=/usr/bin/mesos-slave
KillMode=process

> NOTE: 由于知道这个问题,docker容器技术里,使用了一个非Posix机制来隔离。

升级到0.14.0

若想让一个运行中的Mesos集群升级到0.14.0,以获得 slave恢复的功能,可参考 升级说明.

最新网友评论  共有(1)条评论 发布评论 返回顶部
PHPERZ网友 发布于2016-03-23 06:45:34
“当slave节点进程死亡的时候,让执行器和任务保持运行“ 不需要额外配置,默认情况下就是这样吧。但是当节点重新加入集群的时候,任务还是会被杀掉,这是为什么呢
支持(0)  反对(0)  回复

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务