• 回答数

    2

  • 浏览数

    295

爱吃哒小胖纸
首页 > 毕业论文 > 基于docker的毕业论文

2个回答 默认排序
  • 默认排序
  • 按时间排序

无敌炒米饭

已采纳

摘要:本文是基于docker 搭建的hadoop 分布式跨主机集群,集群规模为一个master和两个salve,一共使用三台物理主机(两台或者多台物理机均可模拟),集群网络使用的是docker swarm搭建。

备注:中文社区中相关资料极少,相关资料请直接翻阅 官方文档

运行之后会有如下信息提示

进入slave1中,运行如下命令:

同样进入slave2中,运行相同命令

这样,节点slave1 slave2就加入了master的swarm网络了。其中运行的命令即为第二步中创建完网络提示的信息。

观察上一步我们发现, hadoop-master容器启动在master主机上。我们进入到master。

自此,使用docker的跨主机的hadoop集群搭建完成。

问题描述:笔者在搭建过程中碰到了这个问题,docker容器hadoop-master和hadoop-slave1,hadoop-slave2在一个swarm网络中,能够互相ping通,但是在ssh登录的时候出现 connection time out 异常,等了很久最后连接超时,也没有报其他问题。笔者在碰到这个问题的时候,找到的原因是物理主机slave1,slave2的防火墙没有关,直接截拦了对容器内部的ssh访问。

解决方案:

214 评论

小小小小野

我们是一家做生鲜电商的公司,从系统搭建初期,我们就采用微服务的架构,基于DevOps体系来不断提高我们的交付的质量和效率, 随着业务和团队规模的发展,服务逐渐进行拆分,服务之间的交互越来越复杂,目前整个微服务已经近几十个应用模块, 整体架构上包括负载均衡、API网关、基于Dubbo的微服务模块、缓存、队列、数据库等,目前整个集群的资源利用率也没有一个合理的规划评估,虚拟机上部署多个应用服务隔离性也存在问题,考虑到越来越多门店以及第三方流量的接入,需要考虑系统的快速的伸缩能力,而基于统一资源管理的Docker容器技术在这些方面有一些天然的优势,并且和微服务架构、DevOps体系完美衔接。

经过调研和对比,最终我们采用Mesos作为底层资源的管理和调度,Marathon作为Docker执行的框架,配合ZooKeeper、Consul、Nginx作为服务注册发现。目前已经有部分的核心业务已经平稳的运行在基于Docker容器的Mesos资源管理平台上。

逻辑架构

部署架构

在发布流程中,在发布上线之前的环节是预发布,预发布环境验证完成后进行打包,生成Docker镜像和基于虚拟机部署的应用部署包,push到各自对应的仓库中,并打Tag。

生产环境发布过程中,同时发布到Mesos集群和原有的虚拟机集群上,两套集群网络是打通的。

网络架构

在网络架构选型时,会考虑一下几个原则:

docker bridge使用默认的docker0网桥,容器有独立的网络命名空间,跨主机的容器通信需要做端口NAT映射;Host的方式采用和宿主机一样的网络命名空间,网络无法做隔离,等等这些方式有非常多的端口争用限制,效率也较低。

Docker Overlay的方式,可以解决跨主机的通信,现有二层或三层网络之上再构建起来一个独立的网络,这个网络通常会有自己独立的IP地址空间、交换或者路由的实现。

Docker在libnetwork团队提供了multi-host网络功能,能完成Overlay网络,主要有隧道和路由两种方式, 隧道原理是对基础的网络协议进行封包,代表是Flannel。

另外一种是在宿主机中实现路由配置实现跨宿主机的容器之间的通信,比如Calico。

Calico是基于大三层的BGP协议路由方案,没有使用封包的隧道,没有NAT,性能的损耗很小,支持安全隔离防护,支持很细致的ACL控制,对混合云亲和度比较高。经过综合对比考虑,我们采用calico来实现跨宿主机的网络通讯。

安装好ETCD集群,通过负载均衡VIP方式(LVS+keepalived)来访问ETCD集群。

ETCD_AUTHORITY=

export ETCD_AUTHORITY

构建Calico网络集群,增加当前节点到集群中,Calico 节点启动后会查询 Etcd,和其他 Calico 节点使用 BGP 协议建立连接。

./calicoctl node –libnetwork –ip=

增加可用的地址池ip pool

./calicoctl pool add –nat-outgoing

./calicoctl pool show

创建网络,通过Calico IPAM插件(Driver(包括IPAM)负责一个Network的管理,包括资源分配和回收),-d指定驱动类型为Calico,创建一个online_net的driver为Calico的网络:

docker network create -d calico –ipam-driver calico –subnet= online_net

启动容器,网络指定刚才创建的online_net,容器启动时,劫持相关 Docker API,进行网络初始化。 查询 Etcd 自动分配一个可用 IP,创建一对veth接口用于容器和主机间通讯,设置好容器内的 IP 后,打开 IP 转发,在主机路由表添加指向此接口的路由,宿主机的路由表:

宿主机的路由表:

容器包发送包的路由过程如上图,宿主机上的容器IP 通过路由表发送数据包给另外一个宿主机的容器。

对于有状态的数据库,缓存等还是用物理机(虚拟机),来的应用集群用的是虚拟机,Docker容器集群需要和它们打通,做服务和数据的访问交互。那么只需要在物理机(虚拟机)上把当前节点加入容器网络集群即可:

