【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

Apache Mesos

Apache Mesos能夠在同樣的集羣機器上運行多種分佈式系統類型,更加動態有效率低共享資源。提供失敗偵測,任務發佈,任務跟蹤,任務監控,低層次資源管理和細粒度的資源共享,可以擴展伸縮到數千個節點。

Mesos調度順序

Apache Mesos主從服務器調度資源的順序爲首先由Mesos主服務器查詢可用資源給調度器,第二步調度器向主服務器發出加載任務,主服務器再傳達給從服務器,從服務器向執行器命令加載任務執行,執行器執行任務以後,將狀態反饋上報給從服務器,最終告知調度器 。

高可用性與恢復

Apache Mesos主服務器使用Zookeeper進行服務選舉和發現。它有一個註冊器記錄了所有運行任何和從服務器信息,使用MultiPaxos進行日誌複製實現一致性。
Apache Mesos有一個從服務器恢復機制,無論什麼時候一個從服務器死機了,用戶的任務還是能夠繼續運行,從服務器會將一些關鍵點信息如任務信息 狀態更新持久化到本地磁盤上,重新啓動時可以從磁盤上恢復運行這些任務(類似Java中的鈍化和喚醒)。

Marathon

它是一個mesos框架,能夠支持運行長服務,比如web應用等。是集羣的分佈式Init.d,能夠原樣運行任何Linux二進制發佈版本,如Tomcat Play等,可以集羣的多進程管理。也是一種私有的Pass,實現服務的發現,爲部署提供提供REST API服務,有授權和SSL、配置約束,通過HAProxy實現服務發現和負載平衡。

架構圖

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

Apache Mesos框架是一個在Mesos上運行分佈式應用的應用程序,它有兩個組件:
調度器 : 與Mesos交互,訂閱資源,然後在mesos從服務器中加載任務;
執行器 : 從框架的環境變量配置中獲得信息,在mesos從服務器中運行任務;

系統環境

主機名 IP地址 安裝軟件包
master 192.168.96.46 jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、zookeeper-3.4.10.tar.gz、marathon-0.15.2.tgz
master1 192.168.96.47 jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、zookeeper-3.4.10.tar.gz
master2 192.168.96.48 jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、zookeeper-3.4.10.tar.gz
slave 192.168.96.49 jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、docker
slave1 192.168.96.50 jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、docker
1.查看Linux版本
cat /etc/redhat-release

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

2.查看內核版本(需要內核3.10及以上)
uname -r

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

3.所有節點關閉防火牆及Selinux
setenforce 0

systemctl stop firewalld.service
4. 相關軟件包 密碼:9c0g

開始部署

配置java環境及相關環境

1.解壓jdk軟件包

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

2.配置jdk環境變量

vim /etc/profile

export JAVA_HOME=/usr/local/jdk1.8.0_144
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

3.重新加載環境變量

source /etc/profile

4.檢查java版本信息

java -version

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

5.安裝開發工具

yum groupinstall -y "Development Tools"

6.添加apache-maven源

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

7.配置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

8.安裝相關依賴包

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

安裝Mesos

1.配置Mesos環境變量

vim /etc/profile

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

2.重新加載系統環境

source /etc/profile

3.安裝Mesos軟件包

#下載mesos
wget http://archive.apache.org/dist/mesos/0.25.0/mesos-0.25.0.tar.gz

#解壓軟件包
tar zxvf mesos-0.25.0.tar.gz -C /opt/

#移動至/root目錄下
mv mesos-0.25.0/ /root/

#進入mesos安裝目錄
cd /root/mesos-0.25.0

#新建build目錄並進入
mkdir build
cd build

#配置
../configure

#編譯(編譯時間較長)
make

#檢查
make check

#安裝
make install

以上步驟請分別部署於五臺服務器上


配置master、master1、master2節點

1.分別設置各master節點主機名

#master節點:
hostnamectl set-hostname master

#master1節點:
hostnamectl set-hostname master1

#master2節點:
hostnamectl set-hostname master2

2.修改本地hosts文件(所有節點相同)

vim /etc/hosts

192.168.96.46 master
192.168.96.47 master1
192.168.96.48 master2
192.168.96.49 slave
192.168.96.50 slave1

3.建立軟鏈接,方便mesos-master使用

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

配置slave、slave2節點

1.分別設置各slave節點主機名

#slave節點:
hostnamectl set-hostname slave

#slave1節點:
hostnamectl set-hostname slave1

2.修改本地hosts文件(所有節點相同)

vim /etc/hosts

192.168.96.46 master
192.168.96.47 master1
192.168.96.48 master2
192.168.96.49 slave
192.168.96.50 slave1

這裏請重啓系統,使其以上修改生效

3.建立軟鏈接,方便mesos-slave使用

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

4.安裝docker軟件

yum install docker -y

5.加入系統管理並啓動docker

systemctl start docker.service
systemctl enable docker.service

6.zookeeper/bin添加到系統環境變量

echo "export PATH=/home/q/zookeeper-3.4.10/bin:$PATH" >> /etc/profile

7.重新加載系統環境變量

source /etc/profile

8.啓動各節點的zookeeper服務

master
zkServer.sh start /home/q/zookeeper-3.4.10/conf/zoo.cfg

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

master1
zkServer.sh start /home/q/zookeeper-3.4.10/conf/zoo.cfg

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

master2
zkServer.sh start /home/q/zookeeper-3.4.10/conf/zoo.cfg

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

9.查看各節點的zookeeper狀態

zkServer.sh status
master:

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

master1:

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

