存储是Openstack所管理的最重要的资源之一。
Nova实现了Openstack虚拟机世界的抽象,并利用主机的本地存储为虚拟机提供“临时存储(Ephemeral Storage)”,如果虚拟机被删除了,挂在这个虚拟机上的任何临时存储都将自动释放。存放在临时存储上的数据是高度不可靠的,任何虚拟机和主机的故障都可能会导致数据丢失。因此,基于临时存储的虚拟机就是无根之浮萍,没有确切的归属,在它生命周期终止的时候,所有发生在它身上的故事以及一切痕迹都将被抹去。
而基于SAN,NAS等不同类型的存储设备,Swift(对象存储)与块存储(Cinder)引入了“永久存储(persistent Storage)”,共同为这个虚拟机世界的主体——虚拟机提供了安身之本,负责为每个虚拟机本身的镜像以及所产生的各种数据提供一个家,尽量地去做“居者有其屋”。
一 Swift体系结构
作为对象存储的一种,Swift比较适合存放静态数据,所谓的静态数据指的是长期不会发生更新的数据,或者在一定时期内更新频率比较低的数据。比如说虚拟机的镜像、多媒体数据以及数据的备份。如果需要实时更新的数据,那么Swift并不是一个特别好的选择,在这种情况下,Cinder块存储更为合适。
既然是对象存储,Swift所存储的逻辑单元就是对象(Object),而不是我们通常概念中的文件。在一个传统的文件系统实现中,文件通常由两部分两共同描述:文件本身的内容以及与其相关的元数据(metadata)。而Swift中的对象涵盖了内容与元数据两部分的内容。
与其他Openstack项目一样,Swift提供了RESTful API作为访问入口,存储的每个对象都是一个RESTful资源,拥有唯一的URL,我们可以发送HTTP请求将一些数据作为一个对象传给Swift,也可以从Swift中请求一个之前存储的对象,至于该对象是何种形式存在且存储于何种设备的什么位置,我们并不需要去关心。
Swift从架构上可以划分为两个层次:访问层(Access Tie