docker集羣

軟件包
鏈接:https://pan.baidu.com/s/1TpEHLGkVX4-MNuIbHBaKng
提取碼:p3fg

工具 特點 優勢
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/>  

docker集羣

  <br/>  
實驗環境:

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

 
1、部署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/ [email protected]:/home/q/
scp -r /home/q/zookeeper/ [email protected]:/home/q/
創建myid文件
此處創建的myid文件,對應的是在上述配置文件中server.1、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執行

![](https://s1.51cto.com/images/blog/201904/08/89560b91a1a44056ebf8b01779a20144.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

創建成功以後在applications頁面可以看到該任務

![](https://s1.51cto.com/images/blog/201904/08/f35cbf4262300784f88c6d58e9e732e2.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

Marathon會自動註冊到Mesos中,可以在Mesos web的Framework頁面中看到註冊信息。
ip:5050

![](https://s1.51cto.com/images/blog/201904/08/0b3b466042d2406d6e6237f9e2aa324a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

可以在Mesos Web首頁看到測試任務在不停的執行中

![](https://s1.51cto.com/images/blog/201904/08/cfbf67b474c4292c8a3a4324280ad107.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

 
在節點slave主機查看任務的相關信息

![](https://s1.51cto.com/images/blog/201904/08/4770b8301480be88dce392831929df7b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

 
刪除測試任務

![](https://s1.51cto.com/images/blog/201904/08/48ee3c097f3782a52c4164ce4c6a843f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

 
使用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 [email protected]
 
在網站頁面查看:

![](https://s1.51cto.com/images/blog/201904/08/ffb332a48d845f980aefcf300ad15703.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

 
使用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", //網絡爲docker集羣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 [email protected]
 
 
(2)在Marathon頁面查看
可以在創建的Nginxd任務下看到該任務發送給主機

![](https://s1.51cto.com/images/blog/201904/08/7167e41820273f4602f51f82106f1f8c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

(3)用命令行方式查看主機下載的docker鏡像
docker images
看有木有nginx鏡像
docker ps -a
看有木有運行容器
 
(4)訪問slave主機上運行着的Nginx服務
http:slave1ip地址

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