docker集群——搭建Mesos+Zookeeper+Marathon的Docker管理平台


服務器架構

機器信息:

這里部屬的機器為3個Master控制節點,3個slave運行節點,其中:

zookeeper、Mesos-master、marathon運行在Master端;Mesos-slave和docker運行在Slave端;需要修改zk的內容來保證slave能夠被發現和管理

構建環境

配置mesos-master(3台master節點都要操作)

# 關閉selinux
[root@master-1 ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
[root@master-1 ~]# setenforce 0

# 關閉防火牆
[root@master-1 ~]# systemctl stop firewalld.servic
[root@master-1 ~]# systemctl disable firewalld.service

# 添加mesos的yum源
[root@master-1 ~]# rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-2.noarch.rpm

# 安裝mesos、marathon、zookeeper
#安裝依賴的JDK環境
[root@master-1 ~]# yum install -y java-1.8.0-openjdk-devel java-1.8.0-openjdk       
[root@master-1 ~]# yum -y install mesos marathon mesosphere-zookeeper

# 配置zookeeper
# 設置文件/var/lib/zookeeper/myid為當前mesos-master節點的id,id必須為1-255中的整數
# master-1機器id為"1"
[root@master-1 ~]# echo 1 > /var/lib/zookeeper/myid

# master-2機器id為"2"
[root@master-2 ~]# echo 2 > /var/lib/zookeeper/myid

# master-3機器id為"3"
[root@master-3 ~]# echo 3 > /var/lib/zookeeper/myid

# 修改zookeeper配置文件
[root@master-1 ~]# cp /etc/zookeeper/conf/zoo.cfg /etc/zookeeper/conf/zoo.cfg.bak
[root@master-1 ~]# vim /etc/zookeeper/conf/zoo.cfg
# 單個客戶端與單台服務器之間的連接數的限制,是ip級別的,默認是50,如果設置為0,那么表明不作任何限制。請注意這個限制的使用范圍,僅僅是單台客戶端機器與單台ZK服務器之間的連接數限制,不是針對指定客戶端IP,也不是ZK集群的連接數限制,也不是單台ZK對所有客戶端的連接數限制。
maxClientCnxns=50
# Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳
tickTime=2000
# Zookeeper的Leader 接受客戶端(Follower)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 5個心跳的時間(也就是tickTime)長度后 Zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是 5*2000=10 秒
initLimit=10
# 表示 Leader 與 Follower 之間發送消息時請求和應答時間長度,最長不能超過多少個tickTime 的時間長度,總的時間長度就是 2*2000=4 秒
syncLimit=5   
# zookeeper數據文件存放目錄                       
dataDir=/var/lib/zookeeper   
# 客戶端連接端口         
clientPort=2181                
# 數字1,2,3表示這個是第幾號服務器(是上面myid文件里對應的數字);中間的是master主節點的ip地址
# 第一個端口2888(這個端口可以自己定義)表示的是這個服務器與集群中的 Leader 服務器交換信息的端口
# 第二個端口3888表示的是萬一集群中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通信的端口。       
server.1= 192.168.93.133:2888:3888
server.2= 192.168.93.134:2888:3888
server.3= 192.168.93.135:2888:3888    

[root@master-1 ~]# vim /etc/mesos/zk 
zk://192.168.93.133:2181,192.168.93.134:2181,192.168.93.135:2181/mesos

# 設置文件/etc/master-/quorum內容為一個大於(master節點數除以2)的整數。即采用四舍五入,比如這里有3個master節點,那么3/2=1.5,四舍五入為2
[root@master-1 ~]# echo 2 >/etc/mesos-master/quorum
[root@master-1 ~]# cat /etc/mesos-master/quorum
2

# 配置mesos和marathon
# 主機名和ip要在hosts中寫入,最好不要使用localhost,否則會出現slave不能識別,以及marathon任務下發不正常等現象。
     
# master-1機器
[root@master-1 ~]# mkdir -p /etc/marathon/conf
[root@master-1 ~]# echo 192.168.93.133  > /etc/mesos-master/hostname
[root@master-1 ~]# echo 192.168.93.133 > /etc/marathon/conf/hostname
[root@master-1 ~]# hostnamectl --static set-hostname master-1.com
[root@master-1 ~]# echo "192.168.93.133 master-1 master-1.com" >/etc/hosts
[root@master-1 ~]# cat /etc/hosts
192.168.93.133 master-1 master-1.com
     
# master-2機器
[root@master-2 ~]# mkdir -p /etc/marathon/conf
[root@master-2 ~]# echo 192.168.93.134  > /etc/mesos-master/hostname
[root@master-2 ~]# echo 192.168.93.134 > /etc/marathon/conf/hostname
[root@master-2 ~]# hostnamectl --static set-hostname master-2.com
[root@master-2 ~]# echo "192.168.93.134 master-2 master-2.com" >/etc/hosts
[root@master-2 ~]# cat /etc/hosts
192.168.93.134 master-2 master-2.com
     
# master-3機器
[root@master-3 ~]# mkdir -p /etc/marathon/conf
[root@master-3 ~]# echo 192.168.93.135  > /etc/mesos-master/hostname
[root@master-3 ~]# echo 192.168.93.135 > /etc/marathon/conf/hostname
[root@master-3 ~]# hostnamectl --static set-hostname master-3.com
[root@master-3 ~]# echo "192.168.93.135 master-3 master-3.com" >/etc/hosts
[root@master-3 ~]# cat /etc/hosts
192.168.93.135 master-3 master-3.com
     
[root@master-1 ~]# cp  /etc/mesos/zk   /etc/marathon/conf/master
[root@master-1 ~]# cp  /etc/mesos/zk   /etc/marathon/conf/zk
[root@master-1 ~]# sed -i  's|mesos|marathon|g'   /etc/marathon/conf/zk
     
# 啟動mesos,marathon,zookeeper
[root@master-1 ~]# systemctl enable zookeeper && systemctl enable mesos-master && systemctl enable marathon
[root@master-1 ~]# systemctl start zookeeper && systemctl start mesos-master && systemctl start marathon
[root@master-1 ~]# systemctl disable mesos-slave
     
# 查看進程狀態
[root@master-1 ~]# systemctl status zookeeper
[root@master-1 ~]# systemctl status mesos-master
[root@master-1 ~]# systemctl status marathon
     
[root@master-1 ~]# lsof -i:2181
[root@master-1 ~]# lsof -i:5050
[root@master-1 ~]# lsof -i:8080
     
# 檢查配置
#配置過程中出錯,為了方便檢查對比各master配置,直接執行如下命令。
[root@master-1 ~]# cat /var/lib/zookeeper/myid && grep -v "^#" /etc/zookeeper/conf/zoo.cfg && cat /etc/mesos/zk && cat /etc/mesos-master/quorum && cat /etc/mesos-master/hostname&& cat /etc/marathon/conf/hostname&& cat /etc/marathon/conf/master&&cat /etc/marathon/conf/zk
1
maxClientCnxns=50
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
server.1= 192.168.93.133:2888:3888
server.2= 192.168.93.134:2888:3888
server.3= 192.168.93.135:2888:3888
zk://192.168.93.133:2181,192.168.93.134:2181,192.168.93.135:2181/mesos
2
192.168.93.133
192.168.93.133
zk://192.168.93.133:2181,192.168.93.134:2181,192.168.93.135:2181/mesos
zk://192.168.93.133:2181,192.168.93.134:2181,192.168.93.135:2181/marathon

# 以上操作后,master節點機不能ping通外網,是因為DNS解析文件被改變了,執行下面命令即可:
[root@master-1 local]# echo "nameserver 114.114.114.114" >> /etc/resolv.conf
[root@master-1 ~]# ping www.baidu.com
PING www.a.shifen.com (180.97.33.108) 56(84) bytes of data.
64 bytes from 180.97.33.108 (180.97.33.108): icmp_seq=1 ttl=128 time=13.1 ms
...

配置slave節點(3台slave節點都要操作)

# 關閉selinux
[root@slave-1 ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
[root@slave-1 ~]# setenforce 0

# 關閉防火牆
[root@slave-1 ~]# systemctl stop firewalld.servic
[root@slave-1 ~]# systemctl disable firewalld.service

# 安裝並啟動docker
[root@slave-1 ~]# yum install -y docker
[root@slave-1 ~]# systemctl enable docker
[root@slave-1 ~]# systemctl start docker

# 拉取鏡像(三台slave節點機都需要下載鏡像,因為在marathon界面里創建docker容器,是隨機在slave節點機上讀取鏡像創建的)
[root@slave-1 ~]# docker pull nginx
[root@slave-1 ~]# docker pull tomcat
[root@slave-1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx     latest              2f7f7bce8929        6 days ago          107.5 MB
docker.io/tomcat    latest              a2fbbcebd67e        11 days ago         333.9 MB

# 添加mesos的yum源
[root@slave-1 ~]# rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-2.noarch.rpm

# 安裝mesos
[root@slave-1 ~]# yum -y install mesos

# 配置master信息
# slave-1機器
[root@slave-1 ~]# echo 192.168.93.136 > /etc/mesos-slave/hostname
[root@slave-1 ~]# hostnamectl --static set-hostname slave-1.com
[root@slave-1 ~]# echo "192.168.93.136 slave-1 slave-1.com" >/etc/hosts
[root@slave-1 ~]# cat /etc/hosts
192.168.93.136 slave-1 slave-1.com

# slave-2機器
[root@slave-2 ~]# echo 192.168.93.137 > /etc/mesos-slave/hostname
[root@slave-2 ~]# hostnamectl --static set-hostname slave-2.com
[root@slave-2 ~]# echo "192.168.93.137 slave-2 slave-1.com" >/etc/hosts
[root@slave-2 ~]# cat /etc/hosts
192.168.93.137 slave-2 slave-2.com

# slave-3機器
[root@slave-3 ~]# echo 192.168.93.138 > /etc/mesos-slave/hostname
[root@slave-3 ~]# hostnamectl --static set-hostname slave-3.com
[root@slave-3 ~]# echo "192.168.93.138 slave-3 slave-1.com" >/etc/hosts
[root@slave-3 ~]# cat /etc/hosts
192.168.93.138 slave-3 slave-3.com

[root@slave-1 ~]# cat /etc/mesos/zk 
zk://192.168.93.133:2181,192.168.93.134:2181,192.168.93.135:2181/mesos

# 配置marathon調用mesos運行docker容器
[root@slave-1 ~]# echo 'docker,mesos' > /etc/mesos-slave/containerizers

#啟動slave(要保證mesos-slave啟動后,讀取的zk信息是那三個mesos-master的連接信息,否則mesos訪問頁面里就不會出現這個slave節點信息。ps -ef|grep mesos-slave,如果沒有讀取到zk信息,可以嘗試重啟服務器再查看)
[root@slave-1 ~]# systemctl start mesos-slave && systemctl enable mesos-slave
[root@slave-1 ~]# systemctl disable mesos-master

# 以上操作后,slave節點機不能ping通外網,是因為DNS解析文件被改變了,執行下面命令即可:
[root@slave-1 ~]#echo "nameserver 114.114.114.114" >> /etc/resolv.conf
[root@slave-1 ~]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38: icmp_seq=1 ttl=53 time=38.3 ms
.......

# 如果mesos-slave啟動失敗,可以如下檢查:
[root@slave-1 ~]#  journalctl -f -u  mesos-slave 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM