软件包
连接:https://pan.baidu.com/s/1TpEHLGkVX4-MNuIbHBaKng
提取码:p3fg java
工具 | 特色 | 优点 |
---|---|---|
Apache Mesos | 须要独立部署mesos-slave进程;依赖framework的功能能够管理docker容器;成本高 | 由于通过了许多互联网公司的大规模实践,稳定性具备保障 |
Docker Swarm | Docker官方集群管理工具,须要Docker daemon启用tcp端口;Swarm的命令兼容Docker;学习成本很是低 | 公有云环境Machine和Swarm搭配使用效率更高 |
Google Kubernetes | 彻底Docker化的管理工具,功能迭代很是快;集群管理能力比Mesos稍差 | 功能模块集成度高 |
<br/>使用Mesos管理Docker<br/> <br/>Apache Mesos是一个集群管理器,可跨分布式应用程序或框架提供有效的资源隔离和共享。它位于应用程序层和操做系统之间,能够更加轻松地在大规模集群环境中更有效地部署和管理应用程序。它能够在动态共享节点池上运行许多应用程序<br/>Apache Mesos将CPU,内存,存储和其余计算资源从机器(物理或虚拟)中抽象出来,使容错和弹性分布式系统可以轻松构建并有效运行。<br/>
python
<br/>
实验环境:linux
master1 | 192.168.80.100 | jdk、marathon、mesos、zookeeper |
---|---|---|
master2 | 192.168.80.101 | jdk、mesos、zookeeper |
master3 | 192.168.80.102 | jdk、mesos、zookeeper |
slave1 | 192.168.80.103 | jdk、mesos、docker |
slave2 | 192.168.80.104 | jdk、mesos、docker |
Mesos是什么呢,能够用这样一个例子进行说明。假定某公司须要频繁进行大数据计算,该任务运行时须要N多个CPU和内存,为了知足这个需求,有两种方案: 1.使用小型服务器,为任务提供足够的资源。 2.采用分布计算,即提供一批普通配置的机器,组成集群,将计算任务拆分到各个机器上计算,而后汇总结果。 Mesos就是实现这类分布式计算的框架,在分布式计算过程当中,Mesos会对上述计算机资源进行管理和分配。 Marathon按照官方的说法是基于Mesos的私有PaaS,它实现了Mesos的Framework。Marathon实现了服务发现和负载平衡、为部署提供REST API服务、受权和SSL、配置约束等功能。Marathon支持经过Shell命令和Docker部署应用。提供Web界面、支持cpu/mem、实例数等参数设置,支持单应用的Scale,但不支持复杂的集群定义。Marathon可以支持运行长服务,好比Web应用等。Marathon可以原样运行任何Linux二进制发布版本,好比Tomcat Play等。 Mesos和Marathon的关系 若是将Mesos类比为操做系统的内核,负责资源调度。则Marathon能够类比为服务管理系统,好比init,systemd或upstart等系统,用来管理应用的状态信息。Marathon将应用程序部署为长时间运行的Mesos任务。 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 这里部属的机器为3个Master控制节点,2个slave运行节点,其中: zookeeper、Mesos-master、marathon运行在Master端;Mesos-slave和docker运行在Slave端;须要修改zk的内容来保证slave可以被发现和管理 构建环境 配置mesos-master(3台master节点都要操做) hostnamectl set-hostname master1 hostnamectl set-hostname master2 hostnamectl set-hostname master3 hostnamectl set-hostname slave1 hostnamectl set-hostname slave2 vi /etc/hosts 192.168.80.100 master1 192.168.80.101 master2 192.168.80.102 master3 192.168.80.103 slave1 192.168.80.104 slave2 sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config setenforce 0 systemctl stop firewalld systemctl disable firewalld # 安装mesos、marathon、zookeeper 一、部署java环境 tar xf jdk-8u144-linux-x64.tar.gz -C /opt cp -rv jdk1.8.0_144/ /usr/local/java vi /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 java -version yum groupinstall -y "Development Tools" #安装开发工具 wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo #添加apache-maven#为Mesos提供项目管理和构建自动化工具的支持 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 vi /etc/yum.repos.d/wandisco-svn.repo #配置WANdiscoSVN网络源 [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环境变量: vi /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: pytz:python的时区模块 安装pip: tar xf pip-1.5.4.tar.gz -C /opt cd /opt/pip-1.5.4 python setup.py install 升级pytz pip install pytz --upgrade //网络很差容易失败。 构建mesos tar xf mesos-0.25.0.tar.gz -C /opt //解压软件包 cd /opt/mesos-0.25.0 mkdir build //构建配置 cd build ../configure 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 make //编译 make check //运行测试集 make install 编译过程漫长 若是在配置的时候报错: error: cannot find libsvn_subr-1 headers 解决方法: yum install -y subversion-devel 部署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 //模板和配置文件不能同时存在 vi zoo.cfg maxClientCnxns=50 #单个客户端与单台服务器之间的链接数的限制,是ip级别的,默认是50,若是设置为0,那么代表不做任何限制 tickTime=2000 #Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔 initLimit=10 #Zookeeper的Leader 接受客户端(Follower)初始化链接时最长能忍受多少个心跳时间间隔数。 syncLimit=5 #表示 Leader 与 Follower 之间发送消息时请求和应答时间长度 clientPort=2181 #客户端链接端口 dataDir=/home/q/zookeeper/data //zookeeper数据文件存放目录 dataLogDir=/home/q/zookeeper/datalog //手动建立/data /datalog目录 server.1=192.168.80.100:2888:3888 server.2=192.168.80.101:2888:3888 server.3=192.168.80.102:2888:3888 //2888为信息交互端口,3888为选举端口 注: 以server.A=B:C:D: 格式定义各个节点相关信息,其中:A 是一个数字,表示第几号服务器;B是这个服务器的IP地址;C为与集群中的Leader服务器交换信息的端口;D是在Leader挂掉时专门进行Leader选举时所用的端口。 将修改好的配置文件传输给其余master cd /home/q/zookeeper mkdir data datalog scp -r /home/q/zookeeper/ root@192.168.80.101:/home/q/ scp -r /home/q/zookeeper/ root@192.168.80.102:/home/q/ 建立myid文件 此处建立的myid文件,对应的是在上述配置文件中server.一、server2……后对应的数字,三台服务器对应修改,各不相同,一一对应。 cd /home/q/zookeeper 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 //注意切换目录 临时修更名称 echo master1 >/proc/sys/kernel/hostname echo master2 >/proc/sys/kernel/hostname echo master3 >/proc/sys/kernel/hostname echo slave1 >/proc/sys/kernel/hostname echo slave2 >/proc/sys/kernel/hostname ./bin/zkServer.sh start conf/zoo.cfg //在三台master都启动该服务 ./bin/zkServer.sh status //查询角色信息 验证单点故障 当角色为follower的zookeeper服务下线时,leader并不会从新选举,可是当角色为leader下线时,则会从新选举,产生新的leader,则实现了集群的故障转移。 ./bin/zkServer.sh start conf/zoo.cfg //注意脚本所在目录 ./bin/zkServer.sh stop conf/zoo.cfg //关闭服务 ./bin/zkServer.sh status //查看状态 follower——从 leader——主 部署mesos集群 安装完成zookeeper以后,zookeeper会选举出leader帮助mesos选举leader,肯定多master环境中,谁处于actived,又有哪些master是处于standby状态。就是说,在接下来分派任务时,三台master会去找zookeeper的leader询问,谁是主,谁来负责分派任务,建议在生产环境中不要将zookeeper和mesos装在同一台服务器中,实验环境,为了节省虚拟机就装在一块儿。 建立master启动命令软链接 ln -sf /opt/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master 开启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://192.168.80.100: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://192.168.80.101: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://192.168.80.102:2181/mesos --quorum=2 //在maseter3执行,地址为master3地址 说明: --work_dir 指定工做目录 --log_dir 指定日志生成位置 --no-hostname_lookup 不指定域名解析 --ip=0.0.0.0 任意网段都可访问 网页访问 登录网站以后,leader即选举完成,不论你使用的是那个master的地址访问,最终显示的都是leader页面,我在使用老版本作的时候发现,网页是会跳转的,可是新版本中改变了机制,可是实现的效果是一致的,即老是展现leader页面。 在浏览器中输入:ip地址:5050 验证单点故障 关闭leader所在服务器的mesos服务,mesos会从新指定leader,接替进行工做 配置Mesos-slave 建立slave启动命令软链接 ln -sf /opt/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave 安装docker,因为slave须要接受master的调度执行容器运行,所以须要安装docker 1.配置repo仓库 cd /etc/yum.repos.d/ vi docker.repo [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg yum install docker -y systemctl start docker systemctl enable docker 启动Mesos-slave服务 mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.80.100:2181,192.168.80.101:2181,192.168.80.102:2181/mesos --no-hostname_lookup --ip=0.0.0.0 访问mesos网站 浏览器访问ip:5050 点击agents 在全部master上安装marathon marathon软件包不须要安装,解压后便可使用,全部master上安装好marathon后,每台启动方式以下 每台mastermarathon启动hostname后面跟上本身ip以及zookeeper区域全部服务器ip tar xf marathon-0.15.2.tgz -C /home/q mv /home/q/marathon-0.15.2/ /home/q/marathon cd /home/q/marathon/ ./bin/start --hostname 192.168.80.100 --master zk://192.168.80.100:2181,192.168.80.101:2181,192.168.80.102:2181/mesos --http_address 0.0.0.0 ./bin/start --hostname 192.168.80.101 --master zk://192.168.80.100:2181,192.168.80.101:2181,192.168.80.102:2181/mesos --http_address 0.0.0.0 ./bin/start --hostname 192.168.80.102 --master zk://192.168.80.100:2181,192.168.80.101:2181,192.168.80.102:2181/mesos --http_address 0.0.0.0 测试 http://192.168.80.101:8080/ 在marathon上建立一个test任务,mesos会将任务分派给集群中的代理来执行任务,任务会随机发布给agent执行
建立成功之后在applications页面能够看到该任务
Marathon会自动注册到Mesos中,能够在Mesos web的Framework页面中看到注册信息。 ip:5050
能够在Mesos Web首页看到测试任务在不停的执行中
在节点slave主机查看任务的相关信息
删除测试任务
使用Marathon API的形式添加新任务 在节点slave中操做 cd /root vi demo.json { "id":"basic-0", "cmd":"while [true]; do echo 'hello Marathon'; sleep 5; done", "cpus":0.1, "mem":10.0, "instances":1 } //查看Marathon网站有新添加任务 curl -X POST -H "Content-type:application/json" http://192.168.80.100:8080/v2/apps -d@demo.json 在网站页面查看:
使用Mesos与Marathon建立Docker集群 (1)在节点slave建立docker的nginx请求任务 cd /root vi 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 } //查看Marathon网站有新添加任务 curl -X POST -H "Content-type:application/json" http://192.168.80.100:8080/v2/apps -d@nginx.json (2)在Marathon页面查看 能够在建立的Nginxd任务下看到该任务发送给主机
(3)用命令行方式查看主机下载的docker镜像 docker images 看有木有nginx镜像 docker ps -a 看有木有运行容器 (4)访问slave主机上运行着的Nginx服务 http:slave1ip地址