master2:

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

master、master1、master2節點安裝zookeeper服務

1.安裝zookeeper

#解壓縮
tar zxvf zookeeper-3.4.10.tar.gz

#移動至/home/q目錄下
mv zookeeper-3.4.10 /home/q/

#進入zookeeper目錄
cd /home/q/zookeeper-3.4.10/

以下在master節點操作

1.複製配置文件模板

mv conf/zoo_sample.cfg conf/zoo.cfg

2.配置zookeeper

vim conf/zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/q/zookeeper-3.4.10/data           //修改
dataLogDir=/home/q/zookeeper-3.4.10/datalog     //修改

# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=192.168.96.46:2888:3888            //添加master節點
server.2=192.168.96.47:2888:3888            //添加master1節點
server.3=192.168.96.48:2888:3888            //添加master2節點

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

3.發送給master1、master2節點

scp conf/zoo.cfg 192.168.96.47:/home/q/zookeeper-3.4.10/conf/
scp conf/zoo.cfg 192.168.96.48:/home/q/zookeeper-3.4.10/conf/

4.master節點

4.1.新建data、datalog目錄
cd /home/q/zookeeper-3.4.10/
mkdir data
mkdir datalog
4.2.創建myid文件
echo 1 > data/myid
4.3.驗證myid值
cat data/myid

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

5.master1節點

5.1.新建data、datalog目錄
cd /home/q/zookeeper-3.4.10/
mkdir data
mkdir datalog
5.2.創建myid文件
echo 2 > data/myid
5.3.驗證myid值
cat data/myid

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

6.master2節點

6.1.新建data、datalog目錄
cd /home/q/zookeeper-3.4.10/
mkdir data
mkdir datalog
6.2.創建myid文件
echo 3 > data/myid
6.3.驗證myid值
cat data/myid

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

7.分別啓動三個master節點的zookeeper服務

master:
./bin/zkServer.sh start conf/zoo.cfg
master1:
./bin/zkServer.sh start conf/zoo.cfg
master2:
./bin/zkServer.sh start conf/zoo.cfg

8.查詢各節點zookeeper狀態(master主機爲Leader狀態、其他主機爲Follower狀態)

8.1.master:
./bin/zkServer.sh status

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

8.2.master1:
./bin/zkServer.sh status

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

8.3.master2:
./bin/zkServer.sh status

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

9.只在Master中部署Marathon

Marathon是一個Mesos框架,能夠支持運行長服務,比如web應用的等.

#下載
wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz

#解壓縮
tar zxvf marathon-0.15.2.tgz -C /home/q/

#進入maratchon目錄
cd /home/q/marathon-0.15.2/

10.啓動master節點的Marathon服務(IP:8080)

/home/q/marathon-0.15.2/bin/start --hostname 192.168.96.46 --master zk://192.168.96.46:2181,192.168.96.47:2181,192.168.96.48:2181/mesos

11. 訪問http://192.168.96.46:8080, 如下圖

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)


11.分別啓動三個master節點

master:
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0  --zk=zk://192.168.96.46:2181/mesos --quorum=2
master1:
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0  --zk=zk://192.168.96.47:2181/mesos --quorum=2
master2:
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0  --zk=zk://192.168.96.48:2181/mesos --quorum=2

12.分別啓動slave、slave1的slave服務

mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.96.46:2181,192.168.96.47:2181,192.168.96.48:2181/mesos --no-hostname_lookup --ip=0.0.0.0

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

訪問Mesos ,http://192.168.96.47:5050

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

使用Marathon創建測試任務test1

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

使用Marathon創建docker容器

通過Marathon API的形式創建Docker的Nginx任務

1.使用json創建任務

> vim nginx.json

{
"id":"/nginx",                              //ID名稱
"container":{
"type":"DOCKER",
"docker":{
"image":"nginx",                         //nginx鏡像
"network":"HOST",                     //網絡模式爲HOST
"parameters":[],
"privileged":false,
"forcePullImage":false                  //不強制更新鏡像
}
},
    "cpus":0.1,
    "mem":32.0,
    "instances":1
}

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

2.上傳nginx.json任務到Marathon

curl -X POST -H "Content-type:application/json" http://192.168.96.46:8080/v2/apps [email protected]

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

3.在slave1上查詢,可以查看到nginx正在下載

ps aux | grep docker

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

4.查看所有鏡像信息,已經在運行中了

docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS               NAMES
1140fbfdb9f6        nginx               "nginx -g 'daemon ..."   5 minutes ago       Up 5 minutes                                 mesos-a0b5fe43-dfab-4b7e-8a1f-df205371dffd-S0.0b72cb40-29e6-4d6b-a266-6f61c77f6951
a07783adf66d        docker.io/centos    "/bin/bash"              8 hours ago         Exited (0) 8 hours ago                       optimistic_austin
6dfc71a1c5bd        nginx               "nginx -g 'daemon ..."   8 hours ago         Created                                      ecstatic_euclid
f5df1d3fef2a        015566d5b844        "/bin/sh -c 'yum -..."   9 hours ago         Exited (1) 9 hours ago                       eloquent_davinci
02fb081e0119        015566d5b844        "/bin/sh -c 'yum -..."   9 hours ago         Exited (1) 9 hours ago                       confident_brahmagupta

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

5.訪問Mesos、Marathon管理平臺查看任務,如下

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)
【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)
【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

6.訪問測試 http://192.168.175.153/,nginx容器已經運行成功了

【親測】Marathon+Mesos+Zookeeper集羣平臺部署(實現多實例Docker)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章