centos7中mesos+zookeeper+marathon安裝部署全過程


注意,以下安裝過程均是在root下完成,如果是普通用戶,用sudo提權的方式安裝


一、環境

1、配置三臺服務器,三個mesos-master節點,三個slave節點,我用測試IP

主機名IP地址所安裝的服務
mesos-node1eth0:192.168.10.227

mesos-master,mesos-slave,marathon,

zookeeper,haproxy

mesos-node2eth0:192.168.10.228mesos-master,mesos-slave,marathon,zookeeper,haproxy
mesos-node3eth0:192.168.10.229mesos-master,mesos-slave,marathon,zookeeper,haproxy



2、查看內核版本

 [root@mesos-node1 ~]# cat /etc/redhat-release 
 CentOS Linux release 7.2.1511 (Core) 
 [root@mesos-node1 ~]# uname  -r
 3.10.0-327.el7.x86_64
 [root@mesos-node1 ~]# uname  -a
 Linux mesos-node1 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
 [root@mesos-node1 ~]#


注意以下部分在三臺服務器上都要執行


3、關閉SELinux

【臨時】

 [root@mesos-node1 ~]]# setenforce 0 
 [root@mesos-node1 ~]]# getenforce
 Permissive

【永久】

 更改配置文件/etc/selinux/config 將SELINUX=enforcing修改爲SELINUX=disabled重啓生效,如果不想重啓就將上面臨時修改的也執行一次。


4、關閉防火牆

 systemctl stop firewalld

5、配置host解析

 [root@mesos-node1 ~]# cat /etc/hosts
 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
 192.168.10.227    mesos-node1  
 192.168.10.228    mesos-node2  
 192.168.10.229    mesos-node3  
 [root@mesos-node1 ~]#


二、部署docker

1、利用yum安裝docker

 yum install docker

2、啓動docker

 systemctl start docker.service

3、加入開機自啓動服務

 systemctl enable docker.service

4、創建docker用戶組,避免使用sudo

usermod -aG docker lcm


三 、部署zookeeper

1、安裝Java

yum install -y java

2、查看Java版本

  [root@mesos-node1 ~]# java -version
 openjdk version "1.8.0_121"    #<=====OpenJDK1.8
 OpenJDK Runtime Environment (build 1.8.0_121-b13)
 OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
 [root@mesos-node1 ~]#

3、進入源碼安裝目錄下載zookeeper穩定版3.4.9並安裝

cd /usr/local/src/
 wget http://mirrors.cnnic.cn/apache/zookeeper/stable/zookeeper-3.4.9.tar.gz
 tar xf zookeeper-3.4.9.tar.gz
 mv zookeeper-3.4.9 /usr/local/

4、創建軟連接,方便以後升級時用

ln -s /usr/local/zookeeper-3.4.9/ /usr/local/zookeeper

5、修改zookeeper配置文件,只修改一個,然後分發到其他兩臺上

cd /usr/local/zookeeper/conf
 mv zoo_sample.cfg zoo.cfg
 [root@mesos-node1 ~]# grep "^[a-z]" zoo.cfg
 tickTime=2000
 initLimit=10
 syncLimit=5
 dataDir=/usr/local/zookeeper/data
 dataLogDir=/usr/local/zookeeper/logs
 clientPort=2181
 server.1=mesos-node1:2888:3888
 server.2=mesos-node2:2888:3888
 server.3=mesos-node3:2888:3888
 [root@mesos-node1 ~]#

6、創建dataDir和dataLogDir目錄

 mkdir -p /usr/local/zookeeper/data /usr/local/zookeeper/logs

7、在三臺服務器上創建myid文件,裏面的數據要和配置文件裏面的server.後面的數字一樣,表示這是第幾臺服務器

 echo "1" >/usr/local/zookeeper/data/myid
 echo "2" >/usr/local/zookeeper/data/myid
 echo "3" >/usr/local/zookeeper/data/myid

8、啓動zookeeper

cd  /usr/local/zookeeper
  ./bin/zkServer.s start

9、查看角色狀態

./bin/zkServer.sh status

可以看到兩個follower,一個 leader

