1. 程式人生 > >在CentOS7上部署Apache Mesos

在CentOS7上部署Apache Mesos

jdk 設計 建議 The container mark 一致性 md5 接收

概述

Apache Mesos是一款基於多資源(內存、磁盤、CPU、端口等)調度的開源集群管理套件,能使容錯和分布式系統更加容易。

工作原理

Apache Mesos采用了Master/Slave結構來簡化設計,將Master做得盡可能輕量級,僅保存了各種計算框架(Framework)和Mesos Slave的狀態信息,這些狀態很容易在Mesos出現故障的時候被重構,除此之外Mesos還可以使用Zookeeper解決Master單點故障問題。

Mesos Master充當全局資源調度器角色,采用某種策略算法將某個Slave上的 空閑資源分配給某個Framework,而各種Framework則是通過自己的調度器向Master註冊進行接入。Mesos Master則是收集任務狀態和啟動各個Framework的Executor。工作原理如圖所示:

技術分享圖片

Apache Mesos基本術語

  • Mesos master:負責管理各個Framework和Slave,並將Slave上的資源分配給各個Framework。
  • Mesos Slave:負責管理本節點上的各個Mesos Task,為各個Executor分配資源。
  • Framework:計算框架,如:Hadoop、Spark等,可以通過MesosSchedulerDiver接入。
  • Executor:執行器,在Master Slave上安裝,用於啟動計算框架中的Task。

實驗要求

1.必須使用CentOS7系統,需要內核為3.10及以上

2.虛擬機內存必須是2GB及以上

實驗環境表

主機名 IP地址 安裝軟件包
master 192.168.126.156 mesos-0.25.0.tar.gz;jdk-8u91-linux-x64.tar.gz
slave 192.168.126.160 mesos-0.25.0.tar.gz;jdk-8u91-linux-x64.tar.gz; docker

安裝步驟

1.配置Java環境

[root@localhost ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/  #解包
[root@localhost ~]# cd /usr/local/
[root@localhost ~]# mv jdk1.8.0_91/ java   #重命名
[root@localhost ~]# 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
[root@localhost ~]# source /etc/profile

2.安裝相關環境

1)安裝開發工具

[root@localhost ~]# yum groupinstall -y "Development Tools"

2)添加apache-maven源,為Mesos提供項目管理和構建自動化工具的支持。

[root@localhost ~]# wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

3)安裝相關依賴包

[root@localhost ~]# 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

4)配置WANdiscoSVN網絡源

[root@localhost ~]# 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

3.配置Mesos環境變量

[root@localhost ~]# vim /etc/profile
在行尾添加以下內容
export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so
[root@localhost ~]# source /etc/profile

4.構建Mesos

這裏使用源編碼方式編譯安裝Mesos

[root@localhost ~]# wget http://www.apache.org/dist/mesos/0.25.0/mesos-0.25.0.tar.gz
[root@localhost ~]# tar zxvf mesos-0.25.0.tar.gz -C /opt/
[root@localhost ~]# cd /opt/mesos-0.25.0/
[root@localhost ~]# mkdir build
[root@localhost ~]# cd build/
[root@localhost ~]# ../configure   
[root@localhost ~]# make   #等待時間較長(網絡在線狀態)
[root@localhost ~]# make install 

安裝Mesos時間較長,故實驗環境安裝一臺Mesos後其余克隆即可。

配置單臺Mesos-Master與Mesos-Slave

1.配置Mesos-master

1)Mesos-master負責維護slave集群的心跳,從slave提取資源信息。配置之前應先做好相應的解析工作。

[root@localhost ~]# hostnamectl set-hostname master  #更改主機名稱為master
[root@localhost ~]# init 6   #重啟虛擬機
[root@master ~]# vim /etc/hosts  
192.168.126.156  master
192.168.126.160 slave

[root@master ~]# ln -sf /root/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master  #建立軟鏈接

2)簡配啟動Mesos-master

[root@master ~]# mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 

減配參數:
--work_dir :運行期數據存放路徑,包含了sandbox、slave、meta等信息,建議修改。

--log_dir  :Mesos日誌存放路徑,建議修改。

--no-hostname_lookup :是否從DNS獲取主機名,本例中關閉了此配置,直接顯示IP。

--ip :Mesos進程綁定的IP。

