OpenStack Compute(Nova)功能分析

2011-11-29 10:27:59 | 作者: QY003 | 36 次阅读

 

 

OpenStack Compute 提供给一个组织云的工具,其中的功能包括运行虚拟机实例, 管理网络以及通过用户和项目来控制对云的访问。OpenStack最基础的开源项目名字称为Nova,它提供的软件可以控制基础设施即服务(IaaS)云计算平台,和Amazon EC2和Rackspace云服务器有一定程度相似。OpenStack Compute 没有包含任何的虚拟化软件,相反它定义和运行在主机操作系统上的虚拟化机制交互的驱动程序,并通过基于Web的程序应用接口(API)来提供功能的使用。

功能分析Compute的组件和及其作用

OpenStack Compute是由几个主要的组件所组成的。

云控制器(cloud controller)包含了很多组件,API服务器(nova-api),计算服务器(nova-Compute),网络控制器(nova-network),调度器(nova-schedule),卷控制器(nova-volume),消息队列(queue),DashBoard。

API 服务器为云控制器扮演着web服务前端的角色。这个云框架的核心是API服务器。API服务器命令和控制hypervisor,存储还有网络,让用户可以实现云计算。API端点是一个基础的HTTP网页服务,通过使用多种API接口(Amazon,Rackspace和相关的模型)来提供认证,授权和基础命令和控制功能,增强了API和多种其他供应商已经存在的资源池的兼容性。

计算控制器(Compute controller)提供了计算服务器资源,其中包含计算服务。Compute控制器控制运行在宿主机上的计算实例。可以通过使用API的方式把命令分发到Compute控制器,进行以下的操作:

  • 运行实例
  • 结束实例
  • 重启实例
  • 接触卷
  • 断开卷
  • 获得控制台输出
  • 对象存储(Object Store)组件选择性提供存储服务。
  • 授权管理器(auth manager)提供认证和授权服务。
  • 卷控制器(volume controller)为Compute服务器提供了快速持久的块级别存储。卷工作处理器和iSCSI存储进行交互,管理基于LVM的实例卷,其中可以进行的操作包括:
  • 创建卷
  • 删除卷
  • 创建计算卷

卷可以在实例间传送,但是一次只能连接到一个实例。

网络控制器(network controller)提供了虚拟网络,使得Compute服务器和其他的Compute服务器以及外网进行交互。

网络控制器管理在宿主机上的网络资源。API服务器通过消息队列分发命令。这些命令之后会被网络控制器处理,特定的操作有:

•        分配固定IP地址

•        为项目配置VLAN

•        为计算节点配置网络

目前为止,Nova只支持Linux网桥网络使得虚拟接口可以通过物理接口链接到外部网络。网络控制器提供了虚拟网络来使得计算服务器之间互相交互以及和公共网络交互。

Nova支持3种类型的网络,实现成3种相对应的“网络管理”类型:

•        Flat网络管理模式

•        Flat DHCP网络管理模式

•        VLAN网络管理模式

这3种类型的网络管理模式可以在一个云系统里面共存。然而,如果没有为一个给定的项目选择它的网络管理类型,就不能在一个给定的Compute安装中配置多于一种类型的网络模式。

Nova有固定IP和浮动IP的概念。固定IP被分发到创建的实例,然后实例持有固定IP直到实例被显式地停机。浮动IP是一些可以和实例动态相连的IP地址。这些地址在任何时刻可以断开连接或者连接到另外的实例。用户可以为他们的项目保留一个浮动的IP地址。

•Flat模式

网络管理员指定一个子网。为虚拟机实例分配的IP地址都是从这个子网内面获取,然后在虚拟机启动时候注入虚拟机镜像。每个实例从有效地址池接收到一个固定的IP地址。网络管理员必须要配置好Linux网桥(名为br100),包括拥有网络的网络控制器还有拥有实例的云控制器。所有的系统实例都是和同一个网桥所相关的,网络管理员需要手动配置相连关系。注意:目前为止配置注入只能够Linux类型的操作系统正常工作,网络配置保存在/etc/network/interfaces路径。

•Flat DHCP模式

