一、前言目前越来越多的互联网公司开始使用docker。在此之前,虚拟机占据了大部分企业市场。单独使用docker的一些缺点。比如命令行操作繁琐,需要记忆的参数很多。这里有一个简单易用的工具来解决这些缺点——Marathon。二、Mesos的基本概念:Mesos使用与LinuxKernel相同的机制,但运行在不同的抽象层次上。Mesos内核利用资源管理和调度API来跨数据中心或云环境(例如,Hadoop、Spark、Kafaka、ElasticSearch)运行和服务引用。ZooKeeper:ZooKeeper是一个分布式的、开源的分布式应用协调服务,是Google的Chubby的开源实现,是Hadoop和HBase的重要组件。它是一种为分布式应用程序提供一致服务的软件。其功能包括:配置维护、名称服务、分布式同步、群组服务等。Marathon:Marathon是一个Mesos框架,支持长时间运行的服务,例如Web应用程序。它是集群的分布式Init.d,能够原样运行任何Linux二进制发行版,如Tomcat、Play等。它也是一个私有的PaSS,实现服务发现,提供RESTAPI服务部署,有授权和SSL,配置约束,通过HAProxy实现服务发现和负载均衡。3.部署为了部署方便,全部使用docker部署。1、master搭建三台mesosmaster服务器,ip地址分别为10.100.0.21、10.100.0.22、10.100.0.23。需要在master(1)上部署mesosmater、zookeeper和marathon,在10.100.0.21上执行如下命令:marathondockerrun-d-eMARATHON_HOSTNAME=10.100.0.21-eMARATHON_HTTPS_ADDRESS=10.100.0.21-eMARATHON_HTTP_ADDRESS=10.100.0.21-eMARATHON_MASTER=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2181/mesos-eMARATHON_ZK=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.081.21:marathon--namemarathon--nethost--restart=alwaysmesoscloud/marathonmesos-masterHOST_IP=10.100.0.21dockerrun-d--namemesos-master1--net="host"-p5050: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"mesoscloud/mesos-masterzookeeperdockerrun-d-eMYID=1-eSERVERS=10.100。0.21,10.100.0.22.10.100.0.23-NAMEZOOKEPER-RESTAR=ALWAYS-NET=HOSTMESOSSCLOUD/ZOOKEEPER(2)需要在10.100.0.22上上下列命令命令命令命令命令下列上上上上上0.22-eMARATHON_HTTP_ADDRESS=10.100.0.22-eMARATHON_MASTER=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2181/mesos-eMARATHON_ZK=zk://10.100.0.21:2130,2181,10.100.0.21:2181/marathon--namemarathon--nethost--restart=alwaysmesoscloud/marathonmesos-masterHOST_IP=10.100.0.22dockerrun-d--namemesos-master1--net="host"-p5050: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"mesoscloud/mesos-masterzookeeperdockerrun-d-eMYID=2-eSERVERS=10.100.0.21,10.100.0.22,10.100.0.23--namezookeeper--r最好=始终-net=hostmesoscloud/zookeeper(3)需要10.100.0.0.23上上命令下列命令下列命令下列命令下列下列下列下列下列下列命令下列下列下列下列下列命令下列下列下列下列下列命令下列下列命令下列命令命令命令//10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2181/marathon--namemarathonnethost--restart=alwaysmesoscloud/marathonmesos-masterHOST_IP=10.230dockerrun-d--namemesos-master1--net="主机"-p5050: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"mesoscloud/mesos-masterzookeeperdockerrun-d-eMYID=3-eSERVERS=10.100.0.21,10.100.0.22,10.100.0.23--namezookeeper--restart=always--net=hostmesoscloud/zookeeper这样mesos的master已经设置好了。2、从服务器搭建完成。下面是模拟4台mesos从服务器,ip地址为10.100。(1)在10.100.0.24上运行如下命令dockerrun-d--net=host--pid=host--privileged=true--name=ms1-v/usr/bin/docker:/usr/bin/docker-v/dev:/dev-v/var/run/docker.sock:/var/run/docker.sock-v/var/log/mesos:/var/log/mesos-v/tmp/mesos:/tmp/mesos-eMESOS_HOSTNAME=10.100.0.24-eMESOS_IP=10.100.0.24-eMESOS_MASTER=zk://10.100.0.21:2181,10.100.0.22:2181,10.100.0.23:2181/mesos-eMESOS_CONTAINERIZERS运行以下命令dockerrunthel=(2)-d--net=host--pid=host--privileged=true--name=ms1-v/usr/bin/docker:/usr/bin/dockeron10.100.0.25-v/dev:/dev-v/var/run/docker.sock:/var/run/docker.sock-v/var/log/mesos:/var/log/mesos-v/tmp/mesos:/tmp/mesos-eMESOS_HOSTNAME=10.100.0.25-eMESOS_IP=10.100.0.25-eMESOS_MASTER=zk://10.100.0.21:2181,10.100.0.22:2181,10.100.0.23:2181/mesos-eMESOS_CONTAINERIZERSl=(3)运行如下命令dockerrun-d--net=host--pid=host--privileged=true--name=ms1-v/usr/bin/docker:/usr/bin/dockeron10.100.0.26-v/dev:/dev-v/var/run/docker.sock:/var/run/docker.sock-v/var/log/mesos:/var/log/mesos-v/tmp/mesos:/tmp/mesos-eMESOS_HOSTNAME=10.100.0.26-eMESOS_IP=10.100.0.26-eMESOS_MASTER=zk://10.100.0.21:2181,10.100.0.22:2181,10.100.0.23:2181/mesos-eMESOS_CONTAINERIZERS=docker,mesosmesoscloud/mesos-slave(4)在10.100.0.28上运行如下命令dockerrun-d--net=host--pid=host--privileged=true--name=ms1-v/usr/bin/docker:/usr/bin/docker-v/dev:/dev-v/var/run/docker.sock:/var/run/docker.sock-v/var/log/mesos:/var/log/mesos-v/tmp/mesos:/tmp/mesos-eMESOS_HOSTNAME=10.100.0.28-eMESOS_IP=10.100.0.28-eMESOS_MASTER=zk://10.100.0.21:2181,10.100.0.22:2181,10.100.0.23:2181/mesos-eMESOS_CONTAINERIZERS=docker,mesosmesoscloud/mesos-slave以上,设置完成4.可以通过http://${查看HOST_IP}:5050查看mesos服务器状态:使用http://{HOST}:8080/访问marathon:需要在DockerContainer中输入相应的镜像:还需要配置端口:docker会启动很快目前启动了一个实例:如果现在需要多个,可以选择将scaleApplication的值调整为5:可以瞬间运行多个容器:5.关于扩容,scaleApplication的值调整可以很快扩容,但是运行服务器的端口都是随机的,如果需要手动添加会很麻烦。幸运的是,我们有一个新工具可以帮助我们,一个定制的haproxy——marathon-lb。我们还是用容器来部署:dockerrun-d--privileged-ePORTS=9090--net=hostmesosphere/marathon-lbsse-mhttp://10.100.0.21:8080-mhttp://10.100.0.22:8080-mhttp://10.100.0.23:8080--groupexternal这样我们就可以通过9090端口访问:http://${HOST_IP}:9090/haproxy?stats在配置环境变量的时候需要加上2个变量:HAPROXY_0_PORT=80HAPROXY_GROUP=external不管容器伸缩多少,都会通过haproxy的80端口代理,横向扩展非常方便。【本文为栏目组织《奇安科技》原创文章,转载请微信公众号(bigsec)联系原作者】点此查看更多本作者好文
