mesos,marathon,haproxy on centos7 最完美安裝教程


前言

本教程參考

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

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

官方文檔等...

系統:centos7

軟件包:RPM

mes架構

架構圖可以看出mesos主要兩部分主和從 ,集群依靠zookeeper

mesos運行流程

 

運行流程是,Agent1向 mesos master注冊,mesos master向Framework 1報告有哪些資源,Framework 1 告訴mesos master有兩個任務運行(taks1,task2) ,mesos master向

Agent 1提交任務執行。后面就按照這套邏輯循環.

安裝

一、環境

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

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

mesos-master,mesos-slave,marathon,

zookeeper,haproxy

mesos-node2 eth0:192.168.10.228 mesos-master,mesos-slave,marathon,zookeeper,haproxy
mesos-node3 eth0:192.168.10.229 mesos-master,mesos-slave,marathon,zookeeper,haproxy

 

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

3、關閉SELinux

【臨時】

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

【永久】

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

 

4、關閉防火牆

1
  systemctl stop firewalld

5、配置host解析

1
2
3
4
5
6
7
  [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

1
  yum  install  docker

2、啟動docker

1
  systemctl start docker.service

3、加入開機自啟動服務

1
  systemctl  enable  docker.service

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

1
usermod  -aG docker lcm

 

三 、部署zookeeper

1、安裝Java

1
yum  install  -y java

2、查看Java版本

1
2
3
4
5
   [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並安裝

1
2
3
4
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、創建軟連接,方便以后升級時用

1
ln  -s  /usr/local/zookeeper-3 .4.9/  /usr/local/zookeeper

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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目錄

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

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

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

8、啟動zookeeper

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

9、查看角色狀態

1
. /bin/zkServer .sh status

可以看到兩個follower,一個 leader

10、嘗試連接zookeeper

1
2
3
4
5
  . /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倉庫

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

2、安裝mesos和marathon

1
  yum -y  install  mesos marathon

3、增加zookeeper配置

1
2
3
  [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

1
2
3
4
5
  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開機自啟動並啟動

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

注意:此處我是復制的別人的,因l懶得寫了.這里的marathon是沒法啟動的,因為配置文件沒有指定mesos的 master和 zookeeper,

方法1:

打開vi /usr/lib/systemd/system/marathon.service

修改紅色部分,master后面填mesos節點,--zk參數和上面的一樣 zk://192.168.10.227:2181,192.168.10.228:2181,192.168.10.229:2181/meso,這里我用的單機測試,所以不一樣.

自己根據環境,做調整.

[Service]
Type=simple
WorkingDirectory=/usr/share/marathon
EnvironmentFile=/etc/default/marathon
ExecStart=/usr/share/marathon/bin/marathon --master 192.168.0.233:5050 --zk zk://192.168.0.233:2181/marathon

 方法2:

針對marathon1.5

vi /etc/default/marathon

MARATHON_MASTER=zk://192.168.0.233:2181/mesos

MARATHON_ZK=zk://192.168.0.233:2181/marathon

或者直連

MARATHON_MASTER=192.168.0.233:5050

 

這樣修改后,marathon就能啟動成功了。如果還是不行,查看 /var/log/message 日志.

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

1
  http: //192 .168.10.227:5050/

 

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

wKiom1i8sP3QTesGAACFtjrxen8284.png-wh_50

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

1
2
  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鏡像

1
  docker pull nginx

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

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

#配置超時(可選) echo '5mins' > /etc/mesos-slave/executor_registration_timeout

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

1
  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,注意紅色部分,根據自己環境修改,如果不明白,刪除紅色部分.紅色部分是指明在那台機器部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  [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容器

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

6、查看開啟的容器

1
2
3
  [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 Abo

7、在瀏覽器中查看

wKioL1i8wv_BjZ3gAAB18KOFm_w397.png-wh_50

wKioL1i8saDTsiD7AABbYVOygxI356.png-wh_50

 

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

wKioL1i8wMexOcTQAABQPm0k8JI833.png-wh_50

 

 

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

注意:marathon生成的外部端口是隨機的,在marathon的ui界面查看,或docker ps命令

四、服務發現和haproxy

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

 

1、安裝haproxy

1
  yum -y  install  haproxy

2、設置服務發現

1
2
3
4
  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

注意:

 上面是marathon1.5版本前的設置,

最新版設置方法

 

vi /etc/default/marathon

 

MARATHON_MASTER=zk://192.168.0.233:2181/mesos

 

MARATHON_ZK=zk://192.168.0.233:2181/marathon

 

 

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

1
2
3
4
5
6
  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、下載安裝腳本 haproxy-marathon-bridge

https://github.com/maricaantonacci/haproxy-marathon-bridge

5、添加執行權限

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

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

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

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

1
2
  systemctl start haproxy
  systemctl  enable  haproxy

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

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

 

9、查看nginx.json文件,注意紅色部分,上面有說明.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  [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 ~] #

 

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

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

 

wKiom1i8vwPiJlmvAABbtoDeXW0995.png-wh_50

11.通過haproxy的ui界面查看服務開放的狀態

總結

重啟電腦,需按照順序啟動, zookeeper  systemctl start mesos-master mesos-slave marathon  haproxy

 

有什么問題,留言吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM