摘要:本文主要剖析openstack的整体架构部分,然后分析nova各个子系统模块的功能、协作运行机理。
整体架构
关键需求,决定架构。openstack的设计目标是实现100万台主机和6000万台虚拟主机的管理能力。整个openstack项目可被设计成大规模灵活扩展的云计算操作系统。为了达到以上目标,我们需要具备如下功能。
@@@项目所有的子系统和服务都被集成起来,一起提供IAAS服务
@@@通过标准化公用服务接口API实现集成
@@@子系统和服务之间,通过API相互调用
openstack的核心和扩展的主要项目如下:
对象存储——swift。通过简单的key/value方式实现对象文件的存储,适用于“一次写入,多次读取,无需修改”的场景。对象存储俗称云存储,例如国外的dropbox、box和国内的快盘等。而dropbox是基于亚马逊的S3API接口开发的典型案例。
镜像管理(Image)——glance,提供虚拟磁盘镜像的目录分类管理以及镜像库的存储管理,用于openstack虚拟机
计算管理——nova,提高虚拟主机,包括虚拟机、弹性云硬盘等服务。
网络管理——nova-network和Quantum,实现虚拟机的网络资源管理,包括网络链接、子网IP管理、L3的公网映射和后续的负载均衡
块存储——nova-volume和Cinder,实现对块存储的管理,类似弹性云硬盘,为虚拟机提供云硬盘(块设备)服务。
认证管理——keystone,为openstack所有的系统提供统一的授权和身份验证服务
界面展示——orizon,基于openstack API接口开发的Web实现
本篇的nova包括了除了对象存储之外的所有模块,泛指与云主机EC2相关的计算、存储、网络、镜像以及认证和界面服务。
nova的各个逻辑模块可以互相交互,其中最和新的AMQP通过消息中间件实现各个模块之间的消息通信。各个模块职责如下。
1)nova-api 负责接受和相应终端用户有关虚拟机compute和云硬盘Volume的请求。在Essex版本的nova-api已经模块化之后,可以自行实现执行特殊的nova API。nova-api是整个Nova的入口。它接收用户请求,将指令发送到消息队列AMQP制定的主题Topick,由订阅相应主题Topic的守护进程接收和执行相关消息。
nova-api包含两大部分,WSGI API && RPC API,前者是面向公众服务的接口,报货数据封装格式转换和数据校验;后者是标准化服务的内部实现,保罗数据库操作消息传递等,比如compute-api、network-api、volume-api,同城API Server,在运行架构章节,将描述此类接口。
2)nova-compute是主要的执行守护进程,职责是基于各种虚拟化技术Hypervisior,实现虚拟机的创建和终止。nova-compute有两个工作,接收消息队列中的执行指令,并执行相关指令,如部署kvm虚拟机;维护数据库相关模块的状态数据。
nova-compute整合了计算资源CPU/内存、存储、网络3类资源部署管理虚拟机,实现计算能力的交互。包括如下的内容
@@@运行/终止/重启虚拟机
@@@挂载/卸载云硬盘
@@@控制台输出
3)nova-volume/Cinder的职责是创建、挂载和卸载持久化的虚拟机。nova-volume可以用ihe分布式文件系统CEPH的Rados Block Device来实现
4)nova-network的职责是实现网络资源的管理,包括IP、VLAN、网桥接口、防火墙等的管理。运行机制也和nova-compute类似,从AMQP接收信息,并进行处理
5)nova-schedule的职责是调度虚拟机在哪个宿主机上部署。该模块是非常值得挖掘和深入发展的,调度算法可以根据业务目标进行扩展。
总结:AMQP消息中间件蔡永乐RabbitMQ,也可以用任何AMQP协议的消息中间件,如Apache的 Apid.
.API接口操作DB实现资源数据模型的维护,通过消息中间件AMQP,通过相应的守护进程如nova-compute、nova-networ/quantum等实现服务接口。与守护进程共享DB数据库,但收据程序侧重维护状态信息,如虚拟机状态,网络资源状态等。守护进程之间不能互相调用,需要通过API调用,如nova-compute为虚拟机分配网络,需要调用nova-api,而不是直接调用nova-network。
源代码可以到官网www.openstackorg/launchpad.net下载;devstack安装的可以到/opt/stack找到源码;手动安装的,在/usr/lib/python2.7/dist-package/nova。
具体的开发架构如下:
./flagspy 配置信息,提高对应nova.conf
./sevice.py 服务守护进程主程序
./api 对外通过标准化的RESTful接口提供服务
./api/openstack 提供openstack nva rest api 接口服务
./api/ec2 提供兼容亚马逊标准化服务接口
./conpute 计算资源池
./compute/api.py
./compute/manager.py
./network
./volume
./scheduler
./db 数据模型存储,采用sqlalchemy实现ORM
我们以开源平台项目abiCloud为例,谈谈虚拟机平台管理的几大关键药书
网络上划分为管理网、数据网、存储网络、公网。
管理网:宿主物理机、虚拟机平台控制器、镜像管理、存储管理、DHCP管理。
数据网:虚拟机、虚拟交互机、VLAN和IP池管理,DHCP服务器也要访问数据网从而动态分配地址。数据网可以包含多个不同的VLAN。
存储网(可选的,可以与管理网融合):实际环境下,存储网路和管理网络是不同的,宿主物理级的存储更多采用磁盘阵列,通过交换机连接到计算节点。宿主物理机有三个以上的网卡:连接存储网(HBA卡)/管理网、数据网。
公网:
管理网内控制节点安装相关API服务、调度scheduler、存储volume、镜像glance;数据库和消息中间件安装在独立服务器中;监控和界面部署安装到另外的服务器从而实现负载平衡。根据安装组件的不同,服务器节点可以划分成以下几种
计算节点:nova-compute
存储节点:nova-volume或者cinder-volume
网络节点:nova-network/quantum server
控制节点:nova-api、scheduler
功能剖析
(4)取权重最小的作为最优选择。
libvort实现kvm、qemu等hypervisor的集成,计算资源服务通过适配的方式提供对不同虚拟化技术的集成,nova-api通过调度其发送计算资源管理指令到计算节点nova-compute,计算节点nova-compute接受指令之后,获取信息调用底层虚拟化适配libvirt中的不同驱动driver,与底层虚拟化软件进行交互。