使用Mesos管理Docker(Mesos+Marathon+Docker)

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都需創建

使用Mesos管理Docker(Mesos+Marathon+Docker)

創建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管理Docker(Mesos+Marathon+Docker)
使用Mesos管理Docker(Mesos+Marathon+Docker)

部署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頁面。
使用Mesos管理Docker(Mesos+Marathon+Docker)
使用Mesos管理Docker(Mesos+Marathon+Docker)

驗證單點故障

關閉leader所在服務器的mesos服務,mesos會重新指定leader,接替進行工作
使用Mesos管理Docker(Mesos+Marathon+Docker)

開啓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網站

使用Mesos管理Docker(Mesos+Marathon+Docker)

部署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執行
使用Mesos管理Docker(Mesos+Marathon+Docker)
使用Mesos管理Docker(Mesos+Marathon+Docker)

創建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]

使用Mesos管理Docker(Mesos+Marathon+Docker)

查看任務執行情況

ps aux | grep docker    //終端查詢

使用Mesos管理Docker(Mesos+Marathon+Docker)

查看marathon網頁

使用Mesos管理Docker(Mesos+Marathon+Docker)

查看mesos網頁

使用Mesos管理Docker(Mesos+Marathon+Docker)

訪問nginx首頁

當任務執行完成之後,即可使用分配執行任務的網址訪問nginx測試首頁
使用Mesos管理Docker(Mesos+Marathon+Docker)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章