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

[经验分享] 部署Mesos+zookeeper+Marathon+Docker实战

[复制链接]

尚未签到

发表于 2019-1-8 08:30:48 | 显示全部楼层 |阅读模式
Mesos是什么?
  Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos能够在同样的集群机器上运行多种分布式系统类型,更加动态有效率低共享资源。提供失败侦测,任务发布,任务跟踪,任务监控,低层次资源管理和细粒度的资源共享,可以扩展伸缩到数千个节点。Mesos已经被Twitter用来管理它们的数据中心。

Mesos中的基本术语解释:

  1)Mesos-master:主要负责管理各个framework和slave,并将slave上的资源分配给各个framework
2)Mesos-slave:负责管理本节点上的各个mesos-task,比如:为各个executor分配资源
3)Framework:计算框架,如:Hadoop,Spark等,通过MesosSchedulerDiver接入Mesos
4)Executor:执行器,安装到mesos-slave上,用于启动计算框架中的task。


Zookeeper是什么?
  ZooKeeper是用来给集群服务维护配置信息,域名服务,提供分布式同步和提供组服务。所有这些类型的服务都使用某种形式的分布式应用程序。ZooKeeper是一个分布式的,开放源码的协调服务,是的Chubby一个的实现,是Hadoop和Hbase的重要组件。
   
ZooKeeper角色:

  领导者(leader):领导者负责投票发起和决议,更新系统状态
跟随者(follwoer):follower用于接收客户请求并向客户端返回结果,在选主过程中参与投票
观察者:ObServer可以接受客户端连接,将写请求转发给leader节点,但ObServer不参加投票过程,只同步leader的状态,ObServer的目的是为了拓展系统,提高读取速度。
客户端:请求发起方

   
ZooKeeper同步流程:

  选完leader以后,zookeeper就进入状态同步过程。
1)leader等待server连接;
2)Follower连接leader,将最大的zxid发送给leader;
3)Leader根据follower的zxid确定同步点;
4)完成同步后通知follower 已经成为uptodate状态;
5)Follower收到uptodate消息后,又可以重新接受client的请求进行服务了。



  •   配置JAVA环境

    # cat /etc/redhat-release   //查看Linux版本
    # uname -r   //查看内核版本(需要内核3.10以上)
    # tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
    # cd  /usr/local/
    # mv jdk1.8.0_91/ java
    # vim /etc/profile
    export JAVA_HOME=/usr/local/java
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
  •   添加apache-maven源

    # wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
  •   配置WANdiscoSVN网络源

    # vim /etc/yum.repos.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
  •   配置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
  •   添加依赖包

    # yum install -y apache-maven python-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel apr-util-devel subversion-devel
  •   安装开发工具

    # yum groupinstall -y "Development Tools"
  •   构建Mesos

    # wget http://archive.apache.org/dist/mesos/0.25.0/mesos-0.25.0.tar.gz
    # tar zxvf mesos-0.25.0.tar.gz -C /opt/
    # mv mesos-0.25.0/ /root/
    # cd /root/mesos-0.25.0
    # mkdir build
    # cd build
    # ../configure
    # make              //等待时间长  且不能断网 前面的环境包不能少
    # make check
    # make install   
      由于安装时间太长 此处直接克隆四台


   


部署Mesos+zookeeper+Marathon+Docker



Column 1
Column 2
Column 3




master1
192.168.200.128
jdk、mesos、zookeeper、marathon


master2
192.168.200.137
jdk、mesos、zookeeper、


master3
192.168.200.138
jdk、mesos、zookeeper、


slave1
192.168.200.139
jdk、mesos、zookeeper、docker