10、嘗試連接zookeeper

 ./bin/zkCli.sh   #<=====連接當前zookeeper
 ./bin/zkCli.sh  -server 192.168.10.228:2181  #<======連接遠程zookeeper
 [zk: 192.168.10.228:2181(CONNECTED) 0] ls /      #<======可以用ls /查看
 [zookeeper]
 [zk: 192.168.10.228:2181(CONNECTED) 1]

OK,zookeeper安裝成功,接下來安裝mesos


三、mesos+marathon集羣部署

1、安裝mesosphere倉庫

 rpm -ivh http://repos.mesosphere.com/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm

2、安裝mesos和marathon

 yum -y install mesos marathon

3、增加zookeeper配置

 [root@mesos-node1 ~]#  cat /etc/mesos/zk
 zk://192.168.10.227:2181,192.168.10.228:2181,192.168.10.229:2181/mesos
 [root@mesos-node1 ~]#

4、配置mesos-hostname

 echo 本地IP地址 | tee /etc/mesos-master/ip
 echo 本地IP地址 | tee /etc/mesos-master/hostname
 echo 本地IP地址 | tee /etc/mesos-slave/ip
 echo 本地IP地址 | tee /etc/mesos-slave/hostname
 echo 2 > /etc/mesos-master/quorum   #這個數字要大於安裝的master節點的總數的0.5倍,即一半

5、配置mesos-master slave marathon開機自啓動並啓動

 systemctl enable mesos-master mesos-slave marathon
 systemctl start mesos-master mesos-slave marathon

6、在瀏覽器打開任意一臺服務的mesos

 http://192.168.10.227:5050/

7、如果出現下面的界面,安裝成功

wKiom1i8sP3QTesGAACFtjrxen8284.png-wh_50

8、運行一個mesos任務來測試

 MASTER=$(mesos-resolve `cat /etc/mesos/zk`)   #<=====獲取主服務器的IP地址
 mesos-execute --master=$MASTER --name="cluster-test"--command="sleep 60"   #如果沒有發現任務在運行,可嘗試修改--name="cluster-test",這個名字可以隨意起

9、打開瀏覽器查看

  wKioL1i8sSmzk7ZmAAChws6YOnE128.png-wh_50

至此環境已經搭建成功

二、測試,嘗試管理一個docker鏡像

注意,以下內容沒有特別說明可在任意一臺服務上完成,我選擇在227


1、在docker中下載一個nginx鏡像

 docker pull nginx

2、在所有mesos-slave上增加配置參數,並重啓(這一步在三臺服務上面進行操作)

 echo 'docker,mesos' | tee /etc/mesos-slave/containerizers
 systemctl restart mesos-slave

3、在瀏覽器中打開marathon,默認端口8080

 http://192.168.10.227:8080

 wKiom1i8sU_QZxZVAAB5oCAaQXM059.png-wh_50

下面通過Mesos調度,使用marathon來創建一個nginx鏡像的Docker容器,Marathon啓動時會讀取/etc/mesos/zk配置文件,Marathon通過Zookeeper來找到Mesos Master。


4、創建nginx配置文件nginx.json

 [root@mesos-node1 ~]# cat nginx.json 
 {
 "id":"nginx",
 "cmd": null,
 "cpus":0.2,
 "mem":32.0,
 "instances": 1,
 "constraints": [["hostname",
 "UNIQUE",""]],
 "container": {
 "type":"DOCKER",
 "docker": {
 "image": "nginx",
 "network": "BRIDGE",
 "portMappings": [
 {"containerPort": 80,
 "hostPort": 0,"servicePort": 0,"protocol":
 "tcp" }
 ]
   }
     }
       }
 [root@mesos-node1 ~]#

5、利用curl的方式開啓nginx容器

 curl -X POST http://192.168.10.227:8080/v2/apps -d@/root/nginx.json -H "Content-type:application/json"

6、查看開啓的容器

 [root@mesos-node1 ~]# docker ps -a
 CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                            NAMES
 5175ef6c9dde        nginx               "nginx -g 'daemon off"   About a minute ago   Up About a minute   443/tcp, 0.0.0.0:31894->80/tcp   mesos-e0a9ccd0-e362-  4250-8c58-08b6ded0bb17-S2.e4635e6a-d25b-4c5b-a351-0756174acf28

