在阿里云上使用Marathon

  • 时间:
  • 浏览:0

第一版的整个流程如图:

Marathon作为Mesos的容器调度框架,两种就提供了非常可靠的高可用方案:

测试发现你你什儿 方案不可行,是由于是Marathon并有的是在第一次向容器发送SIGTERM信号时,本来在发送SIGKILL信号将容器强制停止后,才触发taskStatus==TASK_KILLED事件,

但什么还缺陷,后后:

他们歌词 在最底层的镜像中创建了服务的运行框架,其中另三个白 python守护系统进程会将指定的所有服务启动起来。否则他们歌词 假如有一天在你你什儿 python守护系统进程中捕获SIGTERM信号并通知运维平台即可处理大问题。

在阿里云上使用Marathon,基本上有的是遇到这三个白大问题。下面介绍他们歌词 是要怎样处理什么大问题的。

从前做了后后,服务在任意时刻有的是位于另三个白 合理的配置,既能负担高峰期的压力,又不至于闲置越多的资源。

处理了上边和SLB有关的另三个白 大问题后,促进处理容器的启动与停止过程中对服务质量的影响。但在容器运行中,依然有后后位于影响服务的状况,累似 负载的变化。

你你什儿 大问题他们歌词 起初期望通过Event Bus来处理:

Marathon支持两种模式的健康检查:

后后的文章《阿里云容器服务测评》就高可用零宕机方面对容器服务作了全部测评,本文他们歌词 介绍一下小博无线目前的线上环境,Mesos+Marathon,是要怎样做到高可用零宕机的。

合理的资源配置参数不应是静态的,而应随着负载的变化而动态地伸缩。这里的伸缩,分为另三个白 方面:

要怎样让Marathon的健康检查获取到SLB的状况?他们歌词 的设计是通过去掉 另三个白 负责查询SLB状况的上边层,并让健康检查请求你你什儿 上边层。

他们歌词 利用Marathon的Event Bus机制来处理你你什儿 大问题,启动Marathon时,都可以 配置另三个白 HTTP回调地址,当其他特定的事件位于时,Marathon通知回调地址。

Marathon支持对每个容器配置不同的资源(CPU、内存、磁盘),也都可以 选用不配置,让所有容器共用ECS资源,但建议尽量从不越来越做,你你什儿 做法人太好简单,从前风险很高,让单个服务有的是后后耗光ECS上的CPU或内存资源,进而影响到部署在ECS上所有服务的服务质量。

你你什儿 流程位于以下缺陷:

后后web server位于容器内部管理,健康检查都可以 由COMMAND模式改为HTTP模式,从前就很好地处理了上边碰到的另三个白 大问题。人太好增加了些比较复杂度,前要在每个容器中嵌入你你什儿 web server,但都可以 将你你什儿 步固化在最底层的base image中,否则其硬件开销几乎都可以 忽略不计(都可以 了2M内存)。

然而,Marathon从不原生支持动态地伸缩容器。为了处理你你什儿 大问题,他们歌词 制作了运维机器人TidyMaid,用于架构设计 、分析每个容器负载,判断是横向还是纵向地伸缩服务。大致的方案为:

他们歌词 部署了另三个白 基于golang web server的运维服务平台(osp),在上边实现了你你什儿 回调接口。该接口订阅status_update_event事件,并判断taskStatus的值。后后taskStatusTASK_RUNNING,越来越就去掉 对应节点到SLB;后后是[TASK_FINISHED, TASK_KILLED, TASK_LOST, TASK_FAILED],则从SLB中移除对应的后端节点。

可见,无感知平滑漂移是另三个白 容器调度服务系统的必备功能。都可以 了实现了平滑漂移,才有后后落地快速迭代开发方法,每天线上发版数十次;都可以 了实现了平滑漂移,运维机器人促进放开手脚,自由的重启状况异常的容器,合理的调整容器的配额,更好的为实现高可用零宕机服务!

该方案身旁的考虑是,CPU负载的变化,一般和流量压力紧密关联,压力的变化会立即反映在CPU负载上,横向伸缩能立即适配流量压力;否则内存则不然,其他后后,内存负载升高,仅靠增加容器个数从都可以 了处理大问题。人太好增加容器使每个容器的请求压力降低,但对于内存后后居高的容器,其负载从不用立即下降,好多好多 有选用直接停止服务后后纵向伸缩(纵向伸缩会重启服务)。

最终的方案为,在容器中捕获SIGTERM信号,后后通知运维平台容器即将被停止,运维平台收到请求后将该容器在SLB的权重设为0。通过设置executor_shutdown_grace_perioddocker_stop_timeout参数为容器从收到SIGTERM信号到被强制停止之间留出一分钟,这主次时间用于SLB的断流以及容器对已有请求的处理的平滑切换。

否则他们歌词 又加入了另三个白 上边层,它是另三个白 部署在容器中的golang web server,做下面两件事情:

其中TCP和HTTP都可以 了请求容器内的端口,COMMAND则都可以 设置为任意shell命令。他们歌词 在osp上实现了从前另三个白 接口:查询SLB状况,后后状况为『正常』,缓存结果下次不再查询,否则每次都调用SLB API进行查询。并不一定缓存查询结果,是后后SLB Health API太快,否则有调用次数的限制。最后使用COMMAND健康检查请求你你什儿 接口。配置如下:

最终的流程如下:

一年多的线上实战表明,这套处理方案是非常可靠的。无论是部署、重启、还是停止容器,都都可以 做到无感知平滑漂移。