注意,以下安裝過程均是在root下完成,如果是普通用戶,用sudo提權的方式安裝
一、環境
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 |
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、如果出現下面的界面,安裝成功
8、運行一個mesos任務來測試
MASTER=$(mesos-resolve `cat /etc/mesos/zk`) #<=====獲取主服務器的IP地址 mesos-execute --master=$MASTER --name="cluster-test"--command="sleep 60" #如果沒有發現任務在運行,可嘗試修改--name="cluster-test",這個名字可以隨意起
9、打開瀏覽器查看
至此環境已經搭建成功
二、測試,嘗試管理一個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
下面通過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、在瀏覽器中查看
但是我們可以發現,只能227這臺服務器來訪問這個端口,出現nginx頁面,用其他的IP地址顯然是不可以的.
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地址來訪問這個端口了。
參考鏈接:
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