• 对象存储基本知识


    Ceph对象存储
            Ceph是一个分布式对象存储系统,通过它的对象网关(object gateway),也就是RADOS网关(radosgw)提供对象存储接口。RADOS网关利用librgw(RADOS网关库)和librgw这些库,允许应用程序根ceph对象建立连接。Ceph通过RESTful API提供可访问且最稳定的多租户对象存储解决方案之一。
            对象存储不能像文件系统的磁盘那样被操作系统直接访问,相反,它只能通过API在应用层面被访问。Ceph是一个分布式对象存储系统,该系统通过建立在Ceph RADOS层之上的Ceph对象网关(也被称为RADOS网关RGW接口)提供对象存储接口,RGW使用librgw(RADOS网关库)和librados,允许应用程序与Ceph对象存储建立连接。该RGW为应用提供了RESTful S3/Swift兼容的API接口,以在Ceph集群中存储对象格式的数据。Ceph还支持多租户对象存储,通过RESTful API存取。除此之外,RGW还支持Ceph Admin API,他们用于通过原生API调用来管理Ceph存储集群。
    librados软件库非常灵活,允许用户应用程序通过C、C++、Java、Python和PHP绑定(bindings)直接访问Ceph存储集群。Ceph对象存储还具有多站点功能,也就是说,提供了灾难恢复解决方案。

            要访问Ceph的对象存储系统,也可以绕开RADOS网关层,这样更灵活并且速度更快。librados软件库允许用户的应用程序通过C、C++、java、python、php直接访问ceph对象存储。如下图:

     

    Ceph对象网关
            Ceph对象网关,也称作RADOS网关,它是一个代理,可以将HTTP请求转换为RADOS,同时也可以把RADOS请求转换为HTTP请求,从而提供RESTful对象存储,兼容S3和Swift。Ceph对象存储使用Ceph对象网关守护进程(radosgw)和librgw、librados(即Ceph集群)交互。

    相关概念及定义

    几个内部概念

    • zone:包含多个RGW实例的一个逻辑概念。zone不能跨集群。同一个zone的数据保存在同一组pool中。

    • zonegroup:一个zonegroup如果包含1个或多个zone。如果一个zonegroup包含多个zone,必须指定 一个zone作为master zone,用来处理bucket和用户的创建。一个集群可以创建多个zonegroup,一个zonegroup也可以跨多个集群。

    • realm:一个realm包含1个或多个zonegroup。如果realm包含多个zonegroup,必须指定一个zonegroup为master zonegroup,用来处理系统操作。一个系统中可以包含多个realm,多个realm之间资源完全隔离。

    • 提示:我们当前产品多站点是采用一个zonegroup多个zone来实现站点间的数据同步

    几个外部概念

    • 用户: 对象应用的使用者。 一个用户拥有一个或多个存储桶。

    • 存储桶: 存储桶是对象的容器。 是为了方便管理和操作具有同一属性的一类对象引入的一层管理单元。

    • 对象: 对象是对象存储系统数据组织和存储的基本单位,一个对象包括数据和元数据。

    数据组织和存储

    1、用户

            用户指的是对象存储应用的使用者。一个用户拥有一个或多个存储桶。用户管理设计主要基于以下几个方面考虑:首先是为了对restful api进行请求认证,其次是为了控制用户对资源(存储桶、对象等)的访问限制,最后是为了控制用户的可用存储空间,因此一个用户包含的信息包括用户认证信息、访问控制权限信息和配额信息。常用命令如下

    查看用户信息:/var/lib/ceph/bin/radosgw-admin user info --uid=

    查看用户使用容量:/var/lib/ceph/bin/radosgw-admin user stats --uid=

    2、存储桶

            一个存储桶对应要一个RADOS对象。一个存储桶包含的信息包括两类,一类是对RGW网关透明的信息,这类信息通常指用户自定义的元数据,RGW网关直接将这些信息保存在扩展属性中,一个KV键值对对应一个扩展属性条目,另一类是RGW网关关注的信息,这类信息包括存储桶中对象的存储策略、存储桶中索引对象的数目以及应用对象和索引对象的映射关系、存储桶的配额等,此类信息由数据结构RGWBucketInfo管理。

            在创建存储桶时,RGW网关会同步创建一个或多个索引(index)对象,用于保存该存储桶下的对象列表,以支持查询存储桶对象列表(List Bucket)功能,因此在存储桶中有心的对象上传或者删除的时候会更新索引对象。常用命令如下

    列出所有桶:/var/lib/ceph/bin/radosgw-admin bucket list 

    查询桶状态:/var/lib/ceph/bin/radosgw-admin bucket stats --bucket=

    删除非空桶:/var/lib/ceph/bin/radosgw-admin bucket rm --bucket= --purge-object

    3、对象

          应用上传的对象包括数据和元数据两部分,数据部分保存在一个或多个RADOS对象的数据部分,元数据保存在其中一个RADOS对象的拓展属性中。RGW对单个对象提供了两种上传接口:整体上传和分段上传。rgw限制了整体上传一个对象大小不能大于5G(可调整rgw_max_put_size修改),当对象大于该限制时,必须进行分段上传,否则对象上传失败。他们之间具体的区别差异这里不过多叙述。

    4、数据存储位置

            前面说了,不同的用户数据最终以rados对象为单位保存到rados集群中。为了实现不同的应用数据存储位置的隔离,rgw使用placement来管理用户数据的存储位置,它是由一组pool组成,不同的pool来保存不同的数据。placement需应用到zone中,用户才能使用。

  • 相关阅读:
    servlet API
    【物理】斜面交点之处机械能/动量损失问题
    Java JDK 安装
    C# web mvc中文件夹的结构和作用
    MyBatis-Plus主键生成策略[MyBatis-Plus系列] - 第491篇
    基于Java+MySQL的三维模型素材交易平台设计
    【如何看待Unity收费】对标中小公司的待就业者的该如何做
    Es Ik
    软件工程师:机器学习也需要学习?
    基于tcp协议及数据库sqlite3的云词典项目
  • 原文地址:https://blog.csdn.net/weixin_42241611/article/details/126437921