Mesos
简介
Mesos 项目是源自 UC Berkeley 的对集群资源进行抽象和管理的开源项目,类似于操作系统内核,用户可以使用它很容易地实现分布式应用的自动化调度:http://mesos.apache.org
Mesos 拥有许多引人注目的特性,包括:
- 支持数万个节点的大规模场景(Apple、Twitter、eBay 等公司实践);
- 支持多种应用框架,包括 Marathon、Singularity、Aurora 等;
- 支持 HA(基于 ZooKeeper 实现);
- 支持 Docker、LXC 等容器机制进行任务隔离;
- 提供了多个流行语言的 API,包括 Python、Java、C++ 等;
- 自带了简洁易用的 WebUI,方便用户直接进行操作。
值得注意的是,Mesos 自身只是一个资源抽象的平台,要使用它往往需要结合运行其上的分布式应用(在 Mesos 中被称作框架,framework),比如 Hadoop、Spark 等可以进行分布式计算的大数据处理应用;比如 Marathon 可以实现 PaaS,快速部署应用并自动保持运行;比如 ElasticSearch 可以索引海量数据,提供灵活的整合和查询能力等。
大部分时候,用户只需要跟这些框架打交道即可,完全无需关心底下的资源调度情况,因为 Mesos 已经自动帮你实现了。这大大方便了上层应用的开发和运维。
安装使用
下面以 Mesos 结合 Marathon 应用框架为例,来看下如何快速搭建一套 Mesos 平台。
Marathon 是可以跟 Mesos 一起协作的一个框架,基于 Scala 实现,可以实现保持应用的持续运行。
docker pull garland/zookeeper
docker pull garland/mesosphere-docker-mesos-master
docker pull garland/mesosphere-docker-marathon
HOST_IP=10.0.0.2 # 导出主节点IP到环境变量
在主节点上启动 Zookeepr 容器:
docker run -d \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
garland/zookeeper
在主节点上启动 Mesos Master 服务容器:
docker run --net="host" \
-p 5050:5050 \
-e "MESOS_HOSTNAME=${HOST_IP}" \
-e "MESOS_IP=${HOST_IP}" \
-e "MESOS_ZK=zk://${HOST_IP}:2181/mesos" \
-e "MESOS_PORT=5050" \
-e "MESOS_LOG_DIR=/var/log/mesos" \
-e "MESOS_QUORUM=1" \
-e "MESOS_REGISTRY=in_memory" \
-e "MESOS_WORK_DIR=/var/lib/mesos" \
-d \
garland/mesosphere-docker-mesos-master
在主节点上启动 Marathon:
docker run \
-d \
-p 8080:8080 \
garland/mesosphere-docker-marathon --master zk://${HOST_IP}:2181/mesos --zk zk://${HOST_IP}:2181/marathon
在从节点上启动 Mesos slave 容器:
docker run -d \
--name mesos_slave_1 \
--entrypoint="mesos-slave" \
-e "MESOS_MASTER=zk://${HOST_IP}:2181/mesos" \
-e "MESOS_LOG_DIR=/var/log/mesos" \
-e "MESOS_LOGGING_LEVEL=INFO" \
garland/mesosphere-docker-mesos-master:latest
接下来,可以通过访问本地 8080 端口来使用 Marathon 启动任务了。
No Comments