动态特性:
存储系统规模变化:业务规模
存储系统设备变化:节点、磁盘故障替换必然是时常出现的问题,业务不能受到这种硬件、底层软件影响
存储系统数据变化:
技术特性:
高可靠性:尽可能保证存储数据不会丢失,用户将数据写到ceph存储系统过程中,不会出现意外导致数据丢失(用户写入、存储数据不丢失)
高度自动化:数据replication,自动re-balancing,一方面保证系统可靠性,系统规模大,降低运维难度
高可扩展性:系统规模、存储容量可扩展,基于功能丰富强大的底层API提供多种功能、支持多种应用的功能性可扩展。
设计思路
充分发挥存储设备自身的计算能力
去除所有中心点:
1、出现中心点,引入单点故障
2、性能瓶颈
3、数据访问延迟增大
关键技术创新
1、应该把数据写入到什么地方
(1)、用户提交需要写入数据时,系统必须迅速决策,为数据分配一个存储位置和空间,这个会影响数据写入延迟
(2)、影响数据写入均匀性
2、之前把数据写到什么地方去了
(1)、传统的分布式存储系统常用的解决方案是引入专用的服务器节点,在其中存储用于维护数据存储空间映射关系的数据结构。在用户写入/访问数据时,连接这一服务器进行查找操作,待决定/查到数据实际存储位置后,再连接对应节点进行后续操作。传统的解决方案一方面容易导致单点故障和性能瓶颈,另一方面,导致更长的操作延迟
(2)、Ceph彻底放弃了基于查表的数据寻址方式(传统的集中式存储元数据寻址的方案),而改用基于计算的方式。简言之,任何一个Ceph存储系统的客户端程序,仅仅使用不定期更新的少量本地元数据,加以简单计算,就可以根据一个数据的ID决定其存储位置。
集群维护
由若干个monitor共同负责整个Ceph集群中所有OSD状态的发现与记录,并且共同形成cluster map的master版本,然后扩散至全体OSD以及client。OSD使用cluster map进行数据的维护,client使用cluster map进行数据的寻址。
monitor并不主动轮询各个OSD的当前状态。相反,OSD需要向monitor上报状态信息。常见上报情况:一是新的OSD被加入集群,二是某个OSD发现自身或者其他OSD发生异常。
集群中的设备异常(异常OSD的添加删除操作),会导致PG的各个副本间出现数据的不一致现象,这时就需要进行数据的恢复,让所有的副本都达到一致的状态。
OSD的故障种类:
故障A:一个正常的OSD因为所在的设备发生异常,导致OSD不能正常工作,这样OSD超过设定的时间就会被out出集群。
故障A解决:OSD上所有的PG,这些PG就会重新分配副本到其他OSD上。一个PG中包含的object数量是不限制的,这时会将PG中所有的object进行复制,可能会产生很大的数据复制。
故障B:一个正常的OSD因为所在的设备发生异常,导致OSD不能正常工作,但是在设定的时间内,它又可以正常的工作,这时会添加会集群中。
故障B解决:OSD又重新回到PG当中去,这时需要判断一下,如果OSD能够进行增量恢复则进行增量恢复,否则进行全量恢复。(增量恢复:是指恢复OSD出现异常的期间,PG内发生变化的object。全量恢复:是指将PG内的全部object进行恢复,方法同故障A的处理)
需要全量恢复的操作叫做backfill操作。需要增量恢复的操作叫做recovery操作。
OSD
OSD状态涉及up/down和in/out两个维度,up/down表示OSD是否工作正常,in/out表示OSD是否包含有效数据。
-Up且in:说明该OSD正常运行,且已经承载至少一个PG的数据。这是一个OSD的标准工作状态;
-Up且out:说明该OSD正常运行,但并未承载任何PG,其中也没有数据。一个新的OSD刚刚被加入Ceph集群后,便会处于这一状态。而一个出现故障的OSD被修复后,重新加入Ceph集群时,也是处于这一状态;
-Down且in:说明该OSD发生异常,但仍然承载着至少一个PG,其中仍然存储着数据。这种状态下的OSD刚刚被发现存在异常,可能仍能恢复正常,也可能会彻底无法工作;
-Down且out:说明该OSD已经彻底发生故障,且已经不再承载任何PG。
failure recovery过程
一个新的OSD上线后,首先根据配置信息与monitor通信。Monitor将其加入cluster map,并设置为up且out状态,再将最新版本的cluster map发给这个新OSD。
收到monitor发来的cluster map之后,这个新OSD计算出自己所承载的PG,以及和自己承载同一个PG的其他OSD。然后,新OSD将与这些OSD取得联系。如果这个PG目前处于降级状态(即承载该PG的OSD个数少于正常值,如正常应该是3个,此时只有2个或1个。这种情况通常是OSD故障所致),则其他OSD将把这个PG内的所有对象和元数据复制给新OSD。数据复制完成后,新OSD被置为up且in状态。而cluster map内容也将据此更新。
re-balancing过程
新OSD将替换掉现有OSD中的一个(PG内将重新选出Primary OSD),并承担其数据。在数据复制完成后,新OSD被置为up且in状态,而被替换的OSD将退出该PG(但状态通常仍然为up且in,因为还要承载其他PG)。而cluster map内容也将据此更新。
failure detection过程
一个OSD发现和自己共同承载一个PG的另一个OSD无法联通,则会将这一情况上报monitor。此外,如果一个OSD deamon发现自身工作状态异常,也将把异常情况主动上报给monitor。在上述情况下,monitor将把出现问题的OSD的状态设为down且in。如果超过某一预订时间期限,该OSD仍然无法恢复正常,则其状态将被设置为down且out。反之,如果该OSD能够恢复正常,则其状态会恢复为up且in。在上述这些状态变化发生之后,monitor都将更新cluster map并进行扩散。