centos7 安装配置mesos+marathon+zookeeper
2019獨角獸企業重金招聘Python工程師標準>>>
1,mesos介紹
Mesos誕生于UC Berkeley的一個研究項目,現已成為Apache Incubator中的項目。Mesos計算框架一個集群管理器,提供了有效的、跨分布式應用或框架的資源隔離和共享,可以運行Hadoop、MPI、Hypertable、Spark。使用ZooKeeper實現容錯復制,使用Linux Containers來隔離任務,支持多種資源計劃分配。
總體架構 Apache Mesos由四個組件組成,分別是Mesos-master,mesos-slave,framework和executor。
mesos中的基本術語解釋
(1)Mesos-master:
是整個系統的核心,負責管理接入mesos的各個framework(由frameworksmanager管理)和slave(由slavesmanager管理),并將slave上的資源按照某種策略分配給framework(由獨立插拔模塊Allocator管理)。
(2)Mesos-slave:
負責接收并執行來自mesos-master的命令、管理節點上的mesos-task,并為各個task分配資源。mesos-slave將自己的資源量發送給mesos-master,由mesos-master中的Allocator模塊決定將資源分配給哪個framework,當前考慮的資源有CPU和內存兩種,也就是說,mesos-slave會將CPU個數和內存量發送給mesos-master,而用戶提交作業時,需要指定每個任務需要的CPU個數和內存量,這樣,當任務運行時,mesos-slave會將任務放到包含固定資源的linux container中運行,以達到資源隔離的效果。
(3)Framework:
是指外部的計算框架,如Hadoop,Mesos等,這些計算框架可通過注冊的方式接入mesos,以便mesos進行統一管理和資源分配。Mesos要求可接入的框架必須有一個調度器模塊,該調度器負責框架內部的任務調度。當一個framework想要接入mesos時,需要修改自己的調度器,以便向mesos注冊,并獲取mesos分配給自己的資源, 這樣再由自己的調度器將這些資源分配給框架中的任務,也就是說,整個mesos系統采用了雙層調度框架:
(4)Executor:
執行器,安裝到mesos-slave上,用于啟動計算框架中的task。
2,安裝
2.1環境介紹
內核版本:
[root@localhost ~]# uname -a Linux localhost.localdomain 3.10.0-514.6.1.el7.x86_64 #1 SMP Wed Jan 18 13:06:36 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux系統版本:
[root@localhost ~]# more /etc/redhat-release CentOS Linux release 7.3.1611 (Core)docker版本:
[root@localhost ~]# docker --version Docker version 1.12.5, build 047e51b/1.12.5mesos版本:
root@localhost ~]# rpm -qa |grep mesos mesosphere-el-repo-7-1.noarch mesos-1.1.0-2.0.107.centos701406.x86_64 mesosphere-zookeeper-3.4.6-0.1.20141204175332.centos7.x86_64[root@localhost ~]# rpm -qa |grep marathon marathon-1.4.1-1.0.633.el7.x86_64集群服務器功能介紹:
10.1.13.214(master) mesos-master,marathon,zookeeper
10.1.13.211 (slave01)mesos-slave
10.1.13.213 (slave02)mesos-slave
由于mesos的master和slave節點之間是通過zookeeper進行關聯通信的,而且zookeeper建議master至少是三個節點,這里測試用一個也可以
2.2安裝前準備
所有服務器上設置
修改yum源,所有機器都要做
#mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.default #wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #yum makecache添加mesosphere源
#rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-3.noarch.rpm #rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mesosphere配置ssh免密碼登陸
關閉防火墻
#systemctl stop firewalld #systemctl disable firewalld關閉selinux
#vi /etc/selinux/config #SELINUX=enforcing #注釋掉 #SELINUXTYPE=targeted #注釋掉 SELINUX=disabled #增加#setenforce 0 命令行關閉selinux2.3 zookeeper安裝
只在10.1.13.214上安裝配置
java環境安裝配置
#wget http://download.oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.tar.gz #tar zxvf jdk-8u121-linux-x64.tar.gz #mkdir /usr/java #mv jdk1.8.0_121 /usr/java/zookeeper 安裝配置
安裝方法1
安裝 #wget http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz #tar zxvf zookeeper-3.4.9.tar.gz #mv zookeeper-3.4.9 /usr/local/ #mv /usr/local/zookeeper-3.4.9 /usr/local/zookeeper配置 #cd /usr/local/zookeeper #cp zoo_sample.cfg zoo.cfg #vi zoo.cfg dataDir=/usr/local/zookeeper/data #數據目錄,如果沒有需要新建此目錄 dataLogDir=/usr/local/zookeeper/logs #日志目錄,如果沒有需要新建此目錄如果是單機安裝配置zookeeper,以下配置可忽略 server.0=10.1.13.214:2888:3888 server.1=10.1.13.215:2888:3888 server.2=10.1.13.216:2888:3888集群模式需要添加以下 #vi /user/local/zookeeper/data/myid #創建myid文件,并編輯它,編輯的內容就是配置文件中server.后面跟著的號數。例如目前是在slave0機器上,則在myid文件中寫入0 0修改zookeeper輸出日志文件位置如果不做修改,默認zookeeper的日志輸出信息都打印到了zookeeper.out文件中,這樣輸出路徑和大小沒法控制,因為日志文件沒有輪轉。所以需要修改日志輸出方式。具體操作如下: 1、修改$ZOOKEEPER_HOME/bin目錄下的zkEnv.sh文件,ZOO_LOG_DIR指定想要輸出到哪個目錄,ZOO_LOG4J_PROP,指定INFO,ROLLINGFILE的日志APPENDER. 2、建立日志輸出文件夾 #mkdir -p /var/log/zookeeper #chmod 755 /var/log/zookeeper3,修改zkEnv.sh #vi /usr/local/zookeeper/bin/zkEnv.sh ...56 ZOO_LOG_DIR="/var/log/zookeeper" #指定想要輸出到哪個目錄 ...61 ZOO_LOG4J_PROP="INFO,ROLLINGFILE" #ROLLINGFILE的日志APPENDER. ... 4、修改$ZOOKEEPER_HOME/conf/log4j.properties文件的:zookeeper.root.logger的值與前一個文件的ZOO_LOG4J_PROP 保持一致,該日志配置是以日志文件大小輪轉的,如果想要按照天輪轉,可以修改為DaliyRollingFileAppender.5,修改log4j.properties # vim /usr/local/zookeeper/conf/log4j.properties ... 2 zookeeper.root.logger=INFO, ROLLINGFILE #值與前一個文件的ZOO_LOG4J_PROP ... 53 log4j.appender.TRACEFILE=org.apache.log4j.RollingFileAppender #如果想要按照天輪轉,可以修改為DaliyRollingFileAppender ...環境變量配置
#vi /etc/profile export ZOOKEEPER_HOME=/usr/local/zookeeper export JAVA_HOME=/usr/java/jdk1.8.0_121 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ZOOKEEPER_HOME/bin#source /etc/profile啟動 zookeeper 服務
#cd /user/local/zookeeper/bin #zkServer.sh start安裝方法2 (本文檔使用該方法)
#yum install mesosphere-zookeeper zookeeper啟動文件在/opt/mesosphere/zookeeper/bin下,配置文件在/etc/zookeeper/zoo.cfg配置同上2.4 mesos-master 配置
只在10.1.13.214上配置
安裝mesos-master
#yum install mesos配置mesos
[root@localhost ~]# cat /etc/mesos/zk zk://10.1.13.214:2181/mesos如果是多臺master+zookeeper
[root@localhost ~]# cat /etc/mesos/zk zk://10.1.13.214:2181/mesos,zk://10.1.13.214:2181/mesos,zk://10.1.13.214:2181/mesosecho 2 > /etc/mesos-master/quorum #如果有5要master+zookeeper #echo 4 > /etc/mesos-master/quorum 給每臺master起名字 master1: echo 10.1.13.214 | sudo tee /etc/mesos-master/hostname master2: echo 10.1.13.215 | sudo tee /etc/mesos-master/hostname master3: echo 10.1.13.216 | sudo tee /etc/mesos-master/hostname啟動master服務
#systemctl stop mesos-slave #systemctl restart mesos-master #systemctl status mesos-master #systemctl enable mesos-master服務啟動后,可以通過瀏覽器訪問查看系統信息: http://10.1.13.214:5050/
2.5 mesos-marathon安裝配置
Marathon 的其它重要特性還包括:
-
支持零停機時間部署,包括滾動部署、藍綠部署與金絲雀部署模式。
-
基于 HTTP、TCP 以及命令之應用程序運行狀態檢查。
-
指標發送與收集集成(包括 Graphite、DataDog 以及StatsD)。
-
具備一套強大的事件總線,使得 DevOps 人員以編程化方式通過定制化模式實現應用程序變更響應。
-
具備用于應對網絡與節點故障的彈性,且同時適用于 Marathon 本身及其管理的應用程序。
-
包括用戶認證以及基于角色訪問控制在內的多種安全功能。
-
采用一套靈活的插件架構,使得插件能夠被定制化集成至現有企業IT環境當中。
只在10.1.13.214上配置
安裝mesos-marathon
#yum install marathon配置mesos-marathon
創建下他的配置文件的路徑(yum裝的沒給我們創建)
#mkdir -p /etc/marathon/conf/ && touch hostname #echo 10.1.13.214 | sudo tee /etc/marathon/conf/hostname啟動服務,添加開機啟動
#systemctl start marathon #systemctl status marathon #systemctl enable marathon訪問驗證
http://10.1.13.214:8080
2.6 chronos安裝配置
chronos介紹
Chronos 是一個具備容錯特性的作業調度器,可處理依賴性和基于 ISO8601 的調度。Chronos 是由 Airbnb 公司推出的用來替代 cron 的開源產品。你可以用它來對作業進行編排,支持使用 Mesos 作為作業執行器,支持和 Hadoop 進行交互。可定義作業執行完成后的觸發器。支持任意長度的依賴鏈。
原理
chronos以framework身份接入Mesos,支持zookeeper選舉高可用,同時將所有的定時任務配置存儲在zookeeper里。
chronos的工作流程描述如下:
1,從zk獲取全部的任務列表。
2,以scheduler身份接入到mesos,分析任務的執行依賴。
3,分析出需要立即執行的任務和暫時不需要執行的任務。
4,將需要立即執行的任務放入執行隊列,等待mesos offer足夠的資源。
5,等待執行隊列中的一個任務被執行,再次回到步驟1。
只在10.1.13.214上配置
安裝chronos
#yum -y install chronos啟動服務,添加開機啟動
#systemctl start chronos #systemctl status chronos #systemctl enable chronos訪問驗證
http://10.1.13.214:4400
2.7 mesos-slave 安裝配置
在mesos-slave服務器上操作
mesos-slave服務器:
10.1.13.211
10.1.13.213
安裝mesos-slave
#yum install mesos配置實例
#touch /etc/mesos-slave/hostname #echo 10.1.13.211 | sudo tee /etc/mesos-slave/hostnameZooKeeper設定
# vi /etc/mesos/zk zk://10.1.13.214:2181/mesos客戶端端口設置
#echo 5051 > /etc/mesos-slave/port配置mesos-slave
注意:參數來containerizers的順序很重要。它指定選擇containerizer啟動任務時使用的優先級。 #echo 'docker,mesos' > /etc/mesos-slave/containerizersslave 執行超時時間 #echo '5mins' > /etc/mesos-slave/executor_registration_timeout啟動服務,添加開機啟動
#systemctl stop mesos-master #systemctl start docker #systemctl start mesos-slave #systemctl status mesos-slave #systemctl enable mesos-slave報錯日志查看命令
#journalctl -f -u mesos-slave2.8 mesos-dns安裝配置
mesos-dns介紹
Mesos-DNS用來支持Mesos集群上的服務發現,使運行在Mesos上的應用和服務可以通過域名服務器來發現彼此。你只要知道一個Mesos數據中心上運行的應用的名字,就可以通過Mesos-DNS查詢到該應用的IP和端口號。
Mesos-DNS定期去查詢Mesos master,監測所有framework上運行的所有任務,并生成這些任務的DNS記錄(包括A記錄和SRV記錄)。當Mesos集群上的任務發生啟動、結束、重啟等狀態變化時,Mesos-DNS都會更新DNS記錄,以保持最新的狀態。
Mesos-DNS不需要與framework交互,只需要在啟動的時候指向Mesos master即可。運行在Master Slave上的應用和服務,可以通過查詢Mesos-DNS來發現它們依賴的應用和服務的IP和端口號。
對于那些非Mesos任務的DNS解析請求,Mesos-DNS自己解析不了,通常使用一個擴展DNS服務器,將這些請求轉發到擴展DNS服務來解析即可。
slave上操作
mesos-dns安裝
Mesos-DNS不需要編譯安裝,從https://github.com/mesosphere/mesos-dns/releases直接獲取二進制文件即可
#mkdir /usr/local/mesos-dns #cd /usr/local/mesos-dns #curl -o mesos-dns https://github.com/mesosphere/mesos-dns/releases/download/v0.6.0/mesos-dns-v0.6.0-linux-amd64 #chmod +x mesos-dnsmesos-dns配置
編寫json配置文件,mesos-dns啟動時需要指定一個json的配置文件,這個配置文件里指定了Mesos master、域名等所需要的參數
#vim /usr/local/mesos-dns/config.json {"zk": "zk://10.1.13.214:2181/mesos", #單機"zk": "zk://10.1.13.214:2181,10.1.13.215:2181,10.1.13.216:2181/mesos", #單機"masters": ["10.1.13.214:5050"], #單機"masters": ["10.1.13.214:5050","10.1.13.215:5050","10.1.13.216:5050"], #多機"refreshSeconds": 60,"ttl": 60,"domain": "mesos","port": 53,"resolvers": ["8.8.8.8"],"timeout": 5, "httpon": true,"dnson": true,"httpport": 8123,"externalon": true,"listener": "10.1.13.211", #slave本機ip"SOAMname": "felix.mesos","SOARname": "admin.felix.mesos","SOARefresh": 60,"SOARetry": 600,"SOAExpire": 86400,"SOAMinttl": 60,"IPSources": ["netinfo", "mesos", "host"] }運行mesos-dns
使用命令行直接運行mesos-dns
#/usr/local/mesos-dns/mesos-dns -config=/usr/local/mesos-dns/config.json &使用marathon來運行mesos-dns
使用marathon來運行mesos-dns的好處是,即使在mesos-dns掛了之后也會立刻被重新運行。因為DNS服務器需要一個穩定的IP地址,所以通常將其指定在一個Mesos slave節點上運行。這里通過constraints字段來指定運行的slave的IP為10.1.13.213。在marathon上運行mesos-dns的json配置如下:
{"id": "/mesos-dns","cmd": "/usr/local/mesos-dns/mesos-dns -config=/usr/local/mesos-dns/config.json","cpus": 0.2,"mem": 128,"disk": 0,"instances": 1,"constraints": [["hostname","CLUSTER","10.1.13.213"]] }使用mesos-dns
指定mesos-dns為域名服務器 為了讓Mesos上運行的任務都使用mesos-dns作為主DNS服務器來解析,需要在Mesos slave節點的/etc/resolv.conf配置文件的第一行指定mesos-dns服務器為域名服務器。
[root@localhost ~]#sed -i '1s/^/nameserver 10.1.13.213\n/' /etc/resolv.confmesos-dns能解析的域名的格式
mesos-dns解析的域名格式為:應用名.框架名.mesos域
|構成項 |說明 |---------|------------------------------------------------------ |應用名 | marathon上運行的應用或任務的名字,如果該應用在分組里面,需要在應用|名后面接上”-組名”;另外,應用名字里面有點號的,需要替換成減號”-“ |框架名 | 我們采用的是marathon,這里的名字就為marathon |mesos域 | 這個是在mesos-dns的json配置文件里,domain字段定義的;默認為mesos例如,Mesos用的框架為marathon,在test分組里運行著名為test04的應用,則該應用將對應名為test04-test.marathon.mesos的域名
測試
格式:dig 應用名.框架名.mesos域 +short @mesos-dns所在節點IP
[root@localhost ~]# yum install bind-utils #安裝dig命令 [root@localhost ~]# dig test03.marathon.mesos +short @10.1.13.213 10.1.13.211 #test03沒有在分組中,@10.1.13.213是dig的參數,@mesos-dns所在節點IP [root@localhost ~]# dig test04-test.marathon.mesos +short 10.1.13.211注意,test03為marathon任務的name,test03這個任務要在marathon上運行,這里才能查到
mesos-dns HTTP API
Mesos-DNS提供了幾個簡單的REST API以供通過http方式來發現服務。 以上面mesos-dns在10.1.13.213為例,則有:
|URL |說明 |---------------------------------------------------------------- |http://10.1.13.213:8123/v1/version |mesos-dns版本信息 |http://10.1.13.213:8123/v1/config |mesos-dns配置信息 |http://10.1.13.213:8123/v1/hosts/{host} |該host的IP地址信息 |http://10.1.13.213:8123/v1/services/{service} |該service的host、IP、端口信息注意: host為mesos-dns能解析的域名,如:test04-test.marathon.mesos service為DNS SRV記錄名,如:test04-test.tcp.marathon.mesos
3. marathon+mesos的使用
3.1. mesos的使用
mesos安裝完成后,下面我們來運行第一mesos任務,注意刷新查看Mesos的Web界面,你會在Active Tasks看到我們測試的任務。
[root@linux-node1~]# MASTER=$(mesos-resolve `cat /etc/mesos/zk`) [root@linux-node1~]# mesos-execute --master=$MASTER --name="cluster-test"--command="sleep 60"注意,這時在marathon的web頁面上看不到這個任務的信息。
3.2. marathon的使用
參考:http://www.cnblogs.com/ee900222/p/docker_2.html
例1
1.用nc命令啟動一個http服務
在各個節點上安裝netcat
#yum install nmap-ncat2.在marathon頁面,點擊“create application”創建任務
ID:test01 CPUs:1 Memory(MIB):64 Disk Space(MIB):0 Instances:2 Command: while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Hello World" ) | nc -l $PORT; done3.點擊“Create”后,創建并執行任務
4.在Applications頁面,點擊任務,可以看到任務的詳細信息, 可以看到任務分布在兩個節點上,訪問HTTP服務啟動的端口
5.在各節點可以看到nc進程正啟動著
[root@localhost ~]# curl http://10.1.13.211:31699 Hello World測試證明如果將mesos-slave停了,nc的進程還是存在,端口還是可以訪問的。
mesos-contain,mesos-executo,nc三個進程是同時啟動的。
例2 docker測試
鏡像地址:https://hub.daocloud.io/
1,啟動docker,抓取centos鏡像
#docker pull daocloud.io/library/centos:latest2,創建json,等同于marathon上的"Create Application"
#vim marathon-test.json { "container": { "type": "DOCKER", "docker": { "image": "daocloud.io/library/centos" } }, "id": "centos-marathon", "instances": 2, "cpus": 0.5, "mem": 128, "uris": [], "cmd": "while sleep 10; do date -u +%T; done" }3,在marathon上創建任務
[root@bogon ~]# curl -X POST -H "Content-Type: application/json" http://10.1.13.214:8080/v2/app -d @marathon-test.json4,在Marathon頁面確認容器已經啟動
5,在Mesos頁面確認任務正在執行中
6,從stdout信息確認輸出的時間
7,在節點上確認容器已經啟動
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 374190c7ca4f daocloud.io/library/centos "/bin/sh -c 'while sl" About a minute ago Up About a minute mesos-8ae96fe5-3b2d-4767-8c5c-6998fe829c30-S11397.29937c70-8997-4ee8-b782-9273f41c082b8,查看容器的日志,確認輸出的時間
[root@localhost ~]# docker logs 374190c7ca4f 08:58:36 08:58:46 08:58:56 08:59:06 08:59:16 08:59:26 08:59:36 08:59:463.3. chronos的使用
例1
1.在Chronos頁面,點擊“New Job”創建任務
NAME:test1 COMMAND: sleep 60 SCHEDULE: R / 2017-03-03 T 07:05:00 Z / P T24H這里是UTC時間,計算方式: UTC = 本地時間(北京時間))-0800 例如,本地(北京)時間是0325 (凌晨3點25分),那么,UTC就是 0325 - 0800 = -0475,負號意味著是前一天, -0475 + 2400= 1925,既前一天的晚上7點25分。
2,創建完成,點擊任務欄上的“Force Run”
3,查看運行結果
可以在mesos界面中查看,定時任務的運行結果。
例2 docker的使用
1,啟動docker,抓取nginx鏡像
#docker pull daocloud.io/nginx #mkdir -p /data/content #vim /data/content/index.html test page [root@localhost ~]# docker run -p 8800:80 --name chronos-nginx -v /data/content:/usr/share/nginx/html:ro -d daocloud.io/nginx &[root@localhost ~]# curl http://10.1.13.213:8800 test page2,創建json
# vi chronos-test.json { "container": { "type": "DOCKER", "image": "daocloud.io/nginx", "network": "BRIDGE" }, "schedule": "R\/2017-03-06T09:25:00Z\/PT2M", "name": "chronos-nginx", "cpus": "0.5", "mem": "256", "uris": [], "command": "/usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf" }network": "BRIDGE",因為Docker默認的網絡模式是橋接,不指定默認也是BRIDGE
3,在Chronos上,創建任務
#curl -L -H "Content-Type: application/json" -X POST -d@chronos-test.json http://10.1.13.214:4400/scheduler/iso8601轉載于:https://my.oschina.net/duxuefeng/blog/854349
總結
以上是生活随笔為你收集整理的centos7 安装配置mesos+marathon+zookeeper的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Thinkphp3.2访问Url时去掉模
- 下一篇: Mysql 批量写入数据 性能优化