基于OpenStack构建私有云计算平台*

2012-10-08 01:58李小宁金连文黎德生
电信科学 2012年9期
关键词:源码镜像硬盘

李小宁,李 磊,金连文,黎德生

(华南理工大学电子与信息学院 广州 510640)

1 引言

自从2006年Google首席执行官埃里克·施密特在搜索引擎大会上首次提出 “云计算”(cloud computing)的概念,云计算就成为近几年来IT领域一个非常热门的研究方向。它使用户能够通过网络便利、按需地从一个共享的、可配置的资源池中获取计算、存储、网络等资源[1]。而在云计算的3种部署模式(公有云、私有云、混合云)中,公有云虽然以其低廉的价格、灵活的弹性策略吸引大量的用户,但是对于很多企业来说,和业务相关的数据是其生命线。由于公有云存储数据的地方并不是企业本地,因此在使用指定防火墙之外且更接近公共区域处的应用的安全问题引起了大家的关注[2]。

因此,构建一个私有云平台,使之主要为企业内部提供云服务,不对公众开放,在企业的防火墙内工作,并且企业IT人员能对其数据、安全性和服务质量进行有效的控制[3],成为倍受大企业青睐的选择。此外,私有云能够提供更高效、个性化的弹性计算资源分配能力,能够更有效地利用企业内部现有的IT设备资源,打造更符合企业需求的云平台。

鉴于上述提到的公有云的数据安全问题,本文的出发点在于:

·如何构建一个适合本地环境的私有云;

·针对实验室或开发环境构建一个云计算平台,使实验室可以针对数据安全、计算资源的按需获取等进行评估和探索。

在实际试验中,本文基于OpenStack开源工具软件包,实现了在科研实验室环境中搭建私有云计算平台,使得资源能够得到弹性分配,且确保数据安全。

2 系统框架

2.1 OpenStack简介

OpenStack是由Rackspace和美国国家航空航天局(NASA)共同开发的云计算平台,帮助服务商和企业内部实现类似于Amazon EC2和S3的云基础架构服务(infrastructure as a service,IaaS)[4]。自2010年10月开始 ,OpenStack 至今已经发布了 Austin、Bexar、Cactus、Diablo 以及Essex这5个版本。由于OpenStack采用Apache2.0许可证发布源代码,因此在短短两年时间内就吸引了IBM、Cisco、HP等175个企业及组织的加入。

OpenStack采用模块化设计,它的3个主要模块Nova(计算服务)、Swift(存储服务)和 Glance(镜像服务),既可以组合在一起联合工作,提供完整的云基础架构服务;又可以独立工作,分别提供虚拟化、云存储和镜像服务。此外,模块化的设计能把老、旧、第三方的技术集成进来,从而满足业务需要,也使得开发者能够更容易地对OpenStack进行二次开发。

2.2 私有云平台框架

基于OpenStack的开源框架介绍,本文所搭建的私有云计算平台由计算服务(Nova)、存储服务(Swift)、镜像服务(Glance)、身份认证服务(Keystone)和Web界面服务(Horizon)共5个部分组成。其中Nova是云平台的控制器,它提供一个工具部署云,包括运行虚拟化实例、管理网络以及控制用户和其他项目对云的访问[5]。Swift是一个大容量、可扩展的、内置冗余和容错机制的对象存储系统。对象存储支持多种应用,比如复制和存档数据、图像或视频服务、存储次级静态数据、开发数据存储整合的新应用、存储容量难以估计的数据、为Web应用创建基于云的弹性存储[5]等。Glance是一个虚拟机镜像的存储、查询和检索系统,服务包括的Restful API允许用户通过HTTP请求查询VM镜像元数据以及检索实际的镜像。Keystone为运行OpenStack Compute上的OpenStack云提供了认证和管理用户、账号和角色信息服务,并为OpenStack Object Storage提供授权服务。Horizon是提供给用户来使用云平台的Web前端界面,用户可以使用它进行实例、密钥、弹性块存储、镜像、云存储以及角色权限等的管理。OpenStack的5个服务的关系如图1所示。

3 构建过程

3.1 部署规划

本文搭建的私有云计算平台由客户端、控制器以及计算节点3个角色组成,其中客户端可以由实验室局域网段内任何一台物理机来构建;控制器由Nova、Glance、Swift、Keystone和Horizon组成,它们可以部署在一台物理机上,也可以分别部署在不同的物理机上,为了提高云平台的性能,减轻大量用户对云控制器的压力,本文采用的是第二种部署方法;计算节点由支持VT技术的10台物理机组成,主要用于运行虚拟化实例,提供计算服务。

由于本文搭建的私有云主要应用于科研和中小型企业环境,云平台的各个组成部分均位于同一局域网内,这样,局域网内任何一台用户端的物理机均可以直接访问或使用云计算资源。此外,为了使得云平台更安全,Nova提供了一种让虚拟化实例和外网隔离的网络方案,就是为虚拟化实例组建一个与外网隔离的私有网络,虚拟化实例通过一个内网交换机来通信。若实例需要和外网通信,那就再分配一个浮动的外网IP地址给实例。私有云的部署规划如图2所示。

3.2 部署过程

目前OpenStack可以采用StackOps光盘安装、DevStack脚本在Ubuntu上安装、源代码安装等多种方式进行构建,支持Ubuntu、Debian、Fedora等操作系统。考虑到云平台的稳定性、后续管理等问题,本文采用OpenStack源代码安装的方法进行试验,使用的系统为12.04版Ubuntu,OpenStack版本为Essex,部署过程共分为5个部分,分别为Keystone的部署、Swift的部署、Glance的部署、Nova的部署和Horizon的部署。在部署的过程中,首先都需要从OpenStack的官方代码网站https://github.com/openstack获取源代码,并把它们以及依赖项安装到物理机上。

3.2.1 Keystone的部署

Keystone是OpenStack框架中,负责身份验证、服务规则和服务令牌功能的部件。在部署OpenStack过程中,首先要安装Keystone并在Keystone中注册Nova、Swift和Glance服务,使得各项服务可以被授权和使用。Keystone的部署流程如图3所示。

本文采用源码方式安装,即采用git clone[6]方式获取官方的Keystone和Keystone client源码,创建Keyston的配置文件路径和文件以及数据库配置,其中配置文件里面比较关键的项是connection和admin_token参数设置,connection指向将要使用的数据库,而admin_token则是默认的管理员令牌,需要用它来访问Keystone的服务。完成Keystone的配置文件后,需要为Keystone数据库进行设置,Keystone服务已经具备了数据库配置指令,即“sudo keystone-manage db_sync”。

在完成基本的配置后,由于Keystone、Nova等本身就是一个服务,因此需要在Keystone服务内注册其服务。Keystone 的用户拓扑为租户(tenant)、用户(user)以及角色(role)的,它们分别表示了用户组、用户以及用户具备的权限等。实际上,Keystone并没有规定租户内有多少个角色和用户,但是基本的角色有管理员和一般用户两种。在注册各项服务前,需要在Keystone内注册一个基本的租户、用户以及一个角色,以完成各项服务的注册。在Keystone内的服务注册包括服务(service)以及服务端点(endpoint)的注册。其中服务是一个类的说明,服务端点是一个指向服务的访问链接,包括IP地址、端口号等。利用这些端点可以实现Restful方式访问OpenStack服务,通过URL调用OpenStack API。

3.2.2 Swift的部署

Swift是Rackspace开发的一个分布式云存储项目,可以实现云端文件的多节点分布式存储管理,目前已经成为OpenStack的一个核心部件。

本文采用源码方式安装,即采用git clone方式获取官方的Swift源码。Swift的配置流程如图4所示,配置的关键步骤包括以下几个。

(1)配置代理服务器(proxy server),代理服务器负责把Swift的其他部分连接起来。对于每一个请求,代理服务器将在环(ring)中查找用户(account)、容器(container)或者对象名(object),相应地将请求路由到对应的服务器上。对代理服务器的配置主要有代理服务器的绑定地址和端口以及Keystone对应的地址和端口。

(2)配置环的信息,环负责管理存储在磁盘上的一个实体的名字和这个实体所在物理位置之间的映射关系[7]。因此要创建3个环的文件,分别对应account、container和object。

(3)配置存储节点,主要步骤为格式化并挂载磁盘,分别配置 rsyncd.conf、account-server、container-server和 objectserver。Rsyncd的作用是维持存储对象的一致性并进行数据更新操作。因此,rsyncd.conf配置了存储节点所有account、container和 object对应的信息。而 account-server、container-server和object-server则分别配置了它们对应于环的端口。

(4)启动rsyncd以及Swift服务,即可使用云存储。

3.2.3 Glance的部署

Glance是OpenStack用于管理虚拟机镜像的工程,实现包括镜像的上传、验证、删除等管理。

本文采用源码方式安装,即采用git clone方式获取官方的Glance源码,Glance的部署流程如图5所示。其配置的主要步骤包括以下几个。

(1)Glance存储的配置

Glance的镜像文件可以用Swift来存储,也可以在本地存储。例如要用Swift来存储镜像文件,可把glance-api.conf文件里面的default_store=file和swift_store_create_container_on_put=False改 为 default_store=swift和swift_store_create_container_on_put=True。同时,在文件glance-api.conf、glance-api-paste.ini和 glance-registry-paste.ini中配置Keystone的相应信息。

(2)数据库配置

在glance-reigstry.conf配置文件中,配置sql_connection参数指向Glance的数据库,同时为Glance创建一个数据库来保存镜像的matadata,并且同步数据库。

(3)启动 Glance服务

启动Glance服务,并通过glance指令来验证该服务是否可用。

3.2.4 Nova的部署

Nova为OpenStack IaaS服务项目工程,可提供包括虚拟机实例、网络、云硬盘(volume)等的管理,是OpenStack 3个核心工程中最为复杂的一个,目前扩展包括Quantum和Melange等孵化项目。

本文采用源码方式安装,即采用git clone方式获取官方 的 Nova 源 码 ,包 括 nova-compute、nova-network、novascheduler、nova-api和nova-volume等子部件的源代码。图6为Nova的部署流程,在源码安装完成后,需要做以下几个工作:

·增加一个网络桥接设备,使得虚拟机可以通过网桥进行通信;

·安装tgt、iscsi等第三方工具,使得云硬盘可在各个节点相互挂载;

·安装KVM虚拟机工具,Nova是通过第三方的虚拟机工具启动实例;

·确保控制器与各计算节点的时间同步,这是因为计算节点的Nova服务会定时往控制节点的数据库写入自己的时间,然后与控制节点的本地时间做对比,假如时间差异大于某个阈值,则认定计算节点的Nova服务不正常。因此,为了保持控制节点与计算节点的时间一致性,需要将控制节点作为NTP(时间同步协议)的服务器,然后修改计算节点的NTP配置文件,使之以控制节点为时间同步服务器。

Nova的基本配置主要通过统一的配置文件/etc/nova.conf完成,其中核心的配置包括网络模式network_manager,本文选择FlatDHCPManager参数;调度策略scheduler_driver参数,本文选择MultiScheduler和glance_api_servers参数。

完成上述配置后,创建并同步Nova的数据库,最后启动Nova服务,在控制端一般启动nova-compute、nova-network、nova-scheduler、nova-api和nova-volume等服务,在计算节点仅需启动nova-compute和nova-network即可,计算节点会依据数据库的连接地址自动完成服务的注册。

3.2.5 Horizon的部署

Horizon为OpenStack的Web服务工程,采用Django结构开发。

本文采用源码方式安装,即采用git clone方式获取官方的Horizon源码,由于其自身具备Web服务,无需通过Apache启动。Horizon的配置文件为源码下的local_settings.py,主要修改包括设置参数OPENSTACK_HOST指向Keystone的IP地址。图7展示了客户端通过Horizon使用云平台的情况。

3.3 定制开发环境镜像

当OpenStack具备了控制节点、计算节点以及镜像服务后,管理员就可以为云平台定制所需的镜像,使得云平台可以向用户提供虚拟化实例。定制镜像流程如图8所示。

在定制过程中,创建虚拟磁盘及安装虚拟机的操作与Linux下运行VM一致,均采用KVM虚拟机实现[8],可直接以正常方式启动KVM完成镜像的制作。

在制作Windows镜像时,需要安装virtio驱动,同时为了避免读写硬盘I/O速率较低,可在启动KVM时加一个参数cache=none。

在制作Linux镜像时,由于70-persistent-net.rules会自动添加其他的网络接口,需要删除这个文件来避免自动添加除了 eth0以外的接口。

在制作镜像的过程中,也可以为镜像定制软件和服务,即根据实验室的开发需要,在虚拟机上安装相应的开发环境或开启相关服务[9]。这样制作的镜像被用户实例化后,用户就可以直接使用完善的软件平台服务,避免了逐一安装软件的繁琐工作,提高了工作效率。例如制作Linux镜像时,可以安装并开启VNC、远程桌面协议(RDP)等服务,这样用户就可以通过远程可视化登录使用Linux实例。

4 私有云平台搭建过程中遇到的问题和解决方法

根据构建私有云计算平台的经验,本文在此给出一些部署云平台过程中常见的问题以及解决方法。

(1)多节点部署完成后,通过nova-manage service list命令发现,计算节点的各个服务不稳定

解决办法:这是计算节点和控制节点的时间不同步造成的,通过NTP同步计算节点与控制节点的时间即可解决问题。

(2)云平台正在运行中,但是突然间某个节点的novacompute服务不正常

解决办法:导致这个问题的原因可能是某个节点的nova-compute服务停掉或者在某个节点上启动了两个libvirtd程序。因此,需要查看nova-compute服务是否正在运行,假如nova-compute服务正在运行并且有两个libvirtd程序启动,则重启libvirtd程序即可解决问题。

(3)虚拟化实例能够启动,但是无法获取私有IP地址

解决办法:由于OpenStack使用dnsmasq负责dhcp的工作,因此,假如计算节点的nova-network服务正常,则很可能是dnsmasq服务不正常,重启虚拟化实例所在的计算节点的dnsmasq服务即可。

(4)虚拟实例启动正常,但是无法连接

解决办法:这个问题很可能是没有打开相关端口造成的,出于安全性保障,OpenStack在虚拟实例内部网络设置了防火墙,因此,假如要使用某些服务就要打开相关端口,如要用ssh连接就要打开TCP的22端口,要用ping服务就要打开ICMP的-1端口,要用远程桌面协议(RDP)连接就要打开TCP的3389端口。

(5)由于操作失误导致Nova数据库崩溃或者想推倒数据库重来

解决办法:假如是数据库里面某个table不正常,那么丢弃掉那个table,然后同步数据库,就可以解决问题。假如整个Nova数据库已经混乱崩溃了,那么也不必重装数据库甚至重装OpenStack,只需要丢弃Nova数据库,然后重建一个Nova数据库,给予Nova用户操作Nova数据库权限,同步数据库,再重建私有网段以及浮动网段,打开相应端口,即可使Nova服务恢复正常。

5 OpenStack云平台部署实验及分析

本文搭建的私有云平台提供给用户的Web管理界面Horizon简单易用,功能丰富,登录界面如图9所示,初始的用户名和密码与在Keystone中注册服务时使用的一样。在Horizon中,管理员的权限包括创建和管理用户、项目组;修改用户组的实例可用配额;修改可用镜像类型;查看应用平台的使用情况等。用户的权限包括使用云存储;对虚拟实例进行启动、中断、挂起、关闭、创建快照、分配和回收浮动IP地址、分配和回收云硬盘等操作。以下将从启动实例、挂载云硬盘、使用云存储等方面进行介绍。

私有云平台的镜像有Ubuntu11.10桌面版、Windows 2008等,可以同时启动Windows和Linux虚拟实例。实例类型有单核、双核以及4核CPU等,还可按需要进行添加修改。启动实例的过程为:选择镜像、修改实例名字、选择实例类型、选择密钥以及选择创建实例的个数。启动实例过程如图10所示,实例启动可在几分钟内完成。访问实例有多种方式,可以通过noVNC从网页访问,可以通过远程桌面协议 (RDP)连接访问,Linux实例还可通过puty、secureCRT等软件访问。

云硬盘是OpenStack云平台提供给用户的可持久弹性存储。云硬盘创建时可根据用户需要配置大小,云硬盘的状态为available(可用)时,即可挂载到实例。在Windows实例中使用云硬盘的步骤为:通过磁盘管理工具把挂载的云硬盘的状态改为online(在线),初始化云硬盘为分区表格式(GPT),格式化并使用云硬盘,如图11所示。在Linux实例中使用云硬盘的步骤为:通过fdisk工具在云硬盘中创建分区,通过mkfs工具将云硬盘格式化、挂载并使用云硬盘,如图12所示。

由于Swift内置冗余和容错机制,数据的丢失率很低;私有云与用户位于同一网段内,网络传输速度很高;私有云平台位于防火墙内,受到攻击的几率较小,且不同用户组之间存储的数据看不见,数据私密性较高,因此云存储是OpenStack私有云平台的一个重要功能。它的使用步骤为:创建容器,在容器内上传文件,上传文件时指定保存对象的名字并选择文件路径。

综上所述,本文搭建的OpenStack私有云平台具有使用简单、按需选择实例类型、快速部署虚拟实例、高效安全地存储数据等特性,具有实际意义。

6 结束语

本文提出了一种基于OpenStack构建私有云计算平台的方案,旨在为科研实验室以及中小企业提供弹性计算服务,满足不同用户、不同阶段的需求。同时,通过在虚拟镜像中集成各种开发环境和开发工具,可以提供高可用性的云服务。此外,本文还分享了一些部署OpenStack云平台过程中的经验。

本文在部署、使用OpenStack云平台过程中,发现OpenStack对数据库有很强的依赖性,且网络性能并非最优,因此,如何提高数据库的容错性、稳定性以及改善网络性能,是进一步优化私有云的研究方向之一。

1 NIST Cloud Computing Program.http://www.nist.gov/itl/cloud/,2011

2 Ramgovind S,Eloff M M,Smith E.The management of security in cloud computing.Proceedings of Information Security for South Africa(ISSA),Sandton,South Africa,2010:1~7

3 吴朱华.云计算核心技术剖析.北京:人民邮电出版社,2011

4 董鑫.开源云计算技术应用.计算机光盘软件与应用,2011(16)

5 OpenStack Community.http://www.openstack.org/,2011

6 git·hub.https://github.com/,2012

7 Swift 1.5.1-dev documentation.http://swift.openstack.org/index.html,2011

8 李刚建.基于虚拟化技术的云计算平台架构研究.吉林建筑工程学院学报,2011,28(1):79~81

9 张帆,李磊,杨成胡等.基于Eucalyptus构建私有云计算平台.电信科学,2011,27(11):57~61

猜你喜欢
源码镜像硬盘
面向数据可靠传输的高译码率带反馈的LT码
国内一站式工程设备租赁平台众能联合完成C2、C3两轮融资
浅谈开源操作系统的历史
镜像
企业如何保护源码
HiFi级4K硬盘播放机 亿格瑞A15
Egreat(亿格瑞)A10二代 4K硬盘播放机
镜像
我区电视台对硬盘播出系统的应用
镜像