摘要:本文主要剖析openstack的整体架构部分,然后分析nova各个子系统模块的功能、协作运行机理。
整体架构
1.整体架构剖析
关键需求,决定架构。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相关的计算、存储、网络、镜像以及认证和界面服务。
2.逻辑架构
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.
3.运行架构
.API接口操作DB实现资源数据模型的维护,通过消息中间件AMQP,通过相应的守护进程如nova-compute、nova-networ/quantum等实现服务接口。与守护进程共享DB数据库,但收据程序侧重维护状态信息,如虚拟机状态,网络资源状态等。守护进程之间不能互相调用,需要通过API调用,如nova-compute为虚拟机分配网络,需要调用nova-api,而不是直接调用nova-network。
4.开发架构
源代码可以到官网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
5.物理架构
我们以开源平台项目abiCloud为例,谈谈虚拟机平台管理的几大关键药书
网络上划分为管理网、数据网、存储网络、公网。
管理网:宿主物理机、虚拟机平台控制器、镜像管理、存储管理、DHCP管理。
数据网:虚拟机、虚拟交互机、VLAN和IP池管理,DHCP服务器也要访问数据网从而动态分配地址。数据网可以包含多个不同的VLAN。
存储网(可选的,可以与管理网融合):实际环境下,存储网路和管理网络是不同的,宿主物理级的存储更多采用磁盘阵列,通过交换机连接到计算节点。宿主物理机有三个以上的网卡:连接存储网(HBA卡)/管理网、数据网。
公网:
管理网内控制节点安装相关API服务、调度scheduler、存储volume、镜像glance;数据库和消息中间件安装在独立服务器中;监控和界面部署安装到另外的服务器从而实现负载平衡。根据安装组件的不同,服务器节点可以划分成以下几种
计算节点:nova-compute
存储节点:nova-volume或者cinder-volume
网络节点:nova-network/quantum server
控制节点:nova-api、scheduler
功能剖析
1.消息队列协议AMQP
高级消息队列协议AMQP是一个异步消息传递所使用的应用层协议规范。消息队列在openstack中是计算节点nova-compute、存储节点nova-volume、网络节点nova-network以及API和各个功能模块之间相互通信写作的重要媒介。AMQP可以采用rabbitMQ、Apid等消息中间件来实现。Nova组件通过RPC实现相互通信。采用典型的发布/订阅模式。
2.调度器——nova-scheduler
nova-scheduler是Nova中最简单的一个模块:从AMQP队列中接受一个RPC消息,然后根据特定的策略将这个消息转发给其认为最合适的compute主机。考录到部署环境和业务的差异性,要选择一个最为合适的消息调度策略非常复杂。Nova调度其支持各种可能的因素进行决策,比如Compute负载、内存使用率、可用区域的物理距离等。为了应对各种稀奇古怪、甚至不可预见的调度策略,Nova调度器是以一种插件的架构来实现的。
2.1过滤
每个计算节点都会在Nova数据库的compute_nodes表中保存你一个对应的表项,记录了计算节点所有可用的能力信息——内存容量、虚拟CPU个数、硬盘容量等。在进行过滤之前,需要先获取所有可用的计算节点信息,步骤如下:(1)从compute_nodes表中获取计算节点的能力信息,并加入计算节点集合。
(2)从数据库获取已经创建的云主机的实例信息。
(3)从云主机所在的计算节点中减去云主机实例所占用的资源,从而得到剩余资源。
2.2权衡
(1)创建一个何曾本计算函数结果的矩阵,每个主机对应于一行,每个成本计算函数对应于一列
(2)根据权重银子和成本计算函数来计算矩阵中每个单元的值
(3)每行各列相加,得到主机权重
(4)取权重最小的作为最优选择。
3.计算资源管理
libvort实现kvm、qemu等hypervisor的集成,计算资源服务通过适配的方式提供对不同虚拟化技术的集成,nova-api通过调度其发送计算资源管理指令到计算节点nova-compute,计算节点nova-compute接受指令之后,获取信息调用底层虚拟化适配libvirt中的不同驱动driver,与底层虚拟化软件进行交互。
4.存储资源管理
4.1常见的存储概念
直连式存储(DAS),我们常见的物理主机包含硬盘,通过足迹的服务总线链接来提供存储服务。可以解决单台服务器的存储空间扩展,高性能传输需求,以快设备的方式提供存储服务。网络接入存储(NAS),独立于主机、弯度为网络数据存储尔开发的一种文件服务器。NAS服务器集中连接了所有的网络罗数据存储设备,扩展性好,同时这种网络存储方式是NAS服务器独立承担的。所以,对原来的网络服务器性能基本没有影响。NAS&&DAS最大的别却是NAS蔡永乐文件系统方式,尔DAS采用了快设备方式。NAS存储一般采用NFS协议的方式,实现不同主机之间的文件共享。
存储区域网络san,不是将所有的存储设备集中安装在一个专门的nas服务器中,而是将存储设备通过交换机连接起来,形成存储网络。因为网络传输协议的不同,san种类也有所不同。
大规模的生产环境一般都采用san,nova蔡永乐iscsi协议的存储方式。nova-volume存储适配有多种方式,有基于iscsi的IP-SAN方式,有规划中的集群文件系统Ceph方式。在Folsom版本后渐引入了Cinder项目,用于替换nova-volume模块,Cinder具备更强大的管理能力。
4.2Cinder功能
Cinder的功能是实现存储服务,根据实际需要快速为虚拟机提供设备创建、挂载、回收以及快照备份控制等。Cinder包括API、调度Scheduler和存储适配cinder-volume 3个服务,其中cinder-volume可以部署到多个节点上。cinder-scheduler和nova-scheduler类似,根据服务寻找合适的服务器cinder-volume,发送消息到cinder-volume节点,由cinder-volume提供弹性云存储服务。
因为实际环境中,存储服务厂商有很多,采用了各种各样的存储访问协议,如ISCSI、NFS等。这就需要进行适配,根据API服务提供的接口来实现块设备的提供。所有的存储设备中使用的连接协议基本都是iSCSI和NFS两种,从计算节点使用的角度来说,他们很相似,我们接下来剖析这两种协议。
4.3iSCSI适配
iscsi又称为IP——SAN,是一种基于internet和scsi-3协议之下的存储技术,通过IP协议将存储设备连接到一起,实现数据传递,它是SAN市场快速发展的因素之一。iSCSI后端存储架构有三种——控制器架构、pc架构、pc+toe架构
openstack如何基于机架方式服务器方式的软件iSCSI服务?
1)存储节点部署上nova-volume/cinder-volume之后,作为存储target提供块设备服务。
2)计算节点nova-compute作为存储客户端Initiator,查找存储节点的存储单元LUN,并挂载到本机,识别为块设备,并分配设备给虚拟机。
4.4 NFS适配
与上面不同,NFS是文件系统,可以理解为文件夹(目录),它最大的特性是文件共享。
5.网络资源管理
5.1 IP资源管理
5.2 DHCP自动分配IP
5.3 网络连接管理
5.4 虚拟交换机管理
5.5 nat网络映射
5.6 网络安全管理
5.7 Quantum 项目介绍