Apache Mesos是一個集羣管理器,可跨分佈式應用程序或框架提供有效的資源隔離和共享。它位於應用程序層和操作系統之間,可以更加輕鬆地在大規模集羣環境中更有效地部署和管理應用程序。它可以在動態共享節點池上運行許多應用程序
Apache Mesos將CPU,內存,存儲和其他計算資源從機器(物理或虛擬)中抽象出來,使容錯和彈性分佈式系統能夠輕鬆構建並有效運行。
環境準備
操作系統:CentOS-7-x86_64
內核版本:3.10.0-693.el7.x86_64
mesos的安裝要求是內核版本須在3.10以上
uname -r //查看系統內核版本
關閉虛擬機防火牆
setenforce 0
systemctl stop firewalld.service
虛擬機分配
主機名 | IP地址 | 安裝軟件 |
---|---|---|
master1 | 172.16.10.28 | jdk-8u144、marathon-1.4.6、mesos-1.6.1、zookeeper-3.4.12 |
master2 | 172.16.10.44 | jdk-8u144、mesos-1.6.1、zookeeper-3.4.12 |
master3 | 172.16.10.45 | jdk-8u144、mesos-1.6.1、zookeeper-3.4.12 |
slave1 | 172.16.10.46 | jdk-8u144、mesos-1.6.1、docker |
slave1 | 172.16.10.47 | jdk-8u144、mesos-1.6.1、docker |
虛擬機的hostname及hosts文件都需做修改
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文件內容一致
安裝Apache Mesos
配置Java環境
解壓、歸檔軟件包
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"
添加apache-maven源
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
配置WANdiscoSVN網絡源
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
配置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 //刷新使環境變量立即生效
升級pytz
安裝pip
tar zxvf pip-1.5.4.tar.gz
cd pip-1.5.4
python setup.py install
升級pytz
pip install pytz --upgrade //網絡不好容易失敗。
構建mesos
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軟件
部署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 //模板和配置文件不能同時存在
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文件
此處創建的myid文件,對應的是在上述配置文件中server.1、server2……後對應的數字,三臺服務器對應修改,各不相同,一一對應。
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,則實現了集羣的故障轉移。
./bin/zkServer.sh start conf/zoo.cfg //注意腳本所在目錄
部署mesos集羣
安裝完成zookeeper之後,zookeeper會選舉出leader幫助mesos選舉leader,確定多master環境中,誰處於actived,又有哪些master是處於standby狀態。就是說,在接下來分派任務時,三臺master會去找zookeeper的leader詢問,誰是主,誰來負責分派任務,建議在生產環境中不要將zookeeper和mesos裝在同一臺服務器中,實驗環境,爲了節省虛擬機就裝在一起。
開啓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://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頁面。
驗證單點故障
關閉leader所在服務器的mesos服務,mesos會重新指定leader,接替進行工作
開啓mesos-slave
安裝,啓用docker
在兩臺slave中都安裝docker 並開啓
yum install docker -y
systemctl start docker.service
systemctl enable docker.service
啓用mesos-slave
啓動服務之後同樣會佔用終端,若繼續操作則需打開新終端,兩臺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
訪問mesos網站
部署Marathon
Marathon是一個mesos框架,能夠支持運行長服務,本次實驗中,使用marathon向mesos發送任務。
Marathon特性:
- 高可用性。Marathon作爲主動/被動羣集運行,領導者選舉可以實現100%的正常運行時間。
- 多個容器運行時。Marathon擁有對Mesos容器(使用cgroups)和Docker的一流支持。
- 有狀態的應用。Marathon可以將持久存儲卷綁定到您的應用程序。您可以運行MySQL和Postgres等數據庫,並由Mesos佔用存儲空間。
- 美麗而強大的UI。
- 制約因素。這些允許例如每個機架,節點等僅放置應用程序的一個實例。
- 服務發現和負載平衡。幾種方法可用。
- 健康檢查。使用HTTP或TCP檢查評估應用程序的運行狀況。
- 活動訂閱。提供HTTP端點以接收通知 - 例如,與外部負載均衡器集成。
- 指標。以JSON格式在/ metrics查詢它們或將它們推送到諸如graphite,statsd和Datadog之類的系統。
- 完整的REST API,易於集成和編寫腳本
安裝,開啓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任務
在marathon上創建一個test任務,mesos會將任務分派給集羣中的代理來執行任務,任務會隨機發布給agent執行
創建docker任務
在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 [email protected]
查看任務執行情況
ps aux | grep docker //終端查詢
查看marathon網頁
查看mesos網頁
訪問nginx首頁
當任務執行完成之後,即可使用分配執行任務的網址訪問nginx測試首頁