
openstack组件研究
li_101357
热爱技术,踏实勤奋,共创美好未来。。。
展开
-
OpenStack设计与实现——RESTful API和WSGI
openstack每个项目内部的服务进程之间是通过消息总线来通讯的,而在各个项目之间则是通过RESTful API来进行通讯的。详细讨论openstack各个项目之间的通讯。一、什么是RESTful(1)、RESTful是目前最流行的一种互联网软件架构。REST(Representational State Transfer,表现层状态转移),如果一个架构符合REST原则,就称它为RE原创 2016-10-06 23:21:39 · 1560 阅读 · 1 评论 -
OpenStack Nova分析——Nova Scheduler调度算法分析(2)
资源信息的更新。调用HostManager对象的get_all_host_states方法获取所有活动的计算节点列表。get_all_host_states方法定义如下:hosts = self.host_manager.get_all_host_states(elevated)/nova/scheduler/host_manager.pyclass HostManger(object原创 2016-11-02 17:44:51 · 1055 阅读 · 0 评论 -
OpenStack Nova分析——Nova Scheduler调度算法分析(1)
1、前面已经介绍Nova Scheduler服务的启动流程,我们知道Nova Scheduler服务作为一个调度者,其核心便是调度算法。接下来我们就分析一下Nova Scheduler服务的调度算法吧。2、在配置文件中,调度算法默认的驱动类是FilterScheduler,该类位于/nova/scheduler/filter_scheduler.py中。FilterSchedule原创 2016-11-02 17:15:36 · 1505 阅读 · 0 评论 -
openstack Nova分析之 创建虚拟机流程(4)
创建虚拟机流程:Nova API服务最终将虚拟机创建请求交给底层Controller(servers.Controller)类的create方法处理。底层的Controller类的create方法最终调用了Compute API类的create方法。最后,Compute API类create的方法又远程调用了创建虚拟机请求的处理流程:Nova Scheduler服务的manager类为原创 2016-11-02 00:06:40 · 839 阅读 · 0 评论 -
Nova API服务之 创建虚拟机流程(3)
上篇文章谈到的get_project_quotas方法,进入这个方法。def get_project_quotas(self, context, resources, project_id, quota_class=None, defaults=True, usages=True原创 2016-11-01 16:23:10 · 861 阅读 · 0 评论 -
Nova RPC服务 之 Nova RPC服务的创建
在Nova Scheduler的启动脚本中,最终的代码是创建Service类的create方法,以及service包的serve和wait方法。分析Nova Scheduler服务的启动流程。1、Service类的create方法class Service(object): @classmethod def create(cls, host=None, binar原创 2016-11-01 21:13:19 · 609 阅读 · 1 评论 -
Nova RPC服务 之 Nova Scheduler 的启动流程
Nova RPC服务的工作流程,以及后面添加自定义Nova模块都是有帮助的。以Nova Scheduler服务为例,分析Nova RPC服务的启动流程。Nova组件的“大脑”——Nova Scheduler(调度器)。它是我们后续分析虚拟机创建的基础。这个子服务的作用前面已经介绍过,从其名称也可以看出该子服务就是负责调度各子服务工作的。首先介绍Nova Scheduler服务的启动脚本原创 2016-11-01 17:44:46 · 1016 阅读 · 0 评论 -
Nova API服务 之 创建虚拟机流程(2)
1、servers资源底层Controller对象的create方法调用compute API的create方法。Compute API类的create方法:/nova/nova/compute/api.pyclass API(base.Base): def create(self,context,instance_type, ...):原创 2016-10-31 23:03:48 · 1150 阅读 · 0 评论 -
Nova API服务 之 创建虚拟机流程(1)
本小节,将以虚拟机创建请求为例,分析底层Controller类的HTTP请求处理方法。一、回忆总结1、处理HTTP请求的核心工作都在底层Controller对象中定义。Resource对象在底层Controller对象的基础上,实现数据的转化工作。2、Resource对象首相将传入的对象反序列化。然后将数据交给底层Controller对象中相应的处理方法处理。最后将底层Cont原创 2016-10-31 21:03:44 · 2515 阅读 · 0 评论 -
Nova API服务 之 处理HTTP请求的流程
一、回顾1、Nova API服务的主要功能都在osapi_compute_app_v2应用程序中实现。osapi_compute_app_v2应用程序对应的工厂方法是APIRouter类的factory方法。APIRouter类的factory方法会返回一个APIRouter对象。当客户端发送HTTP请求的时候,会调用APIRouter对象的__call__方法。2、APIRout原创 2016-10-30 22:44:13 · 2933 阅读 · 2 评论 -
理解RESTful架构
RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。但是,到底什么是RESTful架构,并不是一个容易说清楚的问题。下面,我就谈谈我理解的RESTful架构。一、起源 ............二、名称 REST,即Representational State Transfe转载 2016-10-06 22:36:38 · 664 阅读 · 0 评论 -
OpenStack Liberty环境下冷迁移虚拟机报错的解决办法
类似于以下报错,通常都是nova用户ssh无密码登录设置不对。Command: ssh 10.0.0.31 mkdir -p /var/lib/nova/instances/eac0e362-352f-45ad-b503-d28e588691beExit code: 255Stdout: ''Stderr: 'Host key verification failed.\r\n'.转载 2017-04-05 23:08:50 · 931 阅读 · 0 评论 -
Openstack基础知识Eventlet
exentlet中的应用,看见前辈们总结的很好,对于小白来说而且学习起来不费劲,直接转载过来。同时也向作者表示感谢。 这是eventlet的官方网站:http://eventlet.net/ Eventlet库在OpenStack服务中上镜率很高,尤其是在服务的多线程和WSGI Server并发处理请求的情况下,深入了解eventlet库是很必要的。Eventlet库是高性能网络库,其主要依转载 2017-04-08 13:15:53 · 1150 阅读 · 0 评论 -
openstack Linux bridge实现neutron网络
Linux bridge实现虚拟交换机的基本原理br0是linux bridge,br0充当虚拟交换机的作用,负责将物理网卡eth0和虚拟机网卡tap设备vnet0/vnet1连接到同一个二层网络,实现虚拟机VM1和VM2,以及虚拟机与外网之间的通信。 Linux-bridge支持local、flat、vlan和vxlan四种网络类型,目前不支持gre。一、local原创 2017-12-04 19:58:21 · 5324 阅读 · 0 评论 -
openstack oslo_config 和 oslo_log库
一、oslo.config库的作用和概念理解openstack中的 oslo.config库用于解析命令行和配置文件中的配置选项,把配置项直接融入代码内。在本文的语境下,有这么几个概念:配置文件:用来配置OpenStack各个服务的ini风格的配置文件,通常以.conf结尾;配置项(options): 配置文件或命令行中给出的配置信息的左值,如:enabled_apis =原创 2017-04-13 16:32:20 · 3537 阅读 · 1 评论 -
rabbitmq的命令和Web UI管理消息服务器
1、文件的解压.tar.gz文件,这种文件是tar文件的压缩文件,可以使用tar命令进行解压。单纯的.gz文件解压,这种文件不可以使用tar命令解压,需要用gunzip解压,使用命令gzip。2、rabbitmq的rabbitmq Web UI 监控页面的端口:15672端口不能进行登录默认安装中,我们只能用命令 rabbitmqctl 监控 RabbitMQ,比如:rab原创 2017-04-18 23:45:23 · 4101 阅读 · 0 评论 -
openstack oslo.messaging库
根据OpenStack官网介绍,oslo.messaging库就是把rabbitmq的Python库做了封装,在openstack中调用RPC通信就要调用oslo.messaging库,为RPC和事件通知提供一套统一的接口。下面介绍oslo.messaging在RPC通信过程中两个重要部分,RPC Client,Server。Server是RPC服务器提供多个端点,每个包含一组远程调用客户原创 2017-04-13 22:13:25 · 4708 阅读 · 0 评论 -
Routes模块详解
大神博客,对我的基础只是补充起到很好的帮助。http:://blog.youkuaiyun.com/spch2008/article/details/ 表示感谢。开始启程!!!一、开始routes模块之旅例子1:直接上代码:from routes import Mappermap = Mapper() #生成的是 Mapper()实例对象print mapprint type(原创 2016-10-07 18:40:21 · 11057 阅读 · 2 评论 -
11.2.5、搭建RESTful API 之 实现WSGI服务的URL映射
问题引出:对于一个稍具规模的网站来说,实现的功能不可能通过一条URL来完成。如何定义多条URL,也是RESTful API考虑的问题。原创 2016-10-12 22:43:42 · 2140 阅读 · 1 评论 -
opensatck基础知识----AMQP的基础概念
Kombu是一个为Python写的消息库,目标是为AMQ协议提供一个傻瓜式的高层接口,让Python中的消息传递变得尽可能简单,并且也提供一些常见消息传递问题的解决方案。AMQP全称Advanced Message QueuingProtocol,是一个开放标准协议,定义一个异步消息传递所使用的应用层协议规范。知名的RabbitMQ服务器就是它的一个实现。RabbitMQ实现了AMQP的消息中原创 2017-04-09 11:58:27 · 770 阅读 · 0 评论 -
RabbitMQ学习小结(六)----远程调用
一、引出问题1、前面的例子都有个共同点,就是发送端发送消息出去后没有结果返回。如果只是单纯发送消息,当然没有问题了,但是在实际中,常常会需要接收端将收到的消息进行处理之后,返回给发送端。2、处理方法描述:发送端在发送信息前,产生一个接收消息的临时队列,该队列用来接收返回的结果。其实在这里接收端、发送端的概念已经比较模糊了,因为发送端也同样要接收消息,接收端同样也要发送消息。3、原创 2016-10-19 23:30:25 · 1309 阅读 · 0 评论 -
RabbitMQ学习小结(三)----交换机
前面都只使用了一个队列,消息是依次发送给绑定到该队列的接收端。每次消息都只会发送给其中一个接收端,如果需要将消息广播出去,让每个接收端都能收到,那么就要使用交换机。本篇演示了交换机的工作方式。一、发布/订阅1、上小节搭建工作队列,每个消息任务只能分发给一个工作者(消费者)。 分发一个消息给多个消费者。这中模式称为"发布/订阅"。2、构建简单的日志系统。第一个程序负责发送日志消息,原创 2016-10-18 23:43:05 · 5022 阅读 · 0 评论 -
11.3.1 基于消息通信的RPC调用之 AMQP简介
RESTful API是一套基于HTTP协议的通信机制。但是,这样的通信机制存在一下不足:(1)、由于采用的是HTTP协议,客户端服务器之间所能传送的消息仅限于文本。(2)、客户端与服务器之间采用同步机制。当发送HTTP请求时,客户端需要等待服务器的响应。(3)、客户端和服务器之间可以单独开发,但是还是存在耦合。例如:客户端发送请求时,必须知道服务器的地址,且保证服务器正常工作原创 2016-10-17 20:13:34 · 1580 阅读 · 0 评论 -
Nova Conductor服务
Nova Conductor服务的大部分方法都是数据库的查询操作(/nova/conductor/manager.py ConductorManager类)。主要作用是避免Nova Compute服务直接访问数据库,增加系统的安全性。一、引入nova conductor服务1、nova compute服务的数据库查询更新操作都需要通过向nova conductor服务发送RPC原创 2016-11-07 21:34:24 · 12635 阅读 · 0 评论 -
OpenStack Nova分析——Nova Scheduler调度算法分析(4)
一、get_weighed_hosts方法:1、HostManager对象的get_weighed_hosts方法定义如下:/nova/schediler/host_manager.pyclass HostManager(object): def get_weighed_hosts(self, hosts, weight_properties): return se原创 2016-11-03 22:11:12 · 1455 阅读 · 0 评论 -
OpenStack Nova分析——Nova Scheduler调度算法分析(3)
一、回顾这一小节主要是过滤和权值计算。FilterScheduler的_schedule方法在实现虚拟机调度算法的时,调用了两个很重要的方法:(1)调用了HostManager对象的get_filtered_hosts方法 获取可用的计算节点列表。(2)调用了HostManager对象的get_weighed_hosts方法 计算可用计算节点的权值。/nova/schedule原创 2016-11-02 23:18:14 · 1807 阅读 · 0 评论 -
11.2.4、搭建RESTful API 之 利用类来实现
通过上一节的学习,已经可以很容易的添加和删除功能模块了。但是还存在一下不足:(1)、上一节过滤器和应用程序都是用方法来实现的。对于实现比较复杂的功能显然不是很好(2)、通过httpd.serve_forever()来启动WSGI服务,使得一个进程对应一个WSGI服务。对于ESGI服务的启动、关闭和暂停都需要直接对进程进行操作,带来了很多不便。(3)、利用类来实现过滤器和一个应用程序原创 2016-10-12 22:28:58 · 451 阅读 · 0 评论 -
进一步详解WSGI
还是老样子,需要知道什么是WSGI?一、什么是WSGI(1)、WSGI(Web 服务器网关接口)是python中所定义的Web服务器和Web应用程序之间或框架之间的接口标准规范(2)、WSGI接口规范的目的就是规范Web服务器与Web应用之间的交互,在协议之间进行转换(3)、WSGI将Web组件分成三类:Web服务器(Server)、Web中间件与Web应用程序。原创 2016-10-07 13:21:04 · 8480 阅读 · 3 评论 -
11.2.3、搭建RESTFUL API 之 带过滤器的WSGI服务
1、如果把一个WSGI服务的所有功能都放在一个方法中,显然不利于扩展。2、如果把每一个独立的小功能放在一个方法里,而整个WSGI服务,是由若干个方法串联起来的一个大应用程序。3、当需要对WSGI服务进行扩展时,只需要往WSGI服务中添加或删除某些方法。添加或删除方法只需要简单的修改configure.ini配置文件即可。具有很强的伸缩性。代码实例:配置文件configu原创 2016-10-11 21:24:34 · 570 阅读 · 0 评论 -
11.2.2、搭建RESTful API之使用PasteDeploy定制WSGI服务
WSGI服务的相关相关基础只是前面已经介绍,而且Paste模块也有所介绍。现在就一步一步实现paste模块的每个功能。一、知识点讲解1、为什么需要 PasteDeploy 模块? 一个 WSGI服务 的核心部分,是它的应用程序。如果WSGI服务的应用程序修改了,那么WSGI相应的功能也就改变了。2、通过配置文件来配置 WSGI 服务的应用程序,当需要对WSGI服务的应用程序进行修改原创 2016-10-10 23:36:14 · 837 阅读 · 0 评论 -
openstack nova 基础知识——eventlet
openstack的Eventlet库在openstack服务中上镜率很高,尤其是在服务的多线程 和 WSGI服务器并发处理请求的情况下,深入理解eventlet库很有必要。这也是进入nova世界的关键,涉及一个很重要的概念:"协程"。eventlet库是由second life开源的高性能网络库,从eventlet的源码可以知道,其主要依赖两个关键的库:(1)、greenlet原创 2016-10-08 23:26:19 · 2822 阅读 · 0 评论 -
11.3.2、基于消息通信的RPC调用 之 RabbirMQ分析
本小节内容:分析RabbitMQ的工作原理。在openstack中,主要是Nova用到了RPC调用。将介绍Nova如何通过RabbitMQ实现RPC调用。一、openstack Nova的服务间通信机制Openstack Nova中是由许多组件构成的。而不同的服务之间,都是通过RPC来实现通信。同时,由于采用的是AMQP协议,因此组件之间具有很强的松耦合性。表现在:(1)、原创 2016-10-17 22:04:14 · 1458 阅读 · 0 评论 -
RabbitMQ学习小结(一)----hello world
一、RabbitMQ介绍RabbitMQ是一个消息代理。核心原理:接收和发送消息。RabbitMQ将发送消息和接收消息进行解耦,由此来实现应用程序的异步处理。如果将RabbitMQ视为一个服务,从大方向来看,RabbitMQ做了三件事情:1. 收取请求 存储 交换 路由2. 存储请求信息 3. 分发请求引用官网原文,你可以把它想像成一个邮局:你把信件放入邮原创 2016-10-18 20:49:52 · 3808 阅读 · 0 评论 -
WSGI、webob、routes实例
程序代码:from wsgiref.simple_server import make_serverfrom routes import Mapper,middlewarefrom webob import Request,Responseimport webob.decimport webob.excclass Controller: @webob.dec.wsgify原创 2016-10-07 21:31:15 · 1644 阅读 · 0 评论 -
routes的 middleware.RoutersMiddleware
RoutesMiddleware将HTTP的URL请求应声到相应WSGI函数,并且将路由匹配结果存到environ环境变量中去。from routes.middleware import RoutesMiddlewareapp = RoutesMiddleware(wsgi_app, map) # map is a routes.Mapperapp = RoutesMiddlewa原创 2016-10-07 20:06:25 · 1297 阅读 · 0 评论 -
@wsgify装饰器
Webob中针对WSGI接口设计了@wsgi装饰器,简化程序的书写,作用就是将一个函数转换成一个WSGI应用。wsgifyclass webob.dec.wsgify(func=None, RequestClass=None, args=(), kwargs=None, middleware_wraps=None) 将一个request实例对象作为输入,response作为输出原创 2016-10-07 14:29:11 · 1639 阅读 · 0 评论 -
RabbitMQ学习小结(五)----主题交换机
前面的一小节路由键是精确匹配的,路由键的功能,通过设置路由键,可以将消息发送到相应的队列,这里的路由键是要完全匹配,比如info消息的只能发到路由键为info的消息队列。有时用需要路由键模糊匹配,本篇主要演示了路由键模糊匹配的工作方式,主要依赖于使用另一种更复杂的交换机—— 主题交换机。一、主题交换机1、发送到主题交换机(topic exchange)的消息不可以携带随意什么样原创 2016-10-19 16:58:47 · 1639 阅读 · 1 评论 -
RabbitMQ学习小结(四)----路由
关于交换机的使用,已经能实现给所有接收端发送消息,但是如果需要自由定制,有的消息发给其中一些接收端,有些消息发送给另外一些接收端,要怎么办呢?这种情况下就要用到路由键了。一、路由路由键的工作原理:每个接收端的消息队列在绑定交换机的时候,可以设定相应的路由键。 发送端通过交换机发送信息时,可以指明路由键 ,交换机会根据路由键把消息发送到相应的消息队列,这样原创 2016-10-19 15:58:25 · 1976 阅读 · 0 评论 -
Nova API服务之Nova API服务的启动
Nova API的启动和工作流程。openstack的每个组件都提供API服务,用于接收和处理客户端的HTTP请求。Nova API服务是一个RESTful API服务。1、Nova API服务的启动2、着重介绍与虚拟机资源有关的url请求的处理流程3、虚拟机创建的HTTP请求处理过程15.2.1 Nova API服务的启动1、Nova API的地图引导: /etc/nov原创 2016-10-28 22:25:50 · 2245 阅读 · 0 评论 -
Nova框架介绍
openstack是云计算平台。云计算,核心功能就是通过虚拟机实现对服务器计算资源(CPU资源)的分配。虚拟机的管理显然是云计算平台的核心功能。 接下来几节主要分析openstack Nova如何实现对虚拟机的管理。1、掌握虚拟机的创建请求及启动流程2、了解Nova RPC服务的启动流程3、掌握Nova Scheduler虚拟机调度算法4、了解Nova Conductor服务原创 2016-10-28 20:56:18 · 5590 阅读 · 1 评论