#mesos + marathon + docker部署java
##架構設計 mesos + marathon均部署在CentOS7上,角色分配以下:python
Name | Address | OS | Role |
---|---|---|---|
docker1 | 10.10.10.11 | CentOS7 | zookeeper、marathon、mesos-master、mesos-slave、docker server |
docker2 | 10.10.10.12 | CentOS7 | zookeeper、mesos-slave、docker server |
##環境準備 ###修改hosts 將下列內容添加到兩臺服務器的/etc/hosts/
文件中git
10.10.10.11 docker1 10.10.10.12 docker2
###安裝依賴github
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 java-1.8.0-openjdk java-1.8.0-openjdk-devel java-1.8.0-openjdk-headless yum install -y apache-maven python-devel java-1.7.0-openjdk-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-util-devel yum groupinstall -y "Development Tools"
##zookeeper部署 ###zookeeper配置 通常狀況下,建議zookeeper服務器數量爲奇數,這裏因爲資源有限,用兩臺作演示。web
在兩臺服務器上分別安裝zookeeper在/usr/local/zookeeper-3.4.6
目錄下。docker
編輯配置文件/usr/local/zookeeper-3.4.6/conf/zoo.cfg
,內容以下:shell
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper-3.4.6/data clientPort=2181 server.1=docker1:2888:3888 server.2=docker2:2888:3888
在docker1
上執行:apache
echo 1 > /usr/local/zookeeper-3.4.6/data/myid
在docker2
上執行:bootstrap
echo 2 > /usr/local/zookeeper-3.4.6/data/myid
###啓動zookeeper 在兩臺服務器上執行:vim
sh /usr/local/zookeeper-3.4.6/bin/zkServer.sh start
檢查服務運行狀態
/usr/local/zookeeper-3.4.6/bin/zkServer.sh status
##mesos部署 ###下載mesos
wget http://www.apache.org/dist/mesos/0.25.0/mesos-0.25.0.tar.gz #解壓: tar -zxf mesos-0.25.0.tar.gz
###安裝
cd /usr/local/mesos-0.25.0/ # Bootstrap ./bootstrap # Configure and build. mkdir build cd build ../configure --with-webui --with-included-zookeeper make make install
###啓動腳本
vim /usr/local/mesos-0.25.0/build/mesos.sh
添加下列內容:
#!/bin/bash cd $(dirname $0) lan_ip=輸入本機IP地址 log_dir="/apps/mesos/logs" work_dir="/apps/mesos/master" master_log="/apps/mesos/mesos-master.log" slave_log="/apps/mesos/mesos-slave.log" if [ $# -eq 0 ];then echo 'Usage: mesos.sh {start-master|stop-master|restart-master|start-slave|stop-slave|restart-slave}' exit 110 fi case $1 in start-master) ./bin/mesos-master.sh --ip=$lan_ip --zk=zk://docker1:2181,docker2:2181/mesos --work_dir=$work_dir --log_dir=$log_dir --quorum=1 > $master_log 2>&1 & master_pid=`ps aux | grep mesos-master | grep -v grep | awk '{print $2}'` echo "masos-master is running, pid is $master_pid " ;; stop-master) master_pid=`ps aux | grep mesos-master | grep -v grep | awk '{print $2}'` kill $master_pid echo "masos-master is down" ;; restart-master) master_pid=`ps aux | grep mesos-master | grep -v grep | awk '{print $2}'` kill $master_pid echo "masos-master is stopping" sleep 2 ./bin/mesos-master.sh --ip=$lan_ip --zk=zk://docker1:2181,docker2:2181/mesos --work_dir=$work_dir --log_dir=$log_dir --quorum=1 > $master_log 2>&1 & master_pid=`ps aux | grep mesos-master | grep -v grep | awk '{print $2}'` echo "masos-master is running, pid is $master_pid " ;; start-slave) ./bin/mesos-slave.sh --ip=$lan_ip --containerizers=mesos,docker --master=zk://docker1:2181,docker2:2181/mesos --log_dir=$log_dir > $slave_log 2>&1 & slave_pid=`ps aux | grep mesos-slave | grep -v grep | awk '{print $2}'` echo "masos-slave is running, pid is $slave_pid " ;; stop-slave) slave_pid=`ps aux | grep mesos-slave | grep -v grep | awk '{print $2}'` kill $slave_pid echo "masos-slave is down" ;; restart-slave) slave_pid=`ps aux | grep mesos-slave | grep -v grep | awk '{print $2}'` kill $slave_pid echo "masos-slave is stopping" sleep 2 ./bin/mesos-slave.sh --ip=$lan_ip --containerizers=mesos,docker --master=zk://docker1:2181,docker2:2181/mesos --log_dir=$log_dir > $slave_log 2>&1 & slave_pid=`ps aux | grep mesos-slave | grep -v grep | awk '{print $2}'` echo "masos-slave is running, pid is $slave_pid " ;; *) echo 'Usage: mesos.sh {start-master|stop-master|restart-master|start-slave|stop-slave|restart-slave}' exit 110 esac
###啓動mesos 在docker1
上執行:
sh /usr/local/mesos-0.25.0/build/mesos.sh start-master sh /usr/local/mesos-0.25.0/build/mesos.sh start-slave
在docker2
上執行:
sh /usr/local/mesos-0.25.0/build/mesos.sh start-slave
###檢測mesos啓動狀態 在瀏覽器打開:http://10.10.10.11:5050,查看服務運行是否正常
##marathon部署 ###下載marathon 下載地址:https://mesosphere.github.io/marathon/ 總提供的URL下載最新版本的marathon到/usr/local/
目錄下,並解壓。 ###啓動腳本
vim /usr/local/marathon-0.11.1/marathon.sh
#!/bin/bash cd $(dirname $0) if [ $# -eq 0 ];then echo 'Usage: marathon.sh {start|stop|restart}' exit 110 fi PID=/apps/marathon/marathon.pid case $1 in start) MESOS_NATIVE_JAVA_LIBRARY=/usr/local/mesos-0.25.0/build/src/.libs/libmesos-0.25.0.so ./bin/start --master zk://docker1:2181,docker2:2181/mesos --zk zk://docker1:2181,docker2:2181/marathon > /niub/marathon/marathon.log 2>&1 & echo $! > $PID echo "marathon is running,pid is $!" ;; stop) kill `cat $PID` if [ $? -eq 0 ];then echo "marathon is stopped" else echo "error,marathon is not stopped" fi ;; restart) kill `cat $PID` if [ $? -eq 0 ];then echo "marathon is stopped" else echo "error,marathon is not stopped" fi sleep 3 MESOS_NATIVE_JAVA_LIBRARY=/usr/local/mesos-0.21/lib/libmesos-0.21.0.so ./bin/start --master zk://docker1:2181,docker2:2181/mesos --zk zk://docker1:2181,docker2:2181/marathon > /niub/marathon/marathon.log 2>&1 & echo $! > marathon.pid echo "marathon is running,pid is $!" ;; *) echo 'Usage: marathon.sh {start|stop|restart}' exit 110 esac
###啓動marathon
sh /usr/local/marathon-0.11.1/marathon.sh start
###檢測服務運行狀態: URL: http://10.10.10.11:8080
##docker部署 略