1. 什么是EBS (Elastic Block Store)?
Amazon EBS是Amazon的一个新性能,提供对Amazon EC2应用持续存储,也可以通过卷(Volumes)对块存储随机访问。EBS可以以Volumes(1GB-1TB)的形式附着在运行的EC2 instance(同一有效的Zone内)上,从而提供高性能、高可靠性的持续块存储。每个EBS的Volume都可以格式化后作为一个文件系统被载入。同时,你也可以直接、随机访问每个数据存储块。
与只提供持续“文件”存储的S3不同,EBS提供持续的“块”存储。现在通过EBS你可以随机访问一个Volume文件系统中的所有内容。
运行(run-time)或引导(boot-time)时可以将EBS的volumes加载到Instances上。在特定的时间点给Volume做EBS快照(Snapshots),然后可以通过这个Snapshot生成多个Volumes并可以将其设置在不同的Zones中。
Instance和Volume间的关系类似于电脑和外部存储器。如果不恰当的移除外部存储器或者关掉电脑,可以导致数据损坏或不连续。一旦volume被删除,数据就会永久擦除,所以你必须记得要频繁地做Snapshots。
Ø EBS的Volumes存在内部冗余
Ø 用户自定义EBS Volume的大小:1GB-1TB
Ø 任何时候每个Volume只能被加载到一个Instance上
Ø Instances只能加载同一个有效Zone中的EBS Volumes
Ø 多个EBS Volumes可以被加载到同一个Instance上。
Ø 在任何时间点都可以对EBS Volume做EBS Snapshot
Ø EBS Snapshots以累加的方式存储在S3上。但会在S3的bucket和file列表中会被隐藏掉;
Ø 通过同一个EBS Snapshot可以在任何Zone中创建多个EBS Volumes
2. 持久性数据
Volumes和Instance本质上是不同的部件。如果一个Instance(加载过Volume)被正确的关闭(Shutdown)并将相应的Volume正确的卸载,这个Volume可以继续被用于它的有效Zone中,并且可以被加载到所在Zone的其他的Instance上。如果需要的话以后可以通过一个Volume的Snapshot在任何Zone中创建Volume。
3. Snapshot
一个EBS的Snapshot代表了某一特殊时刻的一个Volume。你可以创建一个Snapshot而不用管这个Volume是否已被加载到了一个Instance上。一档一个Snapshot被存储到S3上后,它就可以获得一个时间戳(Timestamp)和一个唯一的AWS ID (例如:snap-9cea0df5)。Snapshots包含了累计存储到S3的一系列数据块。从任何一个Snapshot都可以克隆创建多个Volumes。不可以将同一个Volume加载到多个Instances。 然而,你必须先给一个Volume创建一个Snapshot,然后通过Snapshot在可用的Zone内克隆这个Volume。
4. 快速备份(Backups)
通过EBS,Backups(Snapshots)不再由Instance来执行。由于与本地的CPU不在相关,执行备份对应用程序的性能不会产生太大影响。封存一个Volume并做一个Snapshot所花费的时间要比创建一个巨大的.rar文件要少得多。
Snapshot是个短小的断点,不受某个或者某些Volumes大小的影响。Snapshot将会在系统恢复后的较长一段时间里完成,对正在运行的Volume或Volumes影响不大。
5. 高效的数据存储
由于Snapshots的数据块可以累计存储到S3上,Snapshot可以提供更高效的数据存储和备份。Volume的第一个Snapshot包含了所有的数据块,接下来的每个Snapshot只存储针对前一个版本变化的数据。针对每个Snapshot都会生成一个内容表指明每个数据块的最新版本。
6. EBS的优点
要更好的了解大背景,可以阅读下列Blog
· Amazon's Elastic Block Store explained
· Why Amazon's Elastic Block Store Matters
7. EBS工作原理
下边的图表显示了一个典型的Volume/Snapshot的生命周期
8. 一个Instance可以加载多少个Volumes?
每个账号只能用20个EBS Volumes。如果需要20个以上的EBS Volumes,你可以通过Amazon EBS的申请表来申请。每个Volume的大小为1GB到1TB,你最多可以为每个Instance加载20个Volumes,然而我们推荐每个Instance不要加载超过10个Volumes。有了EBS,即使是超过160GB的应用只要有一个小的Instance就够了,而没有必要去申请一个大的(Large)或者超大(X-large)的 instance。
当讲一个Volumes加载到Instance上时,请选择一个预设好的设备(device)名字
注意: 每个加载到Instance上的Volume都必须具有唯一的设备(Device)名。
9. EBS费用
EBS的费用与存储在S3上的数据收费标准相似。 与EBS相关的费用有三类。
Storage Cost + Transaction Cost + S3 Snapshot Cost = Total Cost of EBS
总的EBS费用 = 存储费用 + 交易(事务处理)费用 + S3上Snapshot费用
注意:当前的价格信息请参考:Amazon EC2 Pricing
Ø Storage Costs:你需要为你预定的硬盘空间而不是你实际使用的空间付费。也就是说如果你预定了1TB的Volume而禁用了1GB,你还是要付1TB的钱。
Ø Transaction Costs:除了EBS Volumes的存储费用外,还需要为事物I/O处理付费。每个事务处理等同于一次读或者写。由于所有的Linux系统都使用了Catche,这个数目可能要比你的应用程序实际处理的事物要少些。
Ø S3 Snapshot Costs:Snapshot花费是紧缩的,只针对前一个Snapshot备份的变化块收费。例如, 删除一个有变化块的文件将增加Snapshot的费用。切记,Snapshot是以数据库为基础的。
注意:当你删除Volume的那一刻就停止收费了。如果你删除一个Volume,并且在很长一段时间里显示“Deleting”状态,你不需要为完成“删除”所花的时间付费。
10. EBS Lineage
通过一个特定的Volume的Lineage和Snapshots标签可以跟踪该Volume的历史记录。EBS中的每个Object都会记住他的父类。然而,一旦Volumes 或者Snapshots被删除了,EBS将不会再有任何记录。