ceph分布式存储实战(3)——ceph内部组件

一、RADOS(Reliable Autonomic Distributed Object Storage)
1、rados的意思是
    可靠、自动、分布式对象存储(可靠的自主分布式对象存储)
2、rados的作用
    1、rados是ceph集群的基础,是ceph存储系统的核心,ceph中一切都是以对象的形式存储,而rados就是负责存储这些对象,无需考虑数据是啥类型
    2、确保数据的一致性和可靠性
    3、负责数执行数据的复制、故障检测和恢复
    4、负责数据在集群节点之间的迁移和再平衡
    5、ceph所有优秀特性都是rados提供的,如:
        分布式对象存储、高可用性、高可靠性、没有单点故障、自我修复、自我管理
    6、rados就是cpeh集群中的大脑,负责决策、调度等工作
ceph分布式存储实战(3)——ceph内部组件    

ceph分布式存储实战(3)——ceph内部组件



二、OSD(object storage daemon)
1、osd的意思是
    对象存储设备
2、osd的作用
    1、负责存储实际用户数据(数据将会以对象的形式存储在osd中)
    2、负责响应客户端读操作请求
    
    通常一个osd守护进程仅与ceph集群中的一个磁盘绑定
ceph分布式存储实战(3)——ceph内部组件

ceph分布式存储实战(3)——ceph内部组件

ceph分布式存储实战(3)——ceph内部组件

三、ceph monitor(MON)
1、mon的意识是
    监控
2、mon的作用
    1、通过一系列map跟踪整个集群的健康状态,监控整个集群的监控状况
    2、map是指这几个组件的map:osd/mon/pg/crush,所有的集群节点都向mon节点报告状态,并分享每一个状态变化的信息
    3、一个mon为每一个组件维护一个独立的map,mon不存储实际的数据,这是osd的工作
    
四、librados库
1、作用
    1、是一种用来简化访问rados的方法
    2、支持php,ruby,python,java,c/c++
    3、librados支持直接访问rados
    4、开发者能够创建自己的接口来访问ceph存储集群

五、RBD
1、意思
    叫做ceph块设备,或者叫rados快设备
2、作用
    1、对外提供块存储,可以被映射、格式化、向磁盘一样被挂载到服务器
    2、支持精简制备和快照的特性
    
    精简置备(thin):
        使用精简置备格式。最初,精简置备的磁盘只使用该磁盘最初所需要的数据存储空间。如果以后精简磁盘需要更多空间,则它可以增长到为其分配的最大容量。
        简单的说就是为该磁盘文件指定增长的最大空间,需要增长的时候检查是否超过限额。

ceph分布式存储实战(3)——ceph内部组件


六、RGW
1、意思
    叫做ceph对象网关,或者叫rados网关
2、作用
    1、提供了一个兼容Amazon S3和OpenStack对象存储API(Swift)的restful API接口
    2、还支持多租户和openstack的keystone身份验证服务

ceph分布式存储实战(3)——ceph内部组件


七、MDS
1、意思
    叫做ceph元数据服务器
2、作用
    1、跟踪文件层次结构并存储只供CephFS使用的元数据
    2、mds不直接给客户端提供数据,因此可以避免系统中的一个单点故障
3、为ceph集群部署一个mds
    在之前的部署中,已经部署好了一个ceph存储集群,如需添加mds节点,在管理节点指向以下命令:
    ceph-deploy mds create ceph-node2
    
    
八、CephFS
1、意思
    叫做ceph文件系统
2、作用
    1、提供了一个任意大小且兼容POSIX的分布式文件系统
    2、依赖mds来跟踪文件层次结构,即元数据
    
    POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),
    POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件
    而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。
    
    关于posix更通俗易懂的解释可以参考以下网友的博文:
        https://www.cnblogs.com/weiweishuo/archive/2013/07/29/3222995.html

ceph分布式存储实战(3)——ceph内部组件

 
九、CRUSH算法
    CRUSH全称Controlled Replication Under Scalable Hashing,是一种数据分发算法,类似于哈希和一致性哈希。哈希的问题在于数据增长时不能动态加Bucket,
    一致性哈希的问题在于加Bucket时数据迁移量比较大,其他数据分发算法依赖中心的Metadata服务器来存储元数据效率较低,CRUSH则是通过计算、接受多维参数的
    来解决动态数据分发的场景
    1、过去的存储机制
        过去的存储机制是,在存储数据时,首先要保存一份元数据,这个元数据存储的信息是数据存储在哪个节点和磁盘阵列的位置等信息
        每一次有新的数据存储时,最先更新的是元数据的信息,之后才是实际的数据存储
        
        这样的机制存在的缺点:
        1、不适合超大容量级别的数据存储,pb和zb级别的容量
        2、存在单点故障,万一丢失存储的元数据,面临的是丢失所有数据
        3、总而言之,防止核心元数据丢失是非常重要的,元数据管理太复杂,因此成为存储系统的瓶颈
        
    2、ceph的存储机制
        cursh算法,称:可扩展散列下的受控复制算法
        ceph的数据分发机制就是采用这个算法,也是cpeh数据存储的核心
        
        优点:
        1、crush算法准确的计算数据的写入位置和从哪个位置读取
        2、按需计算元数据,而不是存储元数据,消除了传统的元数据存储方法中的限制
        
        crush工作机制:
        1、元数据计算的负载是分布式的,仅在需要的时候执行(元数据计算的过程也叫做crush查找)
        2、crush的查找是在ceph客户端上执行,从而占用很少的ceph集群资源,性能更好
        
        crush查找步骤
        1、往ceph存储集群发起读或写的请求时,首先联系mon获取集群map副本
        2、mon向客户端返回集群map信息,包含:集群状态、配置等信息
        3、使用对象名称和池名称或者池ID将数据转换为对象
        4、将对象和PG数量一起经过散列来生成其在ceph池中最终存放的那个pg
        5、通过计算好的pg执行crush查找,计算出存储或获取数据的那个主OSD,计算完主OSD后得到OSD ID和辅OSD ID
        6、客户端直接联系那个OSD来存储或者读取数据
        
        crush是公平公正的
        1、crush会均匀的在整个集群的osd上写数据,
        2、强制集群中的所有OSD都要参与其中,这提高了性能和可靠性,同等的利用
        3、如果有的磁盘性能较好,如有的是SSD盘,有的是机械盘,那么crush可以为每个osd分配权重
            如基于机械盘的osd容量大,可以权重分配高一点,权重越高,crush将会写入更多的数据


ceph分布式存储实战(3)——ceph内部组件



本文转自 TtrToby 51CTO博客,原文链接:http://blog.51cto.com/freshair/2057723