Mesos+ZooKeeper+Marathon+Docker分布式部署打造PaaS云平台实践(一)


【编者的话】本文先给出一个分布式部署的过程,在完成这种分布式部署的过程花费了我一个周末的时间,因为国内几乎没有找到分布式部署的实践过程记录,希望我的实践过程能够给有兴趣的小伙伴在进行分布式部署中提供一定的帮助。

最近开始对Mesos非常的感兴趣,Mesos和Docker一样是一个使用Go语言编写的新兴且具有活力的项目,因为最近痴迷学习Go语言,所以对使用Go语言编写的项目都比较看好。本文先给出一个分布式部署的过程,在完成这种分布式部署的过程花费了我一个周末的时间,因为国内几乎没有找到分布式部署的实践过程记录,希望我的实践过程能够给有兴趣的小伙伴在进行分布式部署中提供一定的帮助。之后我会在本系列博文的后半部分综合阐述一下当前Docker的一些应用场景,以及未来基于Mesos+ZooKeeper+Marathon+Docker分布式部署打造PaaS云平台的可行性。

本文中用到的项目组件介绍(全部摘自网络)

Mesos:Mesos采用与Linux Kernel相同的机制,只是运行在不同的抽象层次上。Mesos Kernel利用资源管理和调度的API在整个数据中心或云环境中运行和提供引用(例如,Hadoop、Spark、Kafaka、Elastic Search)。

ZooKeeper:ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和HBase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。

Marathon:Marathon是一个Mesos框架,能够支持运行长服务,比如Web应用等。它是集群的分布式Init.d,能够原样运行任何Linux二进制发布版本,如Tomcat、Play等等。它也是一种私有的PaSS,实现服务的发现,为部署提供提供REST API服务,有授权和SSL、配置约束,通过HAProxy实现服务发现和负载平衡。

Docker:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

Mesos+ZooKeeper+Marathon+Docker分布式部署过程记录

Mesos为了管理的简单也采用了master-slave的架构,因此我本次使用了6个Ubuntu 14.04的虚拟机作为部署节点。其中3个mastser节点,3个slave节点。为直观的理解,我简单的画了一张架构图:
3AD0EBE4-D449-4E1F-B5FA-AB8CDC8F265B.png

如图所示其中master节点都需要运行ZooKeeper、Mesos-master、Marathon,在slave节点上只需要运行master-slave就可以了,但是需要修改ZooKeeper的内容来保证slave能够被master发现和管理。为了节约时间和搞错掉,我在公司内部云平台上开一个虚拟机把所有的软件都安装上去,做成快照进行批量的创建,这样只需要在slave节点上关闭ZooKeeper、Mesos-master服务器就可以了,在文中我是通过制定系统启动规则来实现的。希望我交代清楚了,现在开始部署。

一、准备部署环境


  • 在Ubuntu 14.04的虚拟机上安装所有用到软件,虚拟机可以上互联网。

  • 安装Python依赖
    apt-get install curl python-setuptools python-pip python-dev python-protobuf

  • 安装配置ZooKeeper
    apt-get install ZooKeeperd
    echo 1 | sudo dd of=/var/lib/ZooKeeper/myid

  • 安装Docker
    echo deb http://get.Docker.io/ubuntu Docker main | sudo tee /etc/apt/sources.list.d/Docker.list
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
    apt-get update && apt-get install lxc-Docker

  • 安装配置Mesos-master和Mesos-slave
    curl -fL http://downloads.Mesosphere.io/master/ubuntu/14.04/Mesos_0.19.0~ubuntu14.04%2B1_amd64.deb -o /tmp/Mesos.deb 
    dpkg -i /tmp/Mesos.deb
    mkdir -p /etc/Mesos-master
    echo in_memory | sudo dd of=/etc/Mesos-master/registry

  • 安装配置Mesos的Python框架
    curl -fL http://downloads.Mesosphere.io/master/ubuntu/14.04/Mesos-0.19.0_rc2-py2.7-linux-x86_64.egg -o /tmp/Mesos.egg
    easy_install /tmp/Mesos.egg

  • 下载Marathon
    curl -O http://downloads.Mesosphere.io/marathon/marathon-0.6.0/marathon-0.6.0.tgz  
    tar xvzf marathon-0.6.0.tgz

  • 下载安装Mesos管理Docker的代理组件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 | sudo dd of=/etc/Mesos-slave/isolation


