Mesos+Docker+Marathon环境搭建教程
官方Doc
Mesos:http://mesos.apache.org/gettingstarted/
Mesos学习:https://www.gitbook.com/book/mesos-cn/mesos-cn/details
Docker:https://docs.docker.com/engine/installation/linux/ubuntulinux/
安装Marathon:https://mesosphere.github.io/marathon/docs/
架构原理
下图描述了一个 Framework 如何通过调度来运行一个 Task:
事件流程:
1、Slave1 向 Master 报告,有4个CPU和4 GB内存可用
2、Master 发送一个 Resource Offer 给 Framework1 来描述 Slave1 有多少可用资源
3、FrameWork1 中的 FW Scheduler会答复 Master,我有两个 Task 需要运行在 Slave1,一个 Task 需要<2个cpu,1 gb内存="">,另外一个Task需要<1个cpu,2 gb内存="">
4、最后,Master 发送这些 Tasks 给 Slave1。然后,Slave1还有1个CPU和1 GB内存没有使用,所以分配模块可以把这些资源提供给 Framework2
当 Tasks 完成和有新的空闲资源时,Resource Offer 会不断重复这一个过程。 当 Mesos 提供的瘦接口允许其来扩展和允许 frameworks 相对独立的参与进来,一个问题将会出现: 一个 framwork 的限制如何被满足在不被 Mesos 对这些限制所知晓的情况下? 例如, 一个 framework 如何得到数据本地化在不被 Mesos所知晓哪个节点存储着被该 framwork 所需要的数据?Mesos 通过简单的寄予 frameworks 能够拒绝 offers 的能力来回答了这个问题。 一个 framework 将拒绝不满足其限制要求的 offers 并接受满足其限制要求的 offers. 特殊情况下,我们找到一个简单的策略 delay scheduling, 在该 frameworks 等待 一个限制时间来获取存储输入数据的节点,并生成接近的优化过得数据点。
安装参考
Mesos-master:10.63.51.231
Mesos-slave1:10.63.51.230
Mesos-slave2:10.63.51.232
安装记录
安装依赖
安装Python依赖
apt-get install curl python-setuptoolspython-pip python-dev python-protobuf
安装配置ZooKeeper
apt-get install ZooKeeperd
echo 1 | sudo dd of=/var/lib/ZooKeeper/myid
安装Mesos
1、 安装各种环境依赖:
# Update the packages.
$ sudo apt-get update
# Install a few utility tools.
$ sudo apt-get install -y tar wget git
# Install the latest OpenJDK.
$ sudo apt-get install -y openjdk-7-jdk
# Install autotools (Only necessary if building from gitrepository).
$ sudo apt-get install -y autoconf libtool
# Install other Mesos dependencies.
$ sudo apt-get -y install build-essential python-devlibcurl4-nss-dev libsasl2-dev libsasl2-modules maven libapr1-dev libsvn-dev
2、 下载安装包
$ wget http://www.apache.org/dist/mesos/0.28.2/mesos-0.28.2.tar.gz
$ tar -zxfmesos-0.28.2.tar.gz
3、 编译&&安装:
$ cdmesos
$./bootstrap(从官网下载的安装包不需要这一步,git上下载的包需要)
$ mkdirbuild
$ cdbuild
$../configure
$ make (这一步时间比较长,如果卡住时间特别长考虑机器配置问题)
# Runtest suite.
$ make check(时间也特别长,可略过)
$ makeinstall
安装配置ZooKeeper
apt-get install ZooKeeperd
echo 1 | sudo dd of=/var/lib/ZooKeeper/myid
配置mesos-master(只需要主节点配置,从属节点可略过)
mkdir -p /etc/Mesos-master
echo in_memory | sudo ddof=/etc/Mesos-master/registry
安装Deimos
Mesos通过Deimos 管理Docker,通过pip安装Deimos:
$ pip install deimos
配置mesos 使用Deimos
$ mkdir -p/etc/mesos-slave
$ echo/usr/local/bin/deimos | sudo dd of=/etc/mesos-slave/containerizer_path
$ echo external | sudodd of=/etc/mesos-slave/isolation
安装docker
参考:https://docs.docker.com/engine/installation/linux/ubuntulinux/
安装Marathon
$ curl -Ohttp://downloads.mesosphere.com/marathon/v1.1.1/marathon-1.1.1.tgz
$ tar xzf marathon-1.1.1.tgz
启动服务
启动所有服务 :
$ initctlreload-configuration
$ service dockerstart
$ servicezookeeper start
在所有的节点上配置ZooKeeper
在配置maser节点和slave节点之前,需要先在所有的6个节点上配置一下ZooKeeper,配置步骤如下:
修改zk的内容
sudo vi /etc/Mesos/zk
将zk的内容修改为如下:
zk://10.162..2.91:2181,10.162.2.92:2181,10.162.2.93:2181/Mesos(master-ip:port,master-ip:port……,只需加master的zookeeper地址)
配置所有的master节点
在所有的master节点上都要进行如下操作:
修改ZooKeeper的myid的内容
sudo vi /etc/ZooKeeper/conf/myid
将三个master节点的myid按照顺序修改为1,2,3。(本例中master有三个节点)
修改ZooKeeper的zoo.cfg
sudo vi/etc/ZooKeeper/conf/zoo.cfg
server.1=10.162.2.91:2888:3888
server.2=10.162.2.92:2888:3888
server.3=10.162.2.93:2888:3888
修改Mesos的quorum
sudo vi /etc/Mesos-master/quorum
将值修改为2。
配置master节点的Mesos 识别ip和和hostname(以在master1上的配置为例)
echo 10.162.2.91 | sudo tee/etc/Mesos-master/ip
sudo cp /etc/Mesos-master/ip/etc/Mesos-master/hostname
配置所有的slave节点
配置slave节点的识别ip和hostname(根据实际情况填写)
echo 192.168.2.94 | sudo tee/etc/Mesos-slave/ip
sudo cp /etc/Mesos-slave/ip/etc/Mesos-slave/hostname
在所有节点上启动服务
在master节点上启动服务(以在master1节点上为例)
initctl reload-configuration
service docker start
service zookeeper start
运行mesos-master:
./bin/mesos-master.sh --ip=10.63.51.231--work_dir=/var/lib/mesos --zk=zk://10.63.51.231:2181/mesos --quorum=1
运行mesos-slave:
./mesos-slave.sh --ip=10.63.51.230--work_dir=/var/lib/mesos --master=10.63.51.231:5050 --containerizers=docker,mesos--log_dir=/var/log/ --docker=/usr/bin/docker--executor_registration_timeout=5mins
启动Marathon:
./bin/start --masterzk://10.63.51.231:2181/mesos --zk zk://10.63.51.231:2181/marathon
Error:May 12 10:09:18 mesos-master marathon[3611]: Exception in thread "main" java.lang.UnsupportedClassVersionError: mesosphere/marathon/Main : Unsupported major.minor version 52.0
May 12 10:09:18 mesos-master marathon[3611]: #011at java.lang.ClassLoader.defineClass1(Native Method)
May 12 10:09:18 mesos-master marathon[3611]: #011at java.lang.ClassLoader.defineClass(ClassLoader.java:803)
May 12 10:09:18 mesos-master marathon[3611]: #011at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
Solution:It worked. Marathon needs jdk8. I forgot to mention that I'm on Ubuntu 14.04
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java
sudo update-alternatives --config java
好,至此,如果配置没有出现错误的话就会成功了,由于有的网络情况和设备情况不一样,所以选举的过程有的快有的慢,当发现slave节点有些正常有些不正常时,可以通过reboot来促使自己被master发现。
Mesos Web UI: http://10.63.51.231:5050/
Marathon Web UI: http://10.63.51.231:8080
更多推荐
所有评论(0)