背景
Openstack不管是Ephemeral Storage还是Block Storage, 其实从接口上看,其实都是块服务。那么为什么要搞两个不同的类型呢,本文从这两种不同类型块存储的实现上来分析下其中的原因。
临时存储
Openstack临时存储是由Nova提供的,主要是利用主机的本地存储给虚拟机提供卷服务。如果虚拟机被删除了,挂在这个虚拟机上的任何临时存储自动释放。这样的实现方式决定了:
- 使用Ephemeral Storage的虚拟机不能支持迁移,以及和虚拟机迁移相关的特性,包括 1) HA 2) 动态调度 等等。
- 存放在Ephemeral Storage上的数据是高度不可靠的,任何虚拟机和主机的故障都可能会导致数据丢失。
块存储
目前Openstack的块存储由Cinder提供,其后端支持很多类型的存储设备,比如多个厂商不同型号的阵列设备,或者是Ceph, Glusterfs, Sheepdog之类的分布式存储系统。基于块存储,可以为用户提供:
- 高可靠的存储(基于阵列的RAID, 或者是分布式存储的多副本机制;甚至还可以充分利用设备的备份,远程复制能力)
- 共享存储 (意味着可以支持HA, 虚拟机迁移等等)
临时存储的妙用
这么看来,临时存储岂不是几乎没什么作用了,那为什么还需要提供这个服务呢?其实原因非常简单: 这个服务便宜,而且便宜到令人发指的地步,比如AWS的Ephemeral Storage, 就是免费的。用户可以用它来做不少有意思的事情,比如:
- 无状态虚拟机,为系统提供Cache服务
- 为虚拟机操作系统提供交换分区,或者用来存放其它类型的临时文件
- 改进EBS的性能,比如买4个EBS盘,再配置2个免费的Ephermal盘,组建一个RAID 10系统
总结
对于云服务提供商,不管采用什么样的后端技术,为用户提供7个9甚至更高可靠性的EBS服务,成本是巨大的,如果使用阵列,其价格本来就昂贵;如果使用分布式存储,起码要3个副本,再考虑到定期备份,快照,跨地域容灾,成本一样很高。现在的SATA, SAS盘便宜而且量又足,很容易造成在本地主机上空闲,所以干脆直接送给用户,由他们去玩,而且对于玩的好的用户,还真能对业务有不少帮助。
最后再附上Openstack官方文档对几种存储的对比:
Ephemeral storage | Block storage | Object storage | |
---|---|---|---|
Used to… | Run operating system and scratch space | Add additional persistent storage to a virtual machine (VM) | Store data, including VM images |
Accessed through… | A file system | A block device that can be partitioned, formatted and mounted (such as, /dev/vdc) | REST API |
Accessible from… | Within a VM | Within a VM | Anywhere |
Managed by… | OpenStack Compute (Nova) | OpenStack Block Storage (Cinder) | OpenStack Object Storage (Swift) |
Persists until… | VM is terminated | Deleted by user | Deleted by user |
Sizing determined by… | Administrator configures size settings, known asflavors | Specified by user in initial request | Amount of available physical storage |
Example of typical usage… | 10 GB first disk, 30GB second disk | 1 TB disk | 10s of TBs of dataset storage |