軟件包
連接:https://pan.baidu.com/s/1TpEHLGkVX4-MNuIbHBaKng
提取碼:p3fg java
工具 | 特色 | 優點 |
---|---|---|
Apache Mesos | 須要獨立部署mesos-slave進程;依賴framework的功能能夠管理docker容器;成本高 | 由於通過了許多互聯網公司的大規模實踐,穩定性具備保障 |
Docker Swarm | Docker官方集羣管理工具,須要Docker daemon啓用tcp端口;Swarm的命令兼容Docker;學習成本很是低 | 公有云環境Machine和Swarm搭配使用效率更高 |
Google Kubernetes | 徹底Docker化的管理工具,功能迭代很是快;集羣管理能力比Mesos稍差 | 功能模塊集成度高 |
<br/>使用Mesos管理Docker<br/> <br/>Apache Mesos是一個集羣管理器,可跨分佈式應用程序或框架提供有效的資源隔離和共享。它位於應用程序層和操做系統之間,能夠更加輕鬆地在大規模集羣環境中更有效地部署和管理應用程序。它能夠在動態共享節點池上運行許多應用程序<br/>Apache Mesos將CPU,內存,存儲和其餘計算資源從機器(物理或虛擬)中抽象出來,使容錯和彈性分佈式系統可以輕鬆構建並有效運行。<br/>
python
<br/>
實驗環境:linux
master1 | 192.168.80.100 | jdk、marathon、mesos、zookeeper |
---|---|---|
master2 | 192.168.80.101 | jdk、mesos、zookeeper |
master3 | 192.168.80.102 | jdk、mesos、zookeeper |
slave1 | 192.168.80.103 | jdk、mesos、docker |
slave2 | 192.168.80.104 | jdk、mesos、docker |
Mesos是什麼呢,能夠用這樣一個例子進行說明。假定某公司須要頻繁進行大數據計算,該任務運行時須要N多個CPU和內存,爲了知足這個需求,有兩種方案: 1.使用小型服務器,爲任務提供足夠的資源。 2.採用分佈計算,即提供一批普通配置的機器,組成集羣,將計算任務拆分到各個機器上計算,而後彙總結果。 Mesos就是實現這類分佈式計算的框架,在分佈式計算過程當中,Mesos會對上述計算機資源進行管理和分配。 Marathon按照官方的說法是基於Mesos的私有PaaS,它實現了Mesos的Framework。Marathon實現了服務發現和負載平衡、爲部署提供REST API服務、受權和SSL、配置約束等功能。Marathon支持經過Shell命令和Docker部署應用。提供Web界面、支持cpu/mem、實例數等參數設置,支持單應用的Scale,但不支持複雜的集羣定義。Marathon可以支持運行長服務,好比Web應用等。Marathon可以原樣運行任何Linux二進制發佈版本,好比Tomcat Play等。 Mesos和Marathon的關係 若是將Mesos類比爲操做系統的內核,負責資源調度。則Marathon能夠類比爲服務管理系統,好比init,systemd或upstart等系統,用來管理應用的狀態信息。Marathon將應用程序部署爲長時間運行的Mesos任務。 ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。 這裏部屬的機器爲3個Master控制節點,2個slave運行節點,其中: zookeeper、Mesos-master、marathon運行在Master端;Mesos-slave和docker運行在Slave端;須要修改zk的內容來保證slave可以被發現和管理 構建環境 配置mesos-master(3臺master節點都要操做) hostnamectl set-hostname master1 hostnamectl set-hostname master2 hostnamectl set-hostname master3 hostnamectl set-hostname slave1 hostnamectl set-hostname slave2 vi /etc/hosts 192.168.80.100 master1 192.168.80.101 master2 192.168.80.102 master3 192.168.80.103 slave1 192.168.80.104 slave2 sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config setenforce 0 systemctl stop firewalld systemctl disable firewalld # 安裝mesos、marathon、zookeeper 一、部署java環境 tar xf jdk-8u144-linux-x64.tar.gz -C /opt cp -rv jdk1.8.0_144/ /usr/local/java vi /etc/profile //在文件末尾新增 export JAVA_HOME=/usr/local/java export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar source /etc/profile java -version yum groupinstall -y "Development Tools" #安裝開發工具 wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo #添加apache-maven#爲Mesos提供項目管理和構建自動化工具的支持 yum install -y apache-maven \ -- python-devel \ -- python-six \ -- python-virtualenv \ -- java-1.8.0-openjdk-devel \ -- zlib-devel \ -- libcurl-devel \ -- openssl-devel \ -- cyrus-sasl-devel \ -- apr-devel \ -- subversion-devel \ -- apr-util-devel \ -- cyrus-sasl-md5 vi /etc/yum.repos.d/wandisco-svn.repo #配置WANdiscoSVN網絡源 [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 yum update systemd -y 配置mesos環境變量: vi /etc/profile export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so source /etc/profile //刷新使環境變量當即生效 升級pytz: pytz:python的時區模塊 安裝pip: tar xf pip-1.5.4.tar.gz -C /opt cd /opt/pip-1.5.4 python setup.py install 升級pytz pip install pytz --upgrade //網絡很差容易失敗。 構建mesos tar xf mesos-0.25.0.tar.gz -C /opt //解壓軟件包 cd /opt/mesos-0.25.0 mkdir build //構建配置 cd build ../configure 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 make //編譯 make check //運行測試集 make install 編譯過程漫長 若是在配置的時候報錯: error: cannot find libsvn_subr-1 headers 解決方法: yum install -y subversion-devel 部署zookeeper集羣: 軟件安裝 mkdir /home/q tar zxvf zookeeper-3.4.6.tar.gz -C /home/q/ mv /home/q/zookeeper-3.4.6 /home/q/zookeeper 修改配置文件 三臺master都需操做 cd /home/q/zookeeper/conf mv zoo_sample.cfg zoo.cfg //模板和配置文件不能同時存在 vi zoo.cfg maxClientCnxns=50 #單個客戶端與單臺服務器之間的鏈接數的限制,是ip級別的,默認是50,若是設置爲0,那麼代表不做任何限制 tickTime=2000 #Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔 initLimit=10 #Zookeeper的Leader 接受客戶端(Follower)初始化鏈接時最長能忍受多少個心跳時間間隔數。 syncLimit=5 #表示 Leader 與 Follower 之間發送消息時請求和應答時間長度 clientPort=2181 #客戶端鏈接端口 dataDir=/home/q/zookeeper/data //zookeeper數據文件存放目錄 dataLogDir=/home/q/zookeeper/datalog //手動建立/data /datalog目錄 server.1=192.168.80.100:2888:3888 server.2=192.168.80.101:2888:3888 server.3=192.168.80.102:2888:3888 //2888爲信息交互端口,3888爲選舉端口 注: 以server.A=B:C:D: 格式定義各個節點相關信息,其中:A 是一個數字,表示第幾號服務器;B是這個服務器的IP地址;C爲與集羣中的Leader服務器交換信息的端口;D是在Leader掛掉時專門進行Leader選舉時所用的端口。 將修改好的配置文件傳輸給其餘master cd /home/q/zookeeper mkdir data datalog scp -r /home/q/zookeeper/ root@192.168.80.101:/home/q/ scp -r /home/q/zookeeper/ root@192.168.80.102:/home/q/ 建立myid文件 此處建立的myid文件,對應的是在上述配置文件中server.一、server2……後對應的數字,三臺服務器對應修改,各不相同,一一對應。 cd /home/q/zookeeper echo 1 > data/myid //在master1上操做(/home/q/zookeeper/中) echo 2 > data/myid //在master2上操做(/home/q/zookeeper/中) echo 3 > data/myid //在master3上操做(/home/q/zookeeper/中) 啓動服務 在三臺master服務器上安裝zookeeper軟件,而後啓動服務,在服務開啓完成以後就會開始選取leader,經過查看狀態便可獲取服務器的角色,**注意這裏選舉的leader只是zookeeper的leader,並非mesoso的leader。 cd /home/q/zookeeper //注意切換目錄 臨時修更名稱 echo master1 >/proc/sys/kernel/hostname echo master2 >/proc/sys/kernel/hostname echo master3 >/proc/sys/kernel/hostname echo slave1 >/proc/sys/kernel/hostname echo slave2 >/proc/sys/kernel/hostname ./bin/zkServer.sh start conf/zoo.cfg //在三臺master都啓動該服務 ./bin/zkServer.sh status //查詢角色信息 驗證單點故障 當角色爲follower的zookeeper服務下線時,leader並不會從新選舉,可是當角色爲leader下線時,則會從新選舉,產生新的leader,則實現了集羣的故障轉移。 ./bin/zkServer.sh start conf/zoo.cfg //注意腳本所在目錄 ./bin/zkServer.sh stop conf/zoo.cfg //關閉服務 ./bin/zkServer.sh status //查看狀態 follower——從 leader——主 部署mesos集羣 安裝完成zookeeper以後,zookeeper會選舉出leader幫助mesos選舉leader,肯定多master環境中,誰處於actived,又有哪些master是處於standby狀態。就是說,在接下來分派任務時,三臺master會去找zookeeper的leader詢問,誰是主,誰來負責分派任務,建議在生產環境中不要將zookeeper和mesos裝在同一臺服務器中,實驗環境,爲了節省虛擬機就裝在一塊兒。 建立master啓動命令軟鏈接 ln -sf /opt/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master 開啓mnesos-master服務 在開啓該服務以後,終端會被佔用,如果想在終端上繼續操做,則需開啓新終端進行操做。 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.80.100:2181/mesos --quorum=2 //在master1上執行,在編譯安裝完成以後,系統會自動識別該命令,不須要建立軟鏈接便可直接使用 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.80.101:2181/mesos --quorum=2 //在master2上執行 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.80.102:2181/mesos --quorum=2 //在maseter3執行,地址爲master3地址 說明: --work_dir 指定工做目錄 --log_dir 指定日誌生成位置 --no-hostname_lookup 不指定域名解析 --ip=0.0.0.0 任意網段都可訪問 網頁訪問 登錄網站以後,leader即選舉完成,不論你使用的是那個master的地址訪問,最終顯示的都是leader頁面,我在使用老版本作的時候發現,網頁是會跳轉的,可是新版本中改變了機制,可是實現的效果是一致的,即老是展現leader頁面。 在瀏覽器中輸入:ip地址:5050 驗證單點故障 關閉leader所在服務器的mesos服務,mesos會從新指定leader,接替進行工做 配置Mesos-slave 建立slave啓動命令軟鏈接 ln -sf /opt/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave 安裝docker,因爲slave須要接受master的調度執行容器運行,所以須要安裝docker 1.配置repo倉庫 cd /etc/yum.repos.d/ vi docker.repo [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg yum install docker -y systemctl start docker systemctl enable docker 啓動Mesos-slave服務 mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.80.100:2181,192.168.80.101:2181,192.168.80.102:2181/mesos --no-hostname_lookup --ip=0.0.0.0 訪問mesos網站 瀏覽器訪問ip:5050 點擊agents 在全部master上安裝marathon marathon軟件包不須要安裝,解壓後便可使用,全部master上安裝好marathon後,每臺啓動方式以下 每臺mastermarathon啓動hostname後面跟上本身ip以及zookeeper區域全部服務器ip tar xf marathon-0.15.2.tgz -C /home/q mv /home/q/marathon-0.15.2/ /home/q/marathon cd /home/q/marathon/ ./bin/start --hostname 192.168.80.100 --master zk://192.168.80.100:2181,192.168.80.101:2181,192.168.80.102:2181/mesos --http_address 0.0.0.0 ./bin/start --hostname 192.168.80.101 --master zk://192.168.80.100:2181,192.168.80.101:2181,192.168.80.102:2181/mesos --http_address 0.0.0.0 ./bin/start --hostname 192.168.80.102 --master zk://192.168.80.100:2181,192.168.80.101:2181,192.168.80.102:2181/mesos --http_address 0.0.0.0 測試 http://192.168.80.101:8080/ 在marathon上建立一個test任務,mesos會將任務分派給集羣中的代理來執行任務,任務會隨機發布給agent執行
建立成功之後在applications頁面能夠看到該任務
Marathon會自動註冊到Mesos中,能夠在Mesos web的Framework頁面中看到註冊信息。 ip:5050
能夠在Mesos Web首頁看到測試任務在不停的執行中
在節點slave主機查看任務的相關信息
刪除測試任務
使用Marathon API的形式添加新任務 在節點slave中操做 cd /root vi demo.json { "id":"basic-0", "cmd":"while [true]; do echo 'hello Marathon'; sleep 5; done", "cpus":0.1, "mem":10.0, "instances":1 } //查看Marathon網站有新添加任務 curl -X POST -H "Content-type:application/json" http://192.168.80.100:8080/v2/apps -d@demo.json 在網站頁面查看:
使用Mesos與Marathon建立Docker集羣 (1)在節點slave建立docker的nginx請求任務 cd /root vi 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 } //查看Marathon網站有新添加任務 curl -X POST -H "Content-type:application/json" http://192.168.80.100:8080/v2/apps -d@nginx.json (2)在Marathon頁面查看 能夠在建立的Nginxd任務下看到該任務發送給主機
(3)用命令行方式查看主機下載的docker鏡像 docker images 看有木有nginx鏡像 docker ps -a 看有木有運行容器 (4)訪問slave主機上運行着的Nginx服務 http:slave1ip地址