目录
背景
公司计算基础设施除了YARN+Spark Streaming之外还配备了Mesos+Marathon+Docker+JStorm/Storm,大部分流式计算任务都是基于JStorm框架。开始总结常用运维操作之前首先普及下Mesos和Marathon的一些基本信息。
Mesos简介
Mesos是由加州大学伯克利分校AMPLab开发的一款开源群集管理软件,2010-12-23 Mesos进入Apache软件基金会(ASF)开始孵化,2013-06-19毕业正式成为Apache顶级项目。Apache Mesos是一个基于C++的分布式资源管理框架,它被称为是分布式系统的内核。Mesos 结合容器化技术提供了有效的、跨分布式应用或框架的资源隔离和分享机制,可以做为 Hadoop、Mpi、Hypertable、Spark、 Elasticsearch 等各种分布式应用的资源管理平台。
Mesos包含两个组件:Master Daemon和Slave Daemon,Master Daemon管理所有的Slave Daemon,Slave Daemon运行在各个节点上。通过资源供给(Resource Offers)Master Daemon实现了跨应用的细粒度资源(CPU、内存等)共享。每个资源供给(Resource Offers)包含一组资源列表。对照既定组织策略(例如共享属性、优先级),Master Dameon决定提供多少资源给每个应用框架。为了支持不同的策略控制,Master Daemon使用可拔插的模块化的架构方便增加新的策略控制机制。
运行在Mesos上的应用一般由两部分组件组成:调度器(Scheduler)和执行进程(Executor Process),调度器注册在Master Daemon上用于决策资源供给,执行进运行在Slave节点上用于运行各个应用任务。当Master Daemon决定供给应用多少资源时,由调度器决定把那里的资源提供该应用使用。当应用决定接受被提供的资源时它会告诉Mesos需要运行的任务都是什么,Mesos在对应的Slave节点上加载这些任务。
关于Mesos应用实践和更多信息请移步:https://mesos.apache.org/
Marathon简介
Marathon是经过大规模生产环境验证的Apache Mesos容器编排框架,Marathon实现了服务发现和负载平衡,为部署提供REST API服务、授权和SSL、配置约束等功能。Marathon支持通过Shell命令和Docker部署应用。提供Web界面、支持CPU/MEM、实例数等参数设置,支持单应用的扩缩容但不支持复杂的集群定义。Marathon能够支持长期运行的服务比如Web应用等。
Marathon可以指定每个应用程序需要的资源以及要运行此程序需要的实例数量,并且可以对失败的任务自动做出响应。如果某个Mesos Slave宕机或应用的某个实例异常退出,Marathon将会自动启动一个新的实例来替换掉失败的实例。Marathon也允许用户在部署时指定应用程序彼此间的依赖关系,以保证某个应用程序实例不会在它依赖的数据库实例启动前启动。
关于Marathon应用实践和更多信息请移步:https://mesosphere.github.io/marathon/
集群运维常用操作
检测Mesos Slave健康状态
Mesos Slave进程正常存在情况下有可能启动Docker应用失败,常见的原因有Docker Daemon异常、镜像启动异常等,为了检测新加入Mesos集群的Slave节点是否健康可以提前准备一个简单的Docker镜像用于应用调度测试。本文以Redis为例进行演示:
新建一个Application同时填写名称、设置内存、设置Docker镜像地址和网络连接类型,然后点击Create创建Redis探针。如果Resource Roles没有限制直接填写*即可,如果各选项设置正确,应用会调度到某一个Mesos-Slave上。为了将应用调度到指定的服务器上需要将Constraints配置选项从hostname:UNIQUE变更为hostname:LIKE:192.168.1.110
变更完成后点击Change and deploy configuration确认并部署即可。Mesos Slave节点健康的状态下会很快完成部署,Redis Server会启动成功并在Marathon界面上展示运行状态、物理机IP、版本等信息:
将应用部署到指定IDC
目前Mesos和Marathon管理着3个机房的硬件资源,IDC-A的网段为10.12.*.*,IDC-B的网段为10.10.*.*,IDC-C的网段为10.13.*.*。Kafka集群在IDC-A,JStorm一般也会选择和Kafka部署在同一个机房,Marathon可以利用不同IDC之间IP网段不同将Docker调度到指定的机房。
Constraints除了支持单IP设置外还支持正则表达式,如果想把应用调度到IDC-A则可以通过hostname:LIKE:10.12.*.*实现,如果不想将应用调度到IDC-C则可以通过hostname:UNLIKE:10.13.*.*实现。
清理Mesos和Docker缓存
Mesos Slave意外crash后无法启动、升级Docker版本后应用调度失败等情况下可以尝试清理下清除Mesos配置缓存和Docker稀疏文件并重启相关进程:
# 清除Mesos配置缓存: [staff@workstation ~]# sudo rm -f /var/lib/mesos/meta/slaves/latest # 清除Mesos+Docker稀疏文件: [staff@workstation ~]# sudo systemctl stop mesos-slave [staff@workstation ~]# sudo systemctl stop docker [staff@workstation ~]# sudo rm -fr /var/lib/mesos/meta/slaves/latest [staff@workstation ~]# sudo rm -fr /var/lib/docker [staff@workstation ~]# sudo rm -fr /var/log/apps/* [staff@workstation ~]# sudo systemctl restart docker [staff@workstation ~]# sudo systemctl status docker [staff@workstation ~]# sudo systemctl restart mesos-slave [staff@workstation ~]# sudo systemctl status mesos-slave [staff@workstation ~]# sudo docker ps [staff@workstation ~]# sudo systemctl status docker [staff@workstation ~]# sudo systemctl status mesos-slave
Mesos Framework实现资源物理隔离
部分业务对JStorm集群稳定性要求比较苛刻,抑或是资源使用率比较高可能会影响其他业务,面对这种情况需要通过Mesos Framework来进行资源的物理隔离。除了需要安装Marathon外,需要对Mesos Slave增加一个default_role配置:
[staff@workstation ~]# sudo echo "inf" > /etc/mesos-slave/default_role [staff@workstation ~]# more /etc/mesos-slave/default_role inf [staff@workstation ~]# sudo systemctl restart mesos-slave
打开Mesos Master UI就会发现多了一个Framework,点击即可进入Marathon控制页面。
参考资料
https://mesosphere.github.io/marathon/
http://mesosphere.github.io/marathon/api-console/index.html
转载请注明:雪后西塘 » Mesos+Marathon+Docker+JStorm运维