1. 程式人生 > >Marathon+Mesos+Docker實戰

Marathon+Mesos+Docker實戰

主機名 遠程 狀態 network zookeeper vpd cmd 兩臺 -m

Marathon+Mesos+Docker實戰

技術分享圖片

  • Apache Mesos概述

Apache Mesos是一款基於多資源調度的開源集群管理套件,使容錯和分布式系統更加容易使用實現,采用Master/Slave結構簡化設計,將Master盡可能輕量級,進保存了Mesos Slave的狀態信息

常見集群管理工具

工具 特點 優勢
Apache Mesos 需要獨立部署mesos-slave進程;依賴framework的功能;可管理docker容器;成本較高 應為經過許多互聯網公司的大規模實踐,穩定性具有保障
Docker Swarm Docker 官方群集工具,需要Docker deamon 啟用tcp端口學習;Swarm的命令兼容Docker;學習成本非常低 公有雲環境Machine 和 Swarm 搭配使用效率更高
Google Kubernetes 完全DOcker化的管理工具,功能叠代非常快;群集管理能力比mesos稍差 功能模塊集成度高

Apache Mesos工作原理

請看下圖:

技術分享圖片

Apache Mesos配置實戰

實驗環境:

實驗環境 IP地址 內核版本3.10以上
master 192.168.179.151 3.10.0-693.el7.x86_64
master1 192.168.179.158 3.10.0-693.el7.x86_64
master2 192.168.179.159 3.10.0-693.el7.x86_64
slave 192.168.179.155 3.10.0-693.el7.x86_64
slave1 192.168.179.157 3.10.0-693.el7.x86_64

安裝Apache Mesos

1:配置Java環境

tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/

mv jdk1.8.0_91/ java

#在/etc/profile配置環境變量
vim /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

2:安裝相關環境

(1)安裝開發開發工具

//安裝開發工具
yum groupinstall -y "Development Tools" 

#有時候安裝開發工具的時候會出現沒有相關的軟件包這時候要根據報錯提示先安裝相關依賴包

(2)添加Apache-maven源

//添加apache-maven源
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

(3)安裝相關依賴包

//添加依賴包
yum install -y apache-maven python-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel apr-util-devel subversion-devel

(4)配置WANdiscoSVN網絡源

//配置WANdiscoSVN網絡源

vim /etc/yum.repos.d/wandisco-svn.repo

[WANdiscoSVN]
name=WANdisco SVN Repo 1.9
enabled=1
baseurl=http://opensource.wandisco.com/centos/7/svn-1.9/RPMS/$basearch/
gpgcheck=1
gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco

(3)配置Mesos環境變量

vim /etc/profile

export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so

source /etc/profile

(4)構建Mesos

這裏使用源代碼方式編譯安裝Mesos

wget http://www.apache.org/dist/mesos/0.25.0/mesos-0.25.0.tar.gz

tar zxvf mesos-0.25.0.tar.gz -C /opt/
mv mesos-0.25.0/ /root/
cd /root/mesos-0.25.0
mkdir build

../configure

make              //等待時間長(在線狀態)
make check
make install    

配置多臺mesos-master

#修改主機名
 hostnamectl set-hostname master

#在hosts文件裏面寫入三臺master 兩臺slave的主機IP地址

vim /etc/hosts
192.168.179.151 master
192.168.179.158 master1
192.168.179.159 master2
192.168.179.155 slave
192.168.179.157 slave1
#可以直接用scp 遠程復制其他四臺服務器,另外兩臺可以在master上復制虛擬機

#建立軟連接
ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave

#安裝docker
yum install docker -y
systemctl start docker.servicev #運行
systemctl enable docker.service #開機自啟動

(1)安裝Zookeeper

在三個Mesos-master節點上安裝Zookeeper

tar zxvf zookeeper-3.4.6.tar.gz -C /home/q/

cd zookeeper-3.4.6/

mv conf/zoo_sample.cfg conf/zoo.cfg

cd /home/q/zookeeper-3.4.6/conf

vim zoo.cfg  #修改zoo.cfg配置文件 
   dataDir=/home/q/zookeeper-3.4.6/data   //修改位置
   dataLogDir=/home/q/zookeeper-3.4.6/datalog
   server.1=192.168.179.151:2888:3888
   server.2=192.168.179.158:2888:3888
   server.3=192.168.179.159:2888:3888

//在master主機上操作(/opt/home/zookeeper-3.4.6/中)
mkdir data datalog 
echo 1 > data/myid
cat data/myid

#按照zoo.cfg配置文件的swerver1、2、3修改每臺master的myid
//在master1主機上操作(/opt/home/zookeeper-3.4.6/中)
mkdir data datalog 
echo 2 > data/myid
cat data/myid 

//在master2主機上操作(/opt/home/zookeeper-3.4.6/中)
mkdir data datalog 
echo 3 > data/myid
cat data/myid

#啟動
//在master主機上啟動服務
./bin/zkServer.sh start conf/zoo.cfg 

//在master1主機上啟動服務
./bin/zkServer.sh start conf/zoo.cfg

//在master2主機上啟動服務
./bin/zkServer.sh start conf/zoo.cfg

//查看leader
./bin/zkServer.sh status

查看zookeeper狀態
在zookeeper-3.4.6 低下用./bin/zkServer.sh status
技術分享圖片

啟動master服務
先啟動leader服務器上的zookeeper,這是采用雙選舉機制先zookeeper選舉出個leader然後mesos第一臺啟動默認就是leader

