zoukankan      html  css  js  c++  java
  • Ceph 知识摘录(设计思想,集群维护)

    动态特性:

    存储系统规模变化:业务规模
    存储系统设备变化:节点、磁盘故障替换必然是时常出现的问题,业务不能受到这种硬件、底层软件影响
    存储系统数据变化:

    技术特性:
    高可靠性:尽可能保证存储数据不会丢失,用户将数据写到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并进行扩散。

  • 相关阅读:
    nginx安装
    win7 mount到Linux下无法分配内存的问题(Cannot allocate memory)
    [转]linux时间同步
    关于文件缓冲的问题
    【转】VNC配置
    yum代理设置
    mysql开启日志
    [译]rabbitmq 2.5 Where’s my message? Durability and you
    [译]rabbitmq 2.4 Multiple tenants: virtual hosts and separation
    [译]rabbitmq 2.2 Building from the bottom: queues
  • 原文地址:https://www.cnblogs.com/weichao01/p/9504380.html
Copyright © 2011-2022 走看看