Mesos是Apache下的開源分佈式資源管理框架,它被稱爲是分佈式系統的內核。Mesos可以在一樣的集羣機器上運行多種分佈式系統類型,更加動態有效率低共享資源。提供失敗偵測,任務發佈,任務跟蹤,任務監控,低層次資源管理和細粒度的資源共享,能夠擴展伸縮到數千個節點。Mesos已經被Twitter用來管理它們的數據中心。
Mesos中的基本術語解釋:java
1)Mesos-master:主要負責管理各個framework和slave,並將slave上的資源分配給各個framework
2)Mesos-slave:負責管理本節點上的各個mesos-task,好比:爲各個executor分配資源
3)Framework:計算框架,如:Hadoop,Spark等,經過MesosSchedulerDiver接入Mesos
4)Executor:執行器,安裝到mesos-slave上,用於啓動計算框架中的task。python
ZooKeeper是用來給集羣服務維護配置信息,域名服務,提供分佈式同步和提供組服務。全部這些類型的服務都使用某種形式的分佈式應用程序。ZooKeeper是一個分佈式的,開放源碼的協調服務,是的Chubby一個的實現,是Hadoop和Hbase的重要組件。linux
ZooKeeper角色:nginx
領導者(leader):領導者負責投票發起和決議,更新系統狀態
跟隨者(follwoer):follower用於接收客戶請求並向客戶端返回結果,在選主過程當中參與投票
觀察者:ObServer能夠接受客戶端鏈接,將寫請求轉發給leader節點,但ObServer不參加投票過程,只同步leader的狀態,ObServer的目的是爲了拓展系統,提升讀取速度。
客戶端:請求發起方web
ZooKeeper同步流程:docker
選完leader之後,zookeeper就進入狀態同步過程。
1)leader等待server鏈接;
2)Follower鏈接leader,將最大的zxid發送給leader;
3)Leader根據follower的zxid肯定同步點;
4)完成同步後通知follower 已經成爲uptodate狀態;
5)Follower收到uptodate消息後,又能夠從新接受client的請求進行服務了。apache
配置JAVA環境json
# cat /etc/redhat-release //查看Linux版本 # uname -r //查看內核版本(須要內核3.10以上) # tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/ # cd /usr/local/ # mv jdk1.8.0_91/ java # vim /etc/profile export JAVA_HOME=/usr/local/java export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
添加apache-maven源vim
# wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
配置WANdiscoSVN網絡源centos
# 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
配置Mesos環境變量
# vim /etc/profile export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so # source /etc/profile
添加依賴包
# 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
安裝開發工具
# yum groupinstall -y "Development Tools"
構建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/ # mv mesos-0.25.0/ /root/ # cd /root/mesos-0.25.0 # mkdir build # cd build # ../configure # make //等待時間長 且不能斷網 前面的環境包不能少 # make check # make install
因爲安裝時間太長 此處直接克隆四臺
Column 1 | Column 2 | Column 3 |
---|---|---|
master1 | 192.168.200.128 | jdk、mesos、zookeeper、marathon |
master2 | 192.168.200.137 | jdk、mesos、zookeeper、 |
master3 | 192.168.200.138 | jdk、mesos、zookeeper、 |
slave1 | 192.168.200.139 | jdk、mesos、zookeeper、docker |
slave2 | 192.168.200.140 | jdk、mesos、zookeeper、docker |
分別給主機命名
# hostnamectl set-hostname master1 (其餘四臺: maste二、 maste三、slave一、slave2) # bash # vim /etc/hosts (全部主機同步) 192.168.200.128 master1 192.168.200.137 master2 192.168.200.138 master3 192.168.200.139 slave1 192.168.200.140 slave2
全部master
# wget https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz # tar zxvf zookeeper-3.4.10.tar.gz -C /home/q/ # cd /home/q/zookeeper-3.4.10/ # mv conf/zoo_sample.cfg conf/zoo.cfg # ln -sf /root/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master //給啓動腳本添加環境變量
在master1中操做
# cd /home/q/zookeeper-3.4.10/conf # vim zoo.cfg dataDir=/home/q/zookeeper-3.4.10/data //修改zookeeper數據文件存放目錄 dataLogDir=/home/q/zookeeper-3.4.10/datalog //zookeeper日誌存放目錄 server.1=192.168.200.128:2888:3888 //數字1,2,3表示這個是第幾號服務器(是上面myid文件裏對應的數字);中間的是master主節點的ip地址 server.2=192.168.200.137:2888:3888 //第一個端口2888(這個端口能夠本身定義)表示的是這個服務器與集羣中的 Leader 服務器交換信息的端口 server.3=192.168.200.138:2888:3888 //第二個端口3888表示的是萬一集羣中的 Leader 服務器掛了,須要一個端口來從新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通訊的端口。 //把配置文件傳輸給其餘maste # scp zoo.cfg 192.168.200.137:/home/q/zookeeper-3.4.10/conf/ # scp zoo.cfg 192.168.200.138:/home/q/zookeeper-3.4.10/conf/
在master1主機上操做(/home/q/zookeeper-3.4.10/中)
# mkdir data datalog # echo 1 > data/myid # ./bin/zkServer.sh start conf/zoo.cfg //開啓zookeeper服務 # 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.200.128:2181/mesos --quorum=2 //啓動mesos
在master2主機上操做(/home/q/zookeeper-3.4.10/中)
# mkdir data datalog # echo 2 > data/myid # ./bin/zkServer.sh start conf/zoo.cfg //開啓服務 # 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.200.137:2181/mesos --quorum=2
在master3主機上操做(/home/q/zookeeper-3.4.10/中)
# mkdir data datalog # echo 3 > data/myid # ./bin/zkServer.sh start conf/zoo.cfg //開啓服務 # 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.200.138:2181/mesos --quorum=2
安裝docker而且啓動
# yum install docker -y # systemctl start docker.service # systemctl enable docker.service //開啓slave-mesos # ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave # mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.200.128:2181,192.168.200.137:2181,192.168.200.138:2181/mesos --no-hostname_lookup --ip=0.0.0.0
會自動跳轉到被指定爲leader的主機IP上去
# cd /home/q/zookeeper-3.4.10/ # ./bin/zkServer.sh status
Marathon是一個成熟的,輕量級的,擴展性很強的Apache Mesos的容器編排框架,它主要用來調度和運行常駐服務(long-running service),提供了友好的界面和Rest API來建立和管理應用。marathon是一個mesos框架,可以支持運行長服務,好比web應用等,它是集羣的分佈式Init.d,可以原樣運行任何Linux二進制發佈版本,如Tomcat Play等等,能夠集羣的多進程管理。也是一種私有的Pass,實現服務的發現,爲部署提供提供REST API服務,有受權和SSL、配置約束,經過HAProxy實現服務發現和負載平衡。
# wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz # tar zxvf marathon-0.15.2.tgz -C /home/q/ # cd /home/q/marathon-0.15.2/ # ./bin/start --hostname 192.168.200.128 --master zk://192.168.200.128:2181,192.168.200.137:2181,192.168.200.138:2181/mesos --http_address 0.0.0.0
測試
瀏覽器輸入:http://192.168.200.128:8080/
建立一個test的任務
而後去mesos網頁查看:http://192.168.200.128:5050/
能夠看到任務已經分配給slave1 和slave2
查看執行事件相關信息
# cd /home/q/mesos/data/slaves/7cc2e8e7-ad03-46a6-a38d-ae1b92c78319-S0/frameworks/d82f2603-f357-4025-9574-7c511c0f435e-0000/executors # cd test.f99a7592-a099-11e8-a6b5-52540011572d/runs/latest //標準錯誤和標準輸出信息 stderr stdout //查看輸出字符串 cat stdout ---------------顯示如下內容--------------------------- Registered executor on 192.168.200.138 Starting task test.f99a7592-a099-11e8-a6b5-52540011572d sh -c 'echo "hello world"' hello world Forked command at 3493 Command exited with status 0 (pid: 3493)
# vim nginx.json { "id":"/nginx", //應用的惟一ID "container":{ //marathon啓動docker格式 "type":"DOCKER", "docker":{ "image":"nginx", //nginx鏡像 "network":"HOST", //網絡爲HOST模式 "parameters":[], "privileged":false, "forcePullImage":false //是否強制更新鏡像 } }, "cpus":0.1, "mem":32.0, "instances":1 } # curl -X POST -H "Content-type:application/json" http://192.168.200.128:8080/v2/apps -d@nginx.json //發送json文件給marathon
下載完成後
輸入鏡像下載完成的slave 地址: 192.168.200.139