先上图:

wKioL1P_JAnyiCM7AAG67-1urJU429.jpg

上面的图是标准官方的,下面的是理解后整理的:

wKioL1QHCkXh_T6QAAEIiDuGM98223.jpg


    技术文档的简写太多了,不是很通俗的一定要给出英文全称,才是负责的。对于拿着简写绕晕初学者的人,不好。先说RADOS吧:

    Reliable Autonomic Distributed Object Store,可靠、自治、分布的对象存储。可靠,自然是存储必需有的品质;注意不是“自动”而是“自治”,就是说这个系统能够进行自我管理;分布的,即不是传统集中的;对象存储,适用于对象存取的存储,而对象,在这里指数据和数据属性集的综合体。对象包含ID、二进制文件、元数据。

wKioL1P_xzrzthWSAAAybF2VSdI073.png

wKioL1P_vd6CXmP2AABZLylflv8436.png

    OSD:基于对象存储技术的设备就是对象存储设备(Object Storage Device),每个对象存储设备具有一定的智能,能够自动管理其上的数据分布。

    

客户端与客户端与RADOS交互

wKioL1P_ySvzjR4fAAD1NzHkINk900.jpg

客户端向monitor查询osd map, crush规则

客户端根据osd map使用crush计算出目标osd

客户直接向目标osds发起数据访问.


ceph的架构做到了“无需查表,算算就好”,因为它无元数据(metadata)服务器,无表操作。


  • OSD

(Object Storage Device),说俗一些就是:一块磁盘(一些CPU、一些内存)。有一个daemon进程对它操作,进行数据存储和维护,是磁盘的“经纪人”,与其它OSD的daemon、monitor、client通讯。


  • monitor

client是访问OSD的客户端,OSD是后台资源。打个比方,client是住店的人,OSD是房间,monitor是宾馆前台,负责钥匙的人。正式的说法叫“系统状态检测和维护”。

每个住店的人先要找前台分配房间,拿钥匙;每个client访问OSD先访问monitor,而monitor分配OSD是有一套算法的,这个算法叫做crush。


  • file

    用户端对象,其实就是文件了。

  • object

    RADOS对象,因为有最大size设置限制(通常是2MB或4MB),如果file太大,就会按照size参数进行切片,每片就是一个object。(如果file是一个人就惨了,(*^__^*) 嘻嘻……)

  • PG

    不是屁股,是Placement Group,位置组。是一个逻辑组织,与object是“一对多”的关系,一个PG里面有很多object;一个PG会映射到n个OSD,这个n就表示对象存储的副本份数,或者冗余程度,一半是3份,就是3了。当PG的OSD少于n时,处在降级状态,系统将自我修复或re-balancing.

  • cluster map

    全局系统状态记录数据结构。就是宾馆的床铺分配图。包含的信息:

    epoch,即序列号,单调递增;

    OSD网络地址;

    OSD状态:up&in, up&out, down&in, down&out

    CRUSH算法配置参数: cluster hierarchy, placement rules.


如图:

wKioL1QHDy6xHeLwAACXfmukTmA776.jpg


一个文件是怎样被决策写到哪些盘呢?

client计算文件的ID即oid, hash(oid)&mask -> pgid,得到pgid,pgid根据CRUSH算法得出n个OSD。




可能关注的技术点:

  1. cluster map的维护机制。

  2. CRUSH算法具体是怎样的。

  3. OSD故障及扩容的系统快速恢复和响应。

(未完待续)