启动一个DHCP服务器,把从一个指定的子网中获得的IP地址传递到虚拟机实例,此外网络管理员还需手动配置网桥。为虚拟机实例所分配的IP地址都是从网络管理员指定的子网中所获得的。就像Flat模式一样,所有的实例都在计算节点中和一个网桥相关。除此以外需要一个DHCP服务器运行来配置实例。在这个模式里面,Compute做了更多一些的配置,尝试和以太网设备(默认为eth0)建立网桥。Compute也会运行dusmasq作为DHCP服务器监听这个网桥。之后实例做一次dhcpdiscover操作来接收他们的固定IP。

在两个Flat模式里面,网络节点没有扮演默认网关的角色。实例都被分配了公共的IP地址。Compute节点持有每个项目和实例都会创建的iptables/ebtalbes实体,来抵抗IP/MAC地址欺骗或者是ARP欺骗。

•VLAN网络模式

OpenStack Compute的默认模式。在这个模式里面,Compute为每个项目创建了VLAN和网桥。为了实现多台机器的安装,VLAN网络模式需要一个支持VLAN标签(IEEE 802.1Q)的路由器。每个项目获得一些只能从VLAN内部访问的私有IP地址。为了实现用户获得项目的实例,需要创建一个特殊的×××实例(代码名为cloudpipe)。Compute为用户生成了证明书和key,使得用户可以访问×××,同时Compute自动启动×××。它为每个项目的所有实例提供一个私有网络段,这个私有网络段都是可以通过因特网的×××访问的。在这个模式里面,每个项目获得它自己的VLAN,Linux网桥还有子网。被网络管理员所指定的子网都会在需要的时候动态地分配给一个项目。DHCP服务器为所有的VLAN所启动,从被分配到项目的子网中获取IP地址并传输到虚拟机实例。所有属于某个项目的实例都会连接到同一个VLAN。OpenStack Compute在必要的时候会创建Linux网桥和VLAN。

调度器(scheduler)选择最合适的Compute控制器来放置一个实例,实现负载均衡。

消息机制 OpenStack Compute 是建立在无共享(shared-nothing)的,基于消息(messaging-based)架构上的。在多服务器上运行所有的主要组件包括Compute 控制器,卷控制器,网络控制器以及对象存储。云控制器通过HTTP协议和内部对象存储通信。但是云控制器和调度器,网络控制器以及卷控制器是通过AMQP协议(Advanced Message Queue protocol),即高级消息队列协议来通信。为了避免在等待响应的时候造成每个组件阻塞,OpenStack Compute使用了异步调用,当响应被接收时候会触发回调。为了取得同样组件的多份拷贝的无共享属性,OpenStack Compute 在分布式数据存储上保存了整个云系统的状态。对系统的更新会被写入到存储里面,必要时会使用原子性的事务来进行这个操作。对状态的请求会从存储里面读出。在有限的例子,读取的结果在很短的时间之内缓存到控制器里面。

一个典型的消息传递事件从API服务器接受来自用户的请求开始。这个API服务器授权这个用户,保证用户是被允许发起相关的命令。在请求中所涉及到的对象的有效性被评估,如果评估有效,为了相关的工作处理器,这请求会被路由到消息引擎。工作处理器在它们各自角色或者主机名的基础上监听这个队列。当监听产生了工作请求,工作处理器接收这个任务并开始执行。完成之后,响应会分发到队列里面。队列会被API服务器接收和转述到发起请求的用户。在整个过程中数据库实体会根据需求被查询,增加或者消除。

基于网页的控制台DashBoard

在OpenStack Compute安装时搭配OpenStack DashBoard and Django-Nova 项目提供的基于网页的控制台,可以使用DashBoard接口。Django提供了和OpenStack Compute云控制器基于网页的交互。为了创建一个更有鲁棒性的和为产出准备的安装,需要用Apache网页服务器和MySQL/Postgres数据库进行配置。

支持虚拟机热迁移

支持集群安装(使用Puppet)

使用Puppet进行集群自动安装的方法在下面的配置下经过测试:

•        多服务器上安装nova-Compute组件

•        操作系统:ubuntu10.04或者ubuntu10.10

•        多网络模式(Vlan模式,Flat模式)

支持EC2 API 

EC2 API 提供了客户迁移,允许用户继续使用熟悉的EC2 API来管理他们的解决方案直到他们学会利用本地的具有高性能的OpenStack API。