在转向大规模网络运算中,关键技术如虚拟化,向x86系统迁移和采用快速的DevOps方法已经改变了IT的生态系统。随着存储卷在IT系统中的部署量不断增加,下一个挑战将会是使用最有效的方式来规划和管理计算、存储和网络资源以及向众所周知的私有云提供服务。OPENSTACK内部

OpenStack是一个开源的云平台项目,是由NASA发起,Rackspace在2010作为一个项目进行主导。源代码是由OpenStack基金会管理并在准许Apache许可下发布,Apache许可允许自由分发和修改,但需要保留原有的版权声明。OpenStack作为一个大规模部署应用平台而深受欢迎;它被许多服务商用来发布公有云平台,一些大型组织用它来搭建私有云基础设施。需要明确的是,OpenStack适用于大规模部署的应用,而对于像微软Exchange和oracle数据库等传统的单一应用程序则是不太适用的。 OpenStack软件包含许多不同的模块,对应云环境的各个方面: Swift:对象存储 Cinder:块存储 Nova:虚拟机(VMs)/计算 Neutron:网络 Horizon:仪表盘 Keystone:身份识别服务 Glance:镜像服务 Ceilometer:遥感侦测 Heat:业务流程 Trove:数据库即服务(DBaaS) 每个OpenStack的代码发布(目前是第九个版本,冰室(Icehouse)),新项目被创建或者来自现有的项目或作为新项目启动,包括针对裸设备供应的Ironic和针对弹性的MapReduce的Sahara,都是基于OpenStack的Juno发布。 数据服务有其中五个组件来提供。Swift是OpenStack基础设施发布的对象存储的子项目。块存储由Cinder提供,它是基于标准的IP存储协议,例如iSCSI和NFS。Glance提供VM镜像的存储库,它使用基于文件系统的底层存储或者Swift。Trove提供数据库即服务(DBaaS)的能力,而Sahara提供弹性的MapReduce能力,也被称为Hadoop集群存储。在本文中,我们将重点放在Cinder和Swift这两个主要的存储平台。 块存储CINDER 块存储是虚拟化基础架构的重要组成部分,是存储虚拟机映像和使用的虚拟机数据的基础。Cinder在2012 Folsom版本的OpenStack发布中被介绍,而在Cinder出现之前,虚拟机是短暂存在的,它们的存储只在虚拟机生命周期内存在。Cinder提供块存储管理的支持。这是到了计算(Nova)层使用iSCSI,光纤通道或NFS协议,以及一些提供后端连接的专有协议。 Cinder接口提供了一些标准功能,允许创建和连接块设备到虚拟机,例如创建卷、删除卷和附加卷。更多高级的功能支持卷扩展,快照和虚拟机镜像克隆。 许多厂商在他们现有硬件平台上提供Cinder块存储的支持,它是通过使用Cinder的驱动将Cinder的API转换成厂商特定硬件的命令实现的。提供Cinder支持的厂商包括EMC(VMAX和VNX),惠普(3PAR StoreServ和StoreVirthul),HDS,IBM(所有存储平台),NetApp,Pure Storage和SolidFire。也有一些软件定义的方案提供支持,像EMC的ScaleIO和Nexenta。 此外,许多软件存储平台,包括开源平台,也能用来提供Cinder支持;这其中包括RedHat的Ceph和GlusterFS。Ceph已经集成到Linux内核中,使它成为OpenStack部署块存储最便捷的方式。 在2013发布的第七个OpenStack版本(Grizzly)支持NFS,虽然“实验”版本在Folsom这一代中就已经支持。通过NFS,虚拟机的卷被看做是一个独立的文件,这类似于VMware ESXi和微软Hyper-V的VHDs的实现方式。封装的虚拟机卷作为文件允许诸如快照和克隆的高级功能。 存储特性随着新版本的发布被引入到Cinder中,随后得到了各个存储厂商的支持。一个全面的厂商平台和功能列表能够在维基百科的OpenStack块存储驱动页中被发现。

SWIFT支持对象存储

