RADOS:A Scalable, Reliable Storage Service for Petabyte-scale Storage Clusters
论文翻译
摘要
块式和面向对象的存储架构形成了一种以提升扩展性的存储cluster。然而,现存的系统继续把存储节点作为一个被动的设备,尽管他们有能力展示智能和自治。我们提出RADOS的设计和实现,RADOS是一个可靠的面向对象服务,通过利用每个独立节点的智能可以扩展到数千台设备。当允许节点半自治地通过利用集群地图来进行自我复制,错误检测,错误恢复,RADOS保护数据的一致性和强壮的安全语义。我们的实现提供了极好的性能,可靠性,可扩展性,同时,提供给客户端一个逻辑的对象存储。
1 介绍
提供可靠的高性能的规模不断扩大的存储给系统设计者们带来了挑战。高吞吐和低延时的面向文件系,数据库和相关抽象的存储对广泛的应用来说是很重要的。基于砖式存储或者对象存储设备(OSD)的聚合集群存储架构正在寻求将低层次的块分配解决方案和安全强制措施分布到智能化存储设备上,从而,通过促进客户端直接访问数据来解决智能化存储设备,简化数据分布和消除IO瓶颈的相关问题。基于商用组件的OSD结合了CPU,网络接口,本地缓存,基础的磁盘或者RAID,把基于块设备接口的存储替换为一个基于命名的变长的对象。
然而,采取这种架构的大规模系统地无法利用设备的智能。因为协议化的存储系统是基于本地或者存储网络的存储设备或者这些兼容T10OSD协议的设备,设备被动地相应读写命令,尽管他们有潜力封装明显的智能。当存储集群增长到数千节点或者更多时,数据迁移的一致性管理,错误检测,错误恢复将给客户端,控制器,元数据目录节点带来极大的压力,限制了可扩展性。
我们已经设计并实现了RADOS,一个可靠的自动的分布式对象存储,它能寻求将设备智能分布到复杂的涉及数据一致性访问,冗余存储,错误检测和恢复登问题的数千节点规模的集群。作为Ceph分布式系统的一部分,RADOS促成了一个优化的平衡的分布式数据和负载,这些数据和负载分布在动态的不均匀的存储集群上,与此同时,RADOS为applications提供一个单一的具有良好的安全语义和强一致保障的逻辑对象存储。
对于PB级的规模,存储系统动态化是有必要的:它们被动态的扩建,它们增长并且与新部署的存储建立联系或使老设备退役,设备出错和恢复是基于连续的数据基础,大量的数据被建立和删除。RADOS确保数据分布对系统的一致性,以及基于cluster map的对象读写的一致性。这个map被复制到所有的节点上(存储和客户端节点),并且被Lazy propagation的增量更新。
通过提供给存储节点以完整的数据在系统中的分布信息,设备能够半自治地通过类似点对点的协议来自我管理数据复制,一致和安全的过程更新,参与错误检测,及时响应错误和数据对象复制迁移带来的数据分布变化。这减轻了管理着cluster map主副本的小型monitor集群上的压力,从而,使得剩余的存储集群能够是系统无缝地从几十个节点扩展到数千个节点。
我们的prototype实现提供可供在byte范围可读写的对象接口(就像文件那样),因为那是我们最原始的Ceph的需求。为了防止节点错误和保护数据对象,在OSD集群中数据对象通过N条路被复制。然而,RADOS的可扩展性无法依赖在特定的对象接口或者冗余策略;存储Key-Value的对象和RAID冗余都被计划中。
2 可扩展的集群管理
一个RADOS的系统包括含有大量OSD节点的集合加上一个规模小的负责管理OSD cluster membership的Monitor 集合。每一个OSD节点包括一个CPU,一些易失性内存,一个网络接口和本地磁盘或者RAID。Monitors是有单机进程并且需要少量的本地存储。
2.1 Cluster Map
Monitor集群通过管理Cluster Map从而使存储集群被互斥地管理。Cluster Map指定了集群包括哪些OSDs,并简洁地指定了全体数据在系统中的分布。Cluster Map被每一个存储节点和那些与RADOS系统交互的客户端所复制。因为Cluster Map完整地指定了数据分布,客户端提供一个简单的接口用来把整个存储集群(可能一万个节点)虚拟成一个单一的逻辑对象存储。
每一次因为OSD状态变化(例如设备错误)或者其他的触发数据分布的事件所引起的Cluster Map的改变,都会触发map epoch递增。Map epochs允许通信双方约定当前的数据分布是什么,决定什么时候他们的信息超时。因为Cluster Map改变很频繁,在非常大的集群中OSDs错误检测和恢复很平常更新和分发map 增量(Cluster Map):小信息来表述两个成功的map epoch间的差异。在大多数情况,这些更新只是说明了一个或者多个OSD节点出错或者错误恢复,尽管一般情况这些更新可能包括很多设备的状态改变,很多更新被集中捆绑以便描述间隔比较长的的map版本。
2.2 数据放置
RADOS使用一种将数据伪随机地分布到设备的协议。当新的设备被添加,一个随机的现存数据的副本将迁徙到新的设备上以实现负载均衡。这种策略使系统维护了一定概率的均衡分布,基本上,保持所有的设备有相似的负载,允许系统在任何可能的负载下都能很好的运行。最重要的,数据复制是一个两阶段的过程,计算了正确的对象存储位置;而且不需要一个大型