Apache Mesos是一个集群管理器,可跨分布式应用程序或框架提供有效的资源隔离和共享。它位于应用程序层和操做系统之间,能够更加轻松地在大规模集群环境中更有效地部署和管理应用程序。它能够在动态共享节点池上运行许多应用程序
Apache Mesos将CPU,内存,存储和其余计算资源从机器(物理或虚拟)中抽象出来,使容错和弹性分布式系统可以轻松构建并有效运行。java
mesos的安装要求是内核版本须在3.10以上python
uname -r //查看系统内核版本
setenforce 0 systemctl stop firewalld.service
主机名 | IP地址 | 安装软件 |
---|---|---|
master1 | 172.16.10.28 | jdk-8u14四、marathon-1.4.六、mesos-1.6.一、zookeeper-3.4.12 |
master2 | 172.16.10.44 | jdk-8u14四、mesos-1.6.一、zookeeper-3.4.12 |
master3 | 172.16.10.45 | jdk-8u14四、mesos-1.6.一、zookeeper-3.4.12 |
slave1 | 172.16.10.46 | jdk-8u14四、mesos-1.6.一、docker |
slave1 | 172.16.10.47 | jdk-8u14四、mesos-1.6.一、docker |
hostnamectl set-hostname master1 //分别修改虚拟机的主机名,一一对应,重启生效 vim /etc/hosts 192.168.175.132 master 192.168.175.150 master1 192.168.175.151 master2 192.168.175.152 slave1 192.168.175.153 slave2 //全部虚拟机hosts文件内容一致
tar zxf jdk-8u144-linux-x64.tar.gz mv jdk1.8.0_144 /usr/local/java
vim /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 //刷新使环境变量生效
yum -y groupinstall "Development Tools"
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 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
vim /etc/yum.repo.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 yum update systemd -y
vim /etc/profile export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so source /etc/profile //刷新使环境变量当即生效
tar zxvf pip-1.5.4.tar.gz cd pip-1.5.4 python setup.py install
pip install pytz --upgrade //网络很差容易失败。
tar zxvf mesos-0.25.0.tar.gz -C /root //解压软件包 cd /root/mesos-0.25.0 mkdir build //构建配置 cd build ../configure make //编译 make check //运行测试集 make install //安装
由于在安装apache mesos时耗时一个多小时,在配置群集时都须要安装此软件,因此建议采用克隆虚拟机的方式减小用时。至此实验所需的五台服务器都安装mesos软件linux
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都需操做nginx
cd /home/q/zookeeper/conf mv zoo_sample.cfg zoo.cfg //模板和配置文件不能同时存在 vim zoo.cfg dataDir=/home/q/zookeeper/data dataLogDir=/home/q/zookeeper/datalog //手动建立/data /datalog目录 server.1=172.16.10.28:2888:3888 server.2=172.16.10.44:2888:3888 server.3=172.16.10.45:2888:3888 //2888为信息交互端口,3888为选举端口 cd /home/q/zookeeper mkdir data datalog //三台master都需建立
此处建立的myid文件,对应的是在上述配置文件中server.一、server2……后对应的数字,三台服务器对应修改,各不相同,一一对应。docker
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 //注意切换目录 ./bin/zkServer.sh start conf/zoo.cfg //在三台master都启动该服务 ./bin/zkServer.sh status //查询角色信息
当角色为follower的zookeeper服务下线时,leader并不会从新选举,可是当角色为leader下线时,则会从新选举,产生新的leader,则实现了集群的故障转移。apache
./bin/zkServer.sh start conf/zoo.cfg //注意脚本所在目录
安装完成zookeeper以后,zookeeper会选举出leader帮助mesos选举leader,肯定多master环境中,谁处于actived,又有哪些master是处于standby状态。就是说,在接下来分派任务时,三台master会去找zookeeper的leader询问,谁是主,谁来负责分派任务,建议在生产环境中不要将zookeeper和mesos装在同一台服务器中,实验环境,为了节省虚拟机就装在一块儿。json
在开启该服务以后,终端会被占用,如果想在终端上继续操做,则需开启新终端进行操做。vim
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://172.16.10.28: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://172.16.10.44: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://172.16.10.45:2181/mesos --quorum=2 //在maseter3执行,地址为master3地址
登录网站以后,leader即选举完成,不论你使用的是那个master的地址访问,最终显示的都是leader页面,我在使用老版本作的时候发现,网页是会跳转的,可是新版本中改变了机制,可是实现的效果是一致的,即老是展现leader页面。centos
关闭leader所在服务器的mesos服务,mesos会从新指定leader,接替进行工做
在两台slave中都安装docker 并开启
yum install docker -y systemctl start docker.service systemctl enable docker.service
启动服务以后一样会占用终端,若继续操做则需打开新终端,两台slave的开启命令一致
mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://172.16.10.28:2181,172.16.10.44:2181,172.16.10.45:2181/mesos --no-hostname_lookup --ip=0.0.0.0
Marathon是一个mesos框架,可以支持运行长服务,本次实验中,使用marathon向mesos发送任务。
Marathon特性:
在master1中安装该服务
tar xf marathon-1.4.6.tgz -C /home/q mv /home/q/marathon-1.4.6/ /home/q/marathon cd /home/q/marathon/ ./bin/start --hostname 172.16.10.28 --master zk://172.16.10.28:2181,172.16.10.44:2181,172.16.10.45:2181/mesos --http_address 0.0.0.0 //开启服务
在marathon上建立一个test任务,mesos会将任务分派给集群中的代理来执行任务,任务会随机发布给agent执行
在slave1上进行操做,建立一个json文件,执行安装nginx
vim nginx.json //json文件建立在/目录下 { "id":"/nginx", "container":{ "type":"DOCKER", "docker":{ "image":"nginx", "network":"HOST", "parameters":[], "privileged":false, "forcePullImage":false } }, "cpus":0.1, "mem":32.0, "instances":1 }
curl -X POST -H "Content-type:application/json" http://172.16.10.28:8080/v2/apps -d@nginx.json
ps aux | grep docker //终端查询
当任务执行完成以后,便可使用分配执行任务的网址访问nginx测试首页