Apache Mesos是一個集羣管理器,可跨分佈式應用程序或框架提供有效的資源隔離和共享。它位於應用程序層和操做系統之間,能夠更加輕鬆地在大規模集羣環境中更有效地部署和管理應用程序。它能夠在動態共享節點池上運行許多應用程序
Apache Mesos將CPU,內存,存儲和其餘計算資源從機器(物理或虛擬)中抽象出來,使容錯和彈性分佈式系統可以輕鬆構建並有效運行。java
mesos的安裝要求是內核版本須在3.10以上python
uname -r //查看系統內核版本
setenforce 0 systemctl stop firewalld.service
主機名 | IP地址 | 安裝軟件 |
---|---|---|
master1 | 172.16.10.28 | jdk-8u14四、marathon-1.4.六、mesos-1.6.一、zookeeper-3.4.12 |
master2 | 172.16.10.44 | jdk-8u14四、mesos-1.6.一、zookeeper-3.4.12 |
master3 | 172.16.10.45 | jdk-8u14四、mesos-1.6.一、zookeeper-3.4.12 |
slave1 | 172.16.10.46 | jdk-8u14四、mesos-1.6.一、docker |
slave1 | 172.16.10.47 | jdk-8u14四、mesos-1.6.一、docker |
hostnamectl set-hostname master1 //分別修改虛擬機的主機名,一一對應,重啓生效 vim /etc/hosts 192.168.175.132 master 192.168.175.150 master1 192.168.175.151 master2 192.168.175.152 slave1 192.168.175.153 slave2 //全部虛擬機hosts文件內容一致
tar zxf jdk-8u144-linux-x64.tar.gz mv jdk1.8.0_144 /usr/local/java
vim /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 //刷新使環境變量生效
yum -y groupinstall "Development Tools"
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
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
vim /etc/yum.repo.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 yum update systemd -y
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 //刷新使環境變量當即生效
tar zxvf pip-1.5.4.tar.gz cd pip-1.5.4 python setup.py install
pip install pytz --upgrade //網絡很差容易失敗。
tar zxvf mesos-0.25.0.tar.gz -C /root //解壓軟件包 cd /root/mesos-0.25.0 mkdir build //構建配置 cd build ../configure make //編譯 make check //運行測試集 make install //安裝
由於在安裝apache mesos時耗時一個多小時,在配置羣集時都須要安裝此軟件,因此建議採用克隆虛擬機的方式減小用時。至此實驗所需的五臺服務器都安裝mesos軟件linux
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都需操做nginx
cd /home/q/zookeeper/conf mv zoo_sample.cfg zoo.cfg //模板和配置文件不能同時存在 vim zoo.cfg dataDir=/home/q/zookeeper/data dataLogDir=/home/q/zookeeper/datalog //手動建立/data /datalog目錄 server.1=172.16.10.28:2888:3888 server.2=172.16.10.44:2888:3888 server.3=172.16.10.45:2888:3888 //2888爲信息交互端口,3888爲選舉端口 cd /home/q/zookeeper mkdir data datalog //三臺master都需建立
此處建立的myid文件,對應的是在上述配置文件中server.一、server2……後對應的數字,三臺服務器對應修改,各不相同,一一對應。docker
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 //注意切換目錄 ./bin/zkServer.sh start conf/zoo.cfg //在三臺master都啓動該服務 ./bin/zkServer.sh status //查詢角色信息
當角色爲follower的zookeeper服務下線時,leader並不會從新選舉,可是當角色爲leader下線時,則會從新選舉,產生新的leader,則實現了集羣的故障轉移。apache
./bin/zkServer.sh start conf/zoo.cfg //注意腳本所在目錄
安裝完成zookeeper以後,zookeeper會選舉出leader幫助mesos選舉leader,肯定多master環境中,誰處於actived,又有哪些master是處於standby狀態。就是說,在接下來分派任務時,三臺master會去找zookeeper的leader詢問,誰是主,誰來負責分派任務,建議在生產環境中不要將zookeeper和mesos裝在同一臺服務器中,實驗環境,爲了節省虛擬機就裝在一塊兒。json
在開啓該服務以後,終端會被佔用,如果想在終端上繼續操做,則需開啓新終端進行操做。vim
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://172.16.10.28: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://172.16.10.44: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://172.16.10.45:2181/mesos --quorum=2 //在maseter3執行,地址爲master3地址
登錄網站以後,leader即選舉完成,不論你使用的是那個master的地址訪問,最終顯示的都是leader頁面,我在使用老版本作的時候發現,網頁是會跳轉的,可是新版本中改變了機制,可是實現的效果是一致的,即老是展現leader頁面。centos
關閉leader所在服務器的mesos服務,mesos會從新指定leader,接替進行工做
在兩臺slave中都安裝docker 並開啓
yum install docker -y systemctl start docker.service systemctl enable docker.service
啓動服務以後一樣會佔用終端,若繼續操做則需打開新終端,兩臺slave的開啓命令一致
mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://172.16.10.28:2181,172.16.10.44:2181,172.16.10.45:2181/mesos --no-hostname_lookup --ip=0.0.0.0
Marathon是一個mesos框架,可以支持運行長服務,本次實驗中,使用marathon向mesos發送任務。
Marathon特性:
在master1中安裝該服務
tar xf marathon-1.4.6.tgz -C /home/q mv /home/q/marathon-1.4.6/ /home/q/marathon cd /home/q/marathon/ ./bin/start --hostname 172.16.10.28 --master zk://172.16.10.28:2181,172.16.10.44:2181,172.16.10.45:2181/mesos --http_address 0.0.0.0 //開啓服務
在marathon上建立一個test任務,mesos會將任務分派給集羣中的代理來執行任務,任務會隨機發布給agent執行
在slave1上進行操做,建立一個json文件,執行安裝nginx
vim nginx.json //json文件建立在/目錄下 { "id":"/nginx", "container":{ "type":"DOCKER", "docker":{ "image":"nginx", "network":"HOST", "parameters":[], "privileged":false, "forcePullImage":false } }, "cpus":0.1, "mem":32.0, "instances":1 }
curl -X POST -H "Content-type:application/json" http://172.16.10.28:8080/v2/apps -d@nginx.json
ps aux | grep docker //終端查詢
當任務執行完成以後,便可使用分配執行任務的網址訪問nginx測試首頁