docker 必備 — marathon 基礎教程

筋斗雲 豈安運維工程師

愛游泳、愛旅行、愛計算機。

前言

目前越來越多的互聯網企業開始使用 docker,在這之前,虛擬機佔據著大部分的企業市場,但是隨著 docker 部署的增多,也發現了一些單純使用 docker 的弊端。例如命令行操作比較繁瑣,需要記的參數較多,在此介紹一個好用的解決這些弊端的工具—— Marathon。

基本概念

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 部署。

>>>>

master搭建

三台 mesos master 伺服器

ip地址分別是 10.100.0.21,10.100.0.22,10.100.0.23

需要在master上分別部署 mesos mater , zookeeper , marathon

需要在10.100.0.21 上執行下列命令 :

marathon

docker run -d -e MARATHON_HOSTNAME=10.100.0.21 -e MARATHON_HTTPS_ADDRESS=10.100.0.21 -e MARATHON_HTTP_ADDRESS=10.100.0.21 -e MARATHON_MASTER=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2n181/mesos -e MARATHON_ZK=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2181/marathon --name marathon --net host --restart=always mesoscloud/marathonn

mesos-master

HOST_IP=10.100.0.21ndocker run -d --name mesos-master1 --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" -en"MESOS_LOG_DIR=/var/log/mesos" -e "MESOS_QUORUM=1" -e "MESOS_REGISTRY=in_memory" -e "MESOS_WORK_DIR=/var/lib/mesos" mesoscloud/mesos-mastern

zookeeper

docker run -d -e MYID=1 -e SERVERS=10.100.0.21,10.100.0.22,10.100.0.23 --name zookeeper --restart=always --net=host mesoscloud/zookeepern

需要在10.100.0.22 上執行下列命令

marathon

docker run -d -e MARATHON_HOSTNAME=10.100.0.22 -e MARATHON_HTTPS_ADDRESS=10.100.0.22 -e MARATHON_HTTP_ADDRESS=10.100.0.22 -e MARATHON_MASTER=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2n181/mesos -e MARATHON_ZK=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2181/marathon --name marathon --net host --restart=always mesoscloud/marathonn

mesos-master

HOST_IP=10.100.0.22ndocker run -d --name mesos-master1 --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" -en"MESOS_LOG_DIR=/var/log/mesos" -e "MESOS_QUORUM=1" -e "MESOS_REGISTRY=in_memory" -e "MESOS_WORK_DIR=/var/lib/mesos" mesoscloud/mesos-mastern

zookeeper

docker run -d -e MYID=2 -e SERVERS=10.100.0.21,10.100.0.22,10.100.0.23 --name zookeeper --restart=always --net=host mesoscloud/zookeepern

需要在10.100.0.23 上執行下列命令

marathon

docker run -d -e MARATHON_HOSTNAME=10.100.0.23 -e MARATHON_HTTPS_ADDRESS=10.100.0.23 -e MARATHON_HTTP_ADDRESS=10.100.0.23 -e MARATHON_MASTER=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2n181/mesos -e MARATHON_ZK=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2181/marathon --name marathon --net host --restart=always mesoscloud/marathonn

mesos-master

HOST_IP=10.100.0.23ndocker run -d --name mesos-master1 --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" -en"MESOS_LOG_DIR=/var/log/mesos" -e "MESOS_QUORUM=1" -e "MESOS_REGISTRY=in_memory" -e "MESOS_WORK_DIR=/var/lib/mesos" mesoscloud/mesos-mastern

zookeeper

docker run -d -e MYID=3 -e SERVERS=10.100.0.21,10.100.0.22,10.100.0.23 --name zookeeper --restart=always --net=host mesoscloud/zookeepern

這樣 mesos 的 master 就搭建完成。

>>>>

slave伺服器搭建

下面是 mesos 的 slave 伺服器 模擬4台

ip 地址是10.100.0.24 10.100.0.25 10.100.0.26 10.100.0.28

在10.100.0.24上運行下面的命令

docker run -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 -vn/var/log/mesos:/var/log/mesos -v /tmp/mesos:/tmp/mesos -e MESOS_HOSTNAME=10.100.0.24 -e MESOS_IP=10.100.0.24 -e MESOS_MASTER=zk://10.100.0.21:2181,10.100.0.22:2181,10.100.0.23:2181/mesnos -e MESOS_CONTAINERIZERS=docker,mesos mesoscloud/mesos-slaven

在10.100.0.25上運行下面的命令

docker run -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 -vn/var/log/mesos:/var/log/mesos -v /tmp/mesos:/tmp/mesos -e MESOS_HOSTNAME=10.100.0.25 -e MESOS_IP=10.100.0.25 -e MESOS_MASTER=zk://10.100.0.21:2181,10.100.0.22:2181,10.100.0.23:2181/mesnos -e MESOS_CONTAINERIZERS=docker,mesos mesoscloud/mesos-slaven

在10.100.0.26上運行下面的命令

docker run -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 -vn/var/log/mesos:/var/log/mesos -v /tmp/mesos:/tmp/mesos -e MESOS_HOSTNAME=10.100.0.26 -e MESOS_IP=10.100.0.26 -e MESOS_MASTER=zk://10.100.0.21:2181,10.100.0.22:2181,10.100.0.23:2181/mesnos -e MESOS_CONTAINERIZERS=docker,mesos mesoscloud/mesos-slaven

在10.100.0.28上運行下面的命令

docker run -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 -vn/var/log/mesos:/var/log/mesos -v /tmp/mesos:/tmp/mesos -e MESOS_HOSTNAME=10.100.0.28 -e MESOS_IP=10.100.0.28 -e MESOS_MASTER=zk://10.100.0.21:2181,10.100.0.22:2181,10.100.0.23:2181/mesnos -e MESOS_CONTAINERIZERS=docker,mesos mesoscloud/mesos-slaven

以上,搭建完成

查看

可以通過 http://${HOST_IP}:5050 查看 mesos 的伺服器的狀態:

使用 http://{HOST}:8080/ 來訪問 marathon:

需要在 Docker Container 中輸入對應的 images:

還需要配置一下埠:

docker 很快就能啟動好。目前就啟動了一個實例:

如果現在需要多個,可以選擇 scale Application 數值調整到5:

可以瞬間運行多個容器:

關於擴容

scale Application 數值調整雖然能快速擴容,但是運行伺服器的埠都是隨機的,如果需要手工添加就會比較麻煩,好在我們有一個新的工具來幫助我們,一個定製化的 haproxy—— marathon-lb。

我們還是使用容器的方式來部署:

docker run -d --privileged -e PORTS=9090 --net=host mesosphere/marathon-lb sse -m http://10.100.0.21:8080 -m http://10.100.0.22:8080 -m http://10.100.0.23:8080 --group externaln

這樣我們就能通過 9090 埠訪問:

http://${HOST_IP}:9090/haproxy?stats

需要在配置 Environment Variables 變數的時候,添加2個變數:

?HAPROXY_0_PORT=80

?HAPROXY_GROUP=external

不管 scale 多少個容器, 都會通過 haproxy 的80埠代理 ,水平擴容非常的方便。


推薦閱讀:

把docker鏡像當作桌面系統來用
如何使用OpenDroneMap對航拍圖像快速建模
基於Docker、Registrator、Zookeeper實現的服務自動註冊
Docker Swarm Mode

TAG:Docker | 虚拟机 | 部署 |