//master2
mesos-master --work_dir=/opt/home/mesos/data --log_dir=/opt/home/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.179.151:2181/mesos --quorum=2 &>/dev/null &

//master
mesos-master --work_dir=/opt/home/mesos/data --log_dir=/opt/home/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.179.158:2181/mesos --quorum=2 &>/dev/null &

//master1
mesos-master --work_dir=/opt/home/mesos/data --log_dir=/opt/home/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.179.159:2181/mesos --quorum=2 &>/dev/null &

啟動mesos-slave

slave

mesos-slave --containerizers="mesos,docker" --work_dir=/opt/home/mesos/data --log_dir=/opt/home/mesos/logs --master=zk://192.168.179.151:2181,192.168.179.158:2181,192.168.179.159:2181/mesos --no-hostname_lookup --ip=0.0.0.0 &>/dev/null &

slave1
mesos-slave --containerizers="mesos,docker" --work_dir=/opt/home/mesos/data --log_dir=/opt/home/mesos/logs --master=zk://192.168.179.151:2181,192.168.179.158:2181,192.168.179.159:2181/mesos --no-hostname_lookup --ip=0.0.0.0 &>/dev/null &

slave2

mesos-slave --containerizers="mesos,docker" --work_dir=/opt/home/mesos/data --log_dir=/opt/home/mesos/logs --master=zk://192.168.179.151:2181,192.168.179.158:2181,192.168.179.159:2181/mesos --no-hostname_lookup --ip=0.0.0.0 &>/dev/null &

技術分享圖片

部署Marathon

#用wget下載Marathon安裝包
wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz

#解壓到/opt/hone目錄底下
tar zxvf marathon-0.15.2.tgz -C /opt/home

#開啟服務指定zk地址池
#在/opt/home/marathon-0.15.2/解壓目錄下開啟

master
./bin/start --hostname 192.168.179.158 --master zk://192.168.175.132:2181,192.168.179.159:2181,192.168.179.151:2181/mesos --http_address 0.0.0.0 &>/dev/null &

master1
./bin/start --hostname 192.168.179.15 --master zk://192.168.175.132:2181,192.168.179.158:2181,192.168.179.151:2181/mesos --http_address 0.0.0.0 &>/dev/null &

master2
./bin/start --hostname 192.168.179.151 --master zk://192.168.175.132:2181,192.168.179.159:2181,192.168.179.158:2181/mesos --http_address 0.0.0.0 &>/dev/null &

打開網頁測試Marathon的端口號是8080
技術分享圖片

建立test任務

技術分享圖片

查看master分配任務

技術分享圖片

執行過後在下面這個目錄下

 /opt/home/mesos/data/slaves/7cc2e8e7-ad03-46a6-a38d-ae1b92c78319-S0/frameworks/d82f2603-f357-4025-9574-7c511c0f435e-0000/executors
//標準錯誤和標準輸出信息
cd test.f99a7592-a099-11e8-a6b5-52540011572d/runs/latest
//顯示
stderr  stdout
//查看輸出字符串
cat stdout

技術分享圖片

顯示以下內容

Registered executor on 192.168.175.152
Starting task test.f99a7592-a099-11e8-a6b5-52540011572d
sh -c ‘echo "hello world"‘
hello world
Forked command at 3493
Command exited with status 0 (pid: 3493)

技術分享圖片

以下是slave操作

//在slave1中操作

cd /root
vim demo.json
{
"id":"basic-0",
"cmd":"while [true]; do echo ‘hello Marathon‘; sleep 5; done",
"cpus":0.1,
"mem":10.0,
"instances":1
}
//查看Marathon網站有新添加任務
curl -X POST -H "Content-type:application/json" http://192.168.175.132:8080/v2/apps [email protected]

------------再啟動一臺slave2-------------------------

hostnamectl set-hostname slave2

vim /etc/hosts    (所有主機同步)
192.168.175.132 master
192.168.175.150 master1
192.168.175.151 master2
192.168.175.152 slave
192.168.175.153 slave2

ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave

yum install docker -y
systemctl start docker.service
systemctl enable docker.service

//啟動完成會看到兩臺slave上線,任務在兩臺slave中隨機發布

mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.175.132:2181,192.168.175.150:2181,192.168.175.151:2181/mesos --no-hostname_lookup --ip=0.0.0.0

-----------------------使用mesos與marathon創建docker集群-----------------------

vim nginx.json

{
"id":"/nginx",
"container":{
"type":"DOCKER",
"docker":{
"image":"nginx",
"network":"HOST",
"parameters":[],
"privileged":false,
"forcePullImage":false
}
},
"cpus":0.1,
"mem":32.0,
"instances":1
}

curl -X POST -H "Content-type:application/json" http://192.168.175.132:8080/v2/apps [email protected]
//在任務發布指定的slave上使用命令  ps aux | grep docker  查看到nginx正在下載
root       3668  0.0  0.6 121912 12872 pts/0    Sl+  10:20   0:00 /usr/bin/docker-current -H unix:///var/run/docker.sock pull nginx:latest

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx     latest              c82521676580        3 weeks ago         109 MB

docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
9940ac858a3b        nginx               "nginx -g ‘daemon ..."   3 minutes ago       Up 3 minutes                            mesos-0d21cffd-8a12-450d-b6ff-4d4befcdaad0-S1.89e29728-37cb-4ea3-9518-2d9741ba7618

測試
http://192.168.175.153/

Marathon+Mesos+Docker實戰