3)配置完成後可以使用瀏覽器訪問本地的5050端口進行驗證,如圖1所示:
技術分享圖片

2.配置Mesos-Slave

1)Mesos-Slave負責接收並執行來自Mesos-master傳遞的任務以及監控任務狀態,收集任務使用系統的情況,配置之前也應先做好相應的解析工作。

[root@localhost ~]# hostnamectl set-hostname slave  #更改主機名稱為master
[root@localhost ~]# init 6   #重啟虛擬機
[root@master ~]# vim /etc/hosts  
192.168.126.156  master
192.168.126.160 slave

[root@slave ~]# ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave   #建立軟鏈接

2)在Mesos-Slave端安裝並啟動Docker容器

[root@slave ~]# yum install docker -y
[root@slave ~]# systemctl start docker.service
[root@slave ~]# systemctl enable docker.service

3)簡配啟動Mesos-Slave

[root@slave ~]# mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=192.168.126.156:5050 --no-hostname_lookup --ip=0.0.0.0

4)關閉Mesos-master防火墻後使用瀏覽器再次對Master的5050端口進行驗證,在Mesos Web頁面左側可以看到Slave的狀態,如圖1.1所示:
技術分享圖片

5)點擊菜單欄中的Slaves鏈接,可以查看到Slave主機的硬件信息與註冊時間,如圖1.2所示:
技術分享圖片

3.單臺Mesos-master配置ZooKeeper

ZooKeeper是 一個開源的分布式應用程序協調服務,可以為分布式應用提供一致性服務軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。

ZooKeeper的目的就是將復雜易出錯的關鍵服務進行封裝,提供給用戶性能高效、功能穩定、簡單易用的系統。

1)下載ZooKeeper後,只需要將配置文件模板進行改名即可使用。

[root@master ~]# wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
[root@master ~]# tar zxvf zookeeper-3.4.6.tar.gz -C /home/q/
[root@master ~]# cd /home/q/zookeeper-3.4.6/
[root@master zookeeper-3.4.6]# mv conf/zoo_sample.cfg conf/zoo.cfg

2)啟動ZooKeeper服務

[root@master zookeeper-3.4.6]# ./bin/zkServer.sh start conf/zoo.cfg 
JMX enabled by default
Using config: conf/zoo.cfg
Starting zookeeper ... STARTED

3)單機模式的ZooKeeper處於standalone狀態

[root@master zookeeper-3.4.6]# ./bin/zkServer.sh status conf/zoo.cfg 
JMX enabled by default
Using config: conf/zoo.cfg
Mode: standalone

4)在ZooKeeper服務啟動以後,就可以使用ZooKeeper的客戶端來連接測試。

[root@master zookeeper-3.4.6]# ./bin/zkCli.sh 
Connecting to localhost:2181
2018-08-15 22:16:03,625 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT
2018-08-15 22:16:03,631 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=master
.....//省略

[zk: localhost:2181(CONNECTED) 1] ls /     #查看根節點
[zookeeper]

4.後臺運行Mesos-master與Mesos-slave

ZooKeeper簡稱為zk,在整個Apache Mesos中,主要用來存儲Mesos-master地址,方便Mesos-slave讀取。當Mesos-slave從zk中獲取地址後,可直接使用Mesos-master地址以及端口連接Mesos-master。

1)nohup命令可以忽略所有掛斷(SIGHUP)信號,作為後臺程序運行Mesos-master與Mesos-slave。

[root@master ~]# nohup 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.126.163:2181/mesos --quorum=1 &>/dev/null &
[1] 3272
配置參數:
--zk :ZooKeeper地址,用於Leader選舉。指定zk端口號

--zk_session_timeout :根據網絡環境調整zk session超時時間(默認10s)。

--quorum :Master replica logs多寫數量,多Master場景下此值要超過Master數量的一半。

--credential :提供密鑰對,介入集群時用於驗證。

2)此時,Mesos-slave使用zk地址和端口號連接Mesos-master。

[root@slave ~]# nohup mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs--master=zk://192.168.126.163:2181/mesos --no-hostname_lookup --ip=0.0.0.0 &>/dev/null &
[1] 3996

3)使用瀏覽器進行驗證,如圖1.3所示:
技術分享圖片

在CentOS7上部署Apache Mesos