#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部署 略