ETCD_AUTHORITY=

export ETCD_AUTHORITY

./calicoctl node –ip=

服务自注册和发现

API网关提供统一的API访问入口,分为两层,第一层提供统一的路由、流控、安全鉴权、WAF、灰度功能发布等功能,第二层是Web应用层,通过调用Dubbo服务来实现服务的编排,对外提供网关的编排服务功能,屏蔽业务服务接口的变更;为了能够快速无缝的实现web层快速接入和扩容,我们用Consul作为服务注册中心实现Web服务的自动注册和发现。

对于Web服务注册,我们自己实现了Register,调用Consul的API进行注册,并通过TTL机制,定期进行心跳汇报应用的 健康 状态。

对于Web服务的发现,我们基于Netflix Zuul进行了扩展和改造,路由方面整合Consul的发现机制,并增加了基于域名进行路由的方式,对路由的配置功能进行了增强,实现配置的动态reload功能。API网关启动定时任务,通过Consul API获取Web服务实例的 健康 状态,更新本地的路由缓存,实现动态路由功能。

平台的微服务框架是基于Dubbo RPC实现的,而Dubbo依赖ZooKeeper做服务的发现和注册。

Consul在Mesos Docker集群的部署方案 :

不建议把Consul Agent都和Container应用打包成一个镜像,因此Consul Agent部署在每个Mesos Slave宿主机上,那么Container如何获取宿主机的IP地址来进行服务的注册和注销,容器启动过程中,默认情况下,会把当前宿主机IP作为环境变量传递到Container中,这样容器应用的Register模块就可以获取Consul代理的IP,调用Consul的API进行服务的注册和卸载。

在日常应用发布中,需要保障发布过程对在线业务没有影响,做到无缝滚动的发布,那么在停止应用时应通知到路由,进行流量切换。

docker stop命令在执行的时候,会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认的10秒,会继续发送SIGKILL的系统信号强行kill掉进程。这样我们可以让程序在接收到SIGTERM信号后,有一定的时间处理、保存程序执行现场,优雅的退出程序,我们在应用的启动脚本中实现一段脚本来实现信号的接受和处理, 接收到信号后,找到应用的PID,做应用进程的平滑kill。

应用的无缝滚动发布、宕机恢复

Marathon为运行中的应用提供了灵活的重启策略。当应用只有一个实例在运行,这时候重启的话,默认情况下Marathon会新起一个实例,在新实例重启完成之后,才会停掉原有实例,从而实现平滑的重启,满足应用无缝滚动发布的要求。

当然,可以通过Marathon提供的参数来设置自己想要的重启策略:

“upgradeStrategy”:{ “minimumHealthCapacity”: N1, “maximumOverCapacity”: N2 }

如何判断新的实例是否启动完成可以提供服务,或者当前容器的应用实例是否 健康 ,是否实例已经不可用了需要恢复,Marathon提供了healthchecks 健康 监测模块

"healthChecks": [{

"protocol": "COMMAND",

"command":{

"value":"sh /data/soft/ app "

},

"gracePeriodSeconds": 90,

"intervalSeconds": 60,

"timeoutSeconds": 50,

"maxConsecutiveFailures": 3

}]

通过负载均衡调用HealthMonitor来获取应用实例的监控状态, HealthMonitor是我们的 健康 检查中心,可以获取应用实例的整个拓扑信息。

容器监控、日志

对于容器的监控,由于我们是采用Mesos Docker的容器资源管理的架构,因此采用mesos-exporter+Prometheus+Grafana的监控方案,mesos-exporter的特点是可以采集 task 的监控数据,可以从task的角度来了解资源的使用情况,而不是一个一个没有关联关系的容器。mesos-exporter导出Mesos集群的监控数据到Prometheus,Prometheus是一套监控报警、时序数据库组合,提供了非常强大存储和多维度的查询,数据的展现统一采用Grafana。

203 评论

相关问答

  • 关于基于java的毕业论文题目

    jsp的的技术框架有很多, 我最近在给一些同学写代码大部分都是javaweb的, 大部分都是s2sh框架或者ssm框架可以做各类管理系统 电商系统 二手交易平台

    天天爱小狐狸 5人参与回答 2023-12-06
  • 基于ns3的毕业论文

    CCNx是开源的一个网络协议,以内容为中心,类似与TCP/IP这一套。NDNSim是基于NS3的模拟器,可以模拟CCNx这种网络架构。

    Queena兜兜 5人参与回答 2023-12-08
  • 基于arm-a9的毕业论文

    (一)选题毕业论文(设计)题目应符合本专业的培养目标和教学要求,具有综合性和创新性。本科生要根据自己的实际情况和专业特长,选择适当的论文题目,但所写论文要与本专

    香了哩个辣 4人参与回答 2023-12-08
  • 关于地基的毕业论文

    探讨现代房屋建筑地基基础工程施工技术 论文关键词:房屋建筑 地基基础 施工技术 质量 论文摘要: 本文结合笔者多年的工作经验,对现代房屋建筑地基基础工程施工技术

    大鹏村长 3人参与回答 2023-12-09
  • 基于语言的毕业论文

    像语音学,音位学,以及形态学,句法都不好下手建议写社会语言学或是心理语言学方面的,可以深入对比一下中西方思维的差异之类的,应该是一个好的论点加油~~

    woshiyujiaolong 4人参与回答 2023-12-09