7、在瀏覽器中查看

wKioL1i8wv_BjZ3gAAB18KOFm_w397.png-wh_50

wKioL1i8saDTsiD7AABbYVOygxI356.png-wh_50


但是我們可以發現,只能227這臺服務器來訪問這個端口,出現nginx頁面,用其他的IP地址顯然是不可以的.

wKioL1i8wMexOcTQAABQPm0k8JI833.png-wh_50



so,接下來我們就來配置服務發現,設置一個固定端口,實現讓每個IP地址都可以訪問到這個頁面。


四、服務發現和haproxy

以下操作在三臺服務上都有


1、安裝haproxy

 yum -y install haproxy

2、設置服務發現

 mkdir -p /etc/marathon/conf
 cp /etc/mesos/zk /etc/marathon/conf/master 
 cp /etc/marathon/conf/master /etc/marathon/conf/zk
 sed -i 's|mesos|marathon|g' /etc/marathon/conf/zk

3、設置文件/etc/haproxy-marathon-bridge/marathons

 mkdir /etc/haproxy-marathon-bridge/
 [root@mesos-node1 conf]# cat /etc/haproxy-marathon-bridge/marathons
 192.168.10.227:8080
 192.168.10.228:8080
 192.168.10.229:8080
 [root@mesos-node1 conf]#


4、下載安裝腳本

 wget https://github.com/draculavlad/SetUpMesosphereOnCentos7WithServiceDiscovery/blob/master/haproxy-marathon-bridge

5、添加執行權限

 chmod +x /etc/init.d/haproxy-marathon-bridge

6、通過 haproxy-marathon-bridge腳本從Marathon生成一個HAProxy配置在localhost:8080運行:

 ./haproxy-marathon-bridge 192.168.10.227:8080 > /etc/haproxy/haproxy.cfg

7、將haproxy加入開機自啓動並啓動

 systemctl start haproxy
 systemctl enable haproxy

8、開啓haproxy的定時任務,每一分鐘加入一次任務。

 /etc/init.d/haproxy-marathon-bridge install_cronjob

9、查看nginx.json文件

 [root@mesos-node1 ~]# cat nginx.json 
 {
 "id":"nginx",
 "cmd": null,
 "cpus":0.2,
 "mem":32.0,
 "instances": 1,
 "constraints": [["hostname",
 "UNIQUE",""]],
 "container": {
 "type":"DOCKER",
 "docker": {
 "image": "nginx",
 "network": "BRIDGE",
 "portMappings": [
 {"containerPort": 80,
 "hostPort": 0,"servicePort": 3030, "protocol":      #此處我設置了固定的端口,這個端口可以按照自己公司的要求來隨意設定。
 "tcp" }
 ]
   }
     }
       }
 [root@mesos-node1 ~]#


 
 
 再查看/etc/haproxy/haproxy.cfg文件

 [root@mesos-node1 ~]# cat /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
defaults
    mode                    tcp 
    log                     global
    option                  dontlognull
    option                  redispatch
    retries                 3
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout check           10s
    maxconn                 3000
frontend front-nginx-3030
 bind *:3030
 default_backend    back-nginx-3030
backend back-nginx-3030
 balance leastconn
  server nginx-1 192.168.10.227:31894 check
[root@mesos-node1 ~]#


可以看到服務發現自動生成了這個訪問端口,將它映射在隨機生成的端口上,至此我們就可以用任意一臺的IP地址來訪問這個端口了。


wKiom1i8vwPiJlmvAABbtoDeXW0995.png-wh_50







參考鏈接:

centos7中mesos+zookeeper+marathon安裝部署全過程:

http://11863547.blog.51cto.com/11853547/1903532 

基於mesos環境安裝chronos:

http://11863547.blog.51cto.com/11853547/1903889  

zookeeper+mesos+marathon+docker裏面的一些小功能實現:

http://11863547.blog.51cto.com/11853547/1904240 


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