设为首页 收藏本站
查看: 1034|回复: 0

[经验分享] 使用Mesos管理Docker(Mesos+Marathon+Docker)

[复制链接]

尚未签到

发表于 2019-2-21 07:33:42 | 显示全部楼层 |阅读模式
  Apache Mesos是一个集群管理器,可跨分布式应用程序或框架提供有效的资源隔离和共享。它位于应用程序层和操作系统之间,可以更加轻松地在大规模集群环境中更有效地部署和管理应用程序。它可以在动态共享节点池上运行许多应用程序
Apache Mesos将CPU,内存,存储和其他计算资源从机器(物理或虚拟)中抽象出来,使容错和弹性分布式系统能够轻松构建并有效运行。

环境准备

操作系统:CentOS-7-x86_64

内核版本:3.10.0-693.el7.x86_64
  mesos的安装要求是内核版本须在3.10以上

uname -r    //查看系统内核版本
关闭虚拟机防火墙

setenforce 0
systemctl stop firewalld.service
虚拟机分配


主机名
IP地址
安装软件




master1
172.16.10.28
jdk-8u144、marathon-1.4.6、mesos-1.6.1、zookeeper-3.4.12


master2
172.16.10.44
jdk-8u144、mesos-1.6.1、zookeeper-3.4.12


master3
172.16.10.45
jdk-8u144、mesos-1.6.1、zookeeper-3.4.12


slave1
172.16.10.46
jdk-8u144、mesos-1.6.1、docker


slave1
172.16.10.47
jdk-8u144、mesos-1.6.1、docker

虚拟机的hostname及hosts文件都需做修改

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文件内容一致
安装Apache Mesos

配置Java环境

解压、归档软件包

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"
添加apache-maven源

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
配置WANdiscoSVN网络源

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
配置Mesos环境变量

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    //刷新使环境变量立即生效
升级pytz

安装pip

tar zxvf pip-1.5.4.tar.gz
cd pip-1.5.4
python setup.py install
升级pytz

pip install pytz --upgrade    //网络不好容易失败。
构建mesos

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软件

部署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                             //模板和配置文件不能同时存在
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文件
  此处创建的myid文件,对应的是在上述配置文件中server.1、server2……后对应的数字,三台服务器对应修改,各不相同,一一对应。

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,则实现了集群的故障转移。

./bin/zkServer.sh start conf/zoo.cfg       //注意脚本所在目录



部署mesos集群
  安装完成zookeeper之后,zookeeper会选举出leader帮助mesos选举leader,确定多master环境中,谁处于actived,又有哪些master是处于standby状态。就是说,在接下来分派任务时,三台master会去找zookeeper的leader询问,谁是主,谁来负责分派任务,建议在生产环境中不要将zookeeper和mesos装在同一台服务器中,实验环境,为了节省虚拟机就装在一起。

开启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://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页面。



验证单点故障
  关闭leader所在服务器的mesos服务,mesos会重新指定leader,接替进行工作


开启mesos-slave

安装,启用docker
  在两台slave中都安装docker 并开启

yum install docker -y
systemctl start docker.service
systemctl enable docker.service
启用mesos-slave
  启动服务之后同样会占用终端,若继续操作则需打开新终端,两台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
访问mesos网站


部署Marathon
  Marathon是一个mesos框架,能够支持运行长服务,本次实验中,使用marathon向mesos发送任务。
Marathon特性:


  • 高可用性。Marathon作为主动/被动群集运行,领导者选举可以实现100%的正常运行时间。
  • 多个容器运行时。Marathon拥有对Mesos容器(使用cgroups)和Docker的一流支持。
  • 有状态的应用。Marathon可以将持久存储卷绑定到您的应用程序。您可以运行MySQL和Postgres等数据库,并由Mesos占用存储空间。
  • 美丽而强大的UI。
  • 制约因素。这些允许例如每个机架,节点等仅放置应用程序的一个实例。
  • 服务发现和负载平衡。几种方法可用。
  • 健康检查。使用HTTP或TCP检查评估应用程序的运行状况。
  • 活动订阅。提供HTTP端点以接收通知 - 例如,与外部负载均衡器集成。
  • 指标。以JSON格式在/ metrics查询它们或将它们推送到诸如graphite,statsd和Datadog之类的系统。
  • 完整的REST API,易于集成和编写脚本

安装,开启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任务
  在marathon上创建一个test任务,mesos会将任务分派给集群中的代理来执行任务,任务会随机发布给agent执行



创建docker任务
  在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    //终端查询


查看marathon网页


查看mesos网页


访问nginx首页
  当任务执行完成之后,即可使用分配执行任务的网址访问nginx测试首页





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675045-1-1.html 上篇帖子: docker file-gogourl的博客 下篇帖子: docker出现ipv4 forwarding is disabled
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表