好,至此在一个虚拟机上就完成了所有组件的安装部署,下面就是对虚拟机打快照,然后快速的复制出6个一样的虚拟机,按照上图的ip配置进行配置之后就可以进入下个阶段,当然为了保险你可以测试一下上处组件是否安装成功和配置正确。如果你没有使用云平台,或者不具备快照功能,那就只能在6个虚拟机上重复6遍上处过程了。

二、在所有的节点上配置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节点

在所有的master节点上都要进行如下操作:

  • 修改ZooKeeper的myid的内容
    sudo vi /etc/ZooKeeper/conf/myid

    将三个master节点的myid按照顺序修改为1,2,3。

  • 修改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
  • 配置master节点服务启动规则
    {{{sudo stop Mesos-slave
    echo manual | sudo tee /etc/init/Mesos-slave.override}}}


四、配置所有的slave节点


  • 配置slave节点的服务启动规则
    sudo stop ZooKeeper
    echo manual | sudo tee /etc/init/ZooKeeper.override
    echo manual | sudo tee /etc/init/Mesos-master.override
    sudo stop Mesos-master

  • 配置slave节点的识别ip和hostname(以slave1节点为例)
    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
    service Mesos-master start
    service Mesos-slave start
    cd marathon-0.6.0
    ./bin/start --master zk://10.162.2.91:2181,10.162.2.92:2181,10.162.2.93:2181/Mesos --zk_hosts 10.162.2.91:2181

  • 在所有slave节点上启动服务
    sudo start mesos-slave

    好,至此,如果配置没有出现错误的话就会成功了,由于有的网络情况和设备情况不一样,所以选举的过程有的快有的慢,当发现slave节点有些正常有些不正常时,可以通过reboot来促使自己被master发现。


六、Marathon简单的使用

要使用Marathon进行应用的部署,需要先在slave节点上有Docker镜像,这个可以自己写Dockerfile来做,也可以直接从公共仓库里pull下来一个。Marathon的应用部署和k8s一样,使用通过JSON文件来进行的,以下就是一个jason文件的范例:
curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" \
 10.162.2.91:8080/v2/apps -d '{
 "container": {"image": "docker:///ubuntu", "options": ["--privileged"]},
 "cpus": 0.5,
 "cmd": "ok",
 "id": "cci-docker",
 "instances": 2,
 "mem": 30
 }'  


七、成功部署的结果是这样的

1393540D-028A-49CA-B4BE-D8C515C88A10.png

3677CB31-F1DF-430D-BC6A-82A576C0DFE8.png

176B3875-B5F6-42BC-9EF4-A49EBE835184.png

07CDB99D-51D6-4D5C-8B15-8151EE32F155.png

4D7C8BAF-FC99-4BCD-88E5-6CD5EEFEF85E.png

05BD7E57-90A1-4891-8AC3-4D179B6DF248.png

B8434C3A-DDCE-4562-90A2-31BF8D31CB99.png

关于对Docker应用场景的总结以及这种基于Docker的PaaS平台未来的发展前景,我会在后面的博文中进行讨论分析。

赵英俊 2015年7月21日 于 杭州 城云科技

5 个评论

感谢分享
感谢分享
很好,但 有几个的方不是很准确。
1.master节点并不需要启动Mesos-slave
2.slave 节点也不需要启动Mesos-master
写得不错,期待下一期

要回复文章请先登录注册