slave2
192.168.200.140
jdk、mesos、zookeeper、docker
   


  •   分别给主机命名

    # hostnamectl set-hostname master1 (其他四台: maste2、 maste3、slave1、slave2)
    # bash
    # vim /etc/hosts    (所有主机同步)
    192.168.200.128 master1
    192.168.200.137 master2
    192.168.200.138 master3
    192.168.200.139 slave1
    192.168.200.140 slave2
  •   所有master

    # wget https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
    # tar zxvf zookeeper-3.4.10.tar.gz -C /home/q/
    # cd /home/q/zookeeper-3.4.10/
    # mv conf/zoo_sample.cfg conf/zoo.cfg
    # ln -sf /root/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master
    //给启动脚本添加环境变量
  •   在master1中操作

    # cd /home/q/zookeeper-3.4.10/conf
    # vim zoo.cfg
    dataDir=/home/q/zookeeper-3.4.10/data   //修改zookeeper数据文件存放目录
    dataLogDir=/home/q/zookeeper-3.4.10/datalog    //zookeeper日志存放目录
    server.1=192.168.200.128:2888:3888    //数字1,2,3表示这个是第几号服务器(是上面myid文件里对应的数字);中间的是master主节点的ip地址
    server.2=192.168.200.137:2888:3888         //第一个端口2888(这个端口可以自己定义)表示的是这个服务器与集群中的 Leader 服务器交换信息的端口
    server.3=192.168.200.138:2888:3888      //第二个端口3888表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
    //把配置文件传输给其他maste
    # scp zoo.cfg 192.168.200.137:/home/q/zookeeper-3.4.10/conf/
    # scp zoo.cfg 192.168.200.138:/home/q/zookeeper-3.4.10/conf/
  •   在master1主机上操作(/home/q/zookeeper-3.4.10/中)

    # mkdir data datalog
    # echo 1 > data/myid
    # ./bin/zkServer.sh start conf/zoo.cfg    //开启zookeeper服务
    # mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.200.128:2181/mesos --quorum=2
    //启动mesos
  •   在master2主机上操作(/home/q/zookeeper-3.4.10/中)

    # mkdir data datalog
    # echo 2 > data/myid
    # ./bin/zkServer.sh start conf/zoo.cfg    //开启服务
    # mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.200.137:2181/mesos --quorum=2
  •   在master3主机上操作(/home/q/zookeeper-3.4.10/中)

    # mkdir data datalog
    # echo 3 > data/myid
    # ./bin/zkServer.sh start conf/zoo.cfg    //开启服务
    # mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.200.138:2181/mesos --quorum=2
   


  • slave1、slave2 上操作
  •   安装docker并且启动

    # yum install docker -y
    # systemctl start docker.service
    # systemctl enable docker.service
    //开启slave-mesos
    # ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave
    # mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.200.128:2181,192.168.200.137:2181,192.168.200.138:2181/mesos --no-hostname_lookup --ip=0.0.0.0
  • 在master上查看leader
  • 然后在浏览器输入任意master的IP+端口5050
  •   会自动跳转到被指定为leader的主机IP上去

    # cd /home/q/zookeeper-3.4.10/
    # ./bin/zkServer.sh status
   





  • 在master1上 部署运行marathon

  Marathon是一个成熟的,轻量级的,扩展性很强的Apache Mesos的容器编排框架,它主要用来调度和运行常驻服务(long-running service),提供了友好的界面和Rest API来创建和管理应用。marathon是一个mesos框架,能够支持运行长服务,比如web应用等,它是集群的分布式Init.d,能够原样运行任何Linux二进制发布版本,如Tomcat Play等等,可以集群的多进程管理。也是一种私有的Pass,实现服务的发现,为部署提供提供REST API服务,有授权和SSL、配置约束,通过HAProxy实现服务发现和负载平衡。


    # wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz
# tar zxvf marathon-0.15.2.tgz -C /home/q/
# cd /home/q/marathon-0.15.2/
# ./bin/start --hostname 192.168.200.128 --master zk://192.168.200.128:2181,192.168.200.137:2181,192.168.200.138:2181/mesos --http_address 0.0.0.0

  •   测试

      浏览器输入:http://192.168.200.128:8080/
    创建一个test的任务
    然后去mesos网页查看:http://192.168.200.128:5050/
    可以看到任务已经分配给slave1 和slave2





  •   查看执行事件相关信息

    # cd /home/q/mesos/data/slaves/7cc2e8e7-ad03-46a6-a38d-ae1b92c78319-S0/frameworks/d82f2603-f357-4025-9574-7c511c0f435e-0000/executors
    # cd test.f99a7592-a099-11e8-a6b5-52540011572d/runs/latest
    //标准错误和标准输出信息
    stderr  stdout
    //查看输出字符串
    cat stdout
    ---------------显示以下内容---------------------------
    Registered executor on 192.168.200.138
    Starting task test.f99a7592-a099-11e8-a6b5-52540011572d
    sh -c 'echo "hello world"'
    hello world
    Forked command at 3493
    Command exited with status 0 (pid: 3493)
   


使用mesos与marathon创建docker集群

    # vim nginx.json
{
"id":"/nginx",                               //应用的唯一ID
"container":{                              //marathon启动docker格式
"type":"DOCKER",
"docker":{
"image":"nginx",                       //nginx镜像
"network":"HOST",                  //网络为HOST模式
"parameters":[],
"privileged":false,
"forcePullImage":false          //是否强制更新镜像
}
},
"cpus":0.1,
"mem":32.0,
"instances":1
}
# curl -X POST -H "Content-type:application/json" http://192.168.200.128:8080/v2/apps -d@nginx.json  
//发送json文件给marathon

   



  • 在任务发布指定的slave上使用命令  ps aux | grep docker  查看到nginx正在下载

  下载完成后
输入镜像下载完成的slave 地址: 192.168.200.139









运维网声明 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-660554-1-1.html 上篇帖子: kafka 、 zookeeper 集群(二) 下篇帖子: zkui zookeeper web管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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