OpenStack内部的对象存储是通过Swift来交付的,它实现了通过分布在OpenStack集群节点来实现横向扩展的对象存储。对象存储的数据存储为二进制对象,没有具体的参考格式。对象从Swift中存储和取出,会使用简单的命令如PUT或GET,这些命令是基于HTTP(Web)协议,也称之为RESTful API。 Swift架构分为多个逻辑服务,包括对象服务器,代理服务器,容器服务器和客户服务器,放在一起归类为一个环。数据存储在对象服务器上,其他的组件用来存储元数据,元数据用来跟踪每个存储对象和管理数据的访问。 Swift中的数据弹性的管理是使用分区(zone)的概念。一个分区代表环的一个子组件,它用来提供数据的一份拷贝,多分区用来存储冗余数据拷贝(默认至少三个)。Swift可以使用一块磁盘或一台服务器来代表一个分区,也可以包括分散不同地理位置数据中心之间的数据。 同许多对象存储一样,Swift使用最终一致性的想法来实现数据的恢复。这意味着在一个OpenStack集群内,数据复制不是以同步模式来实现的,而使用块存储则可以实现。相反,数据复制是在分区之间以后台进程来实现的,所以如果系统在高负荷情况下,它可能被暂停或失败。 相比于块存储使用同步复制作为一种用来提供高水平的可用性特征,最终一致性看起来似乎是更危险的。然而,在可扩展性,性能和弹性方面需要有一个权衡。最终一致性允许一个档案系统在对比使用块存储时扩展更加容易;在使用Swift情况下,代理服务器要保证获取当前数据的最新副本,即使在集群中一些服务器无法被访问。 如同所有的OpenStack项目,Swift随着每个版本的发布,会陆续发布新功能和增强功能。Grizzly版本的OpenStack介绍了更加精细的复制控制,使环具有可调节的副本数。通过基于时间的对象服务器的排序方式,对象读取性能同时得到了改善。这允许将数据能够从最快的响应对象服务器中取出,在通过广域网络进行扩展的情况下这是十分重要的。 由于SWIFT使用HTTP协议,在OpenStack对象存储中使用第三方的存储解决方案将是非常实用的,这些产品包括来自cleversafe,scality或公共云,例如亚马逊的Web服务——简单存储服务(S3)。

SWIFT或者CINDER?做正确的选择

很显然,Swift和Cinder提供不同类型的数据服务。对象存储(Swift提供)设计用来存放有高扩展性需求的对象数据,例如媒资、影像和文件。这些系统关注的焦点是他们海量数据的扩展能力,这些能力不同于传统存储的特性,例如RAID。然而,他们的最终一致性特性意味着Swift不适用于存储类似虚拟机应用的数据。 虽然Swift使用元数据来追踪对象和它们的版本,对象存储仍然需求额外的逻辑关系来追踪被存储的对象的用户元数据。这就需要用户将它内置于应用程序中。 Cinder提供块存储组件,用来存储持久对象,例如虚拟机和需要定期更新的数据如数据库。块存储功能可以通过OpenStack集群内置的功能组件来实现,如逻辑卷管理器(LVM)或NFS来提供存储资源。另外,开源解决方案,如Ceph和GlusterFS提供OpenStack代码主体内的一揽子OpenStack存储交付能力,同时还能保持开源软件的灵活性。 Cinder得到广泛的支持,现有的传统存储解决方案可用来为OpenStack部署提供存储服务。对于已经具备传统IT技能和硬件的平台来说,这可能是最合适的。现有存储平台已经经历了很好的发展,并且支持存储可选的高级特性,如自动精简配置,重复数据删除和压缩。许多现在提供的服务质量(例如惠普3PAR的StoreServ和SolidFire),使它们适合用于混合工作负载而不是单纯的专注于OpenStack的部署。作为一个结果,还有一个显著的好处是将繁重的任务卸载到外部存储阵列中。 在决定使用一个特定的平台时,系统架构师需要权衡使用OpenStack“免费”方案(仍然需要硬件)或受益于专用硬件提供的功能的风险和成本。

备份OPENSTACK存储

最后需要思考的是,我们应该考虑备份OpenStack数据的必要性。备份OpenStack环境关键配置组件的细节都有详细的文档;然而,一个OpenStack集群内的数据备份被视作用户的责任。通过使用外置存储,备份很容易被实现。例如,SolidFire提供备份完整集群到亚马逊S3或Swift对象存储中的能力。另外,用户需要看现有的支持OpenStack应用的备份产品。 Raksha是一个新的项目建议,它会把备份即服务(BaaS)功能集成到OpenStack框架中。这将包括完整和增量备份虚拟机到Swift“终点”,提供应用一致性的能力。Raksha是一个单独的项目,它并不是OpenStack核心部分。它需要将一些有意义的工作集成到普通虚拟平台,如vSphere和Hyper-V,但是可以集成更多的解决方案为OpenStack环境提供数据保护。