什么是对象存储

对象存储是一种以非结构化格式(称为对象),简单来说,对象存储是一种将文件存储为对象而不是数据块的存储架构。它是一种将非结构化数据存储在跨位置分布的结构化平面文件系统中的方法。在这种格式中,文件空间由元数据标签组成,支持简单的 API 来描述、读取、删除和定位对象。因此,您可以通过 API 协议直接访问任何设备上保存的数据。此类元数据标签包括有助于更好地识别和分类数据的唯一标识符。

这些元数据标签是高度可定制的,让您可以在需要时通过跟踪和索引文件来轻松组织、访问和检索所有数据。对象存储服务可以在设备级、系统级甚至接口级实现。作为对象存储的数据可确保数据可用性、可搜索性并增强数据安全性,因为它可以保护数据免遭意外删除或损坏。

什么是 CEPH 中的对象存储

在知道了对象存储不能作为文件系统磁盘由操作系统直接访问,只可以通过应用程序级别的 API 进行访问。Ceph是一个分布式对象存储系统,通过一个 “网关服务” 来提供对象存储接口,这个服务被称为 RADOS Gateway ( RGW ),RGW是构建在 Ceph RADOS 之上,通过在 librados 之构建出的一个库 librgw,实际上是一个 Civetweb 的服务,rados gateway 内嵌在里面,RGW 为应用程序提供兼容 RESTfulS3/Swift 的 API 接口,以在 Ceph 集群中以对象的形式存储数据。Ceph 还支持多租户对象存储,可通过 RESTful API 访问。除此之外,RGW 还支持 Ceph 管理 API,可用于使用本机 API 调用来管理 Ceph 存储集群。

librados 是一个构建在 RADOS 集群和 Ceph 集群的中间层,通过这个库,提供了允许用户应用程序通过C、C++、Java、Python 和 PHP绑定直接访问 Ceph 存储集群。Ceph 对象存储还具有多站点 (MultiSite) 能力,即提供灾难恢复的解决方案。

image-20230912231513576

图:Ceph RGW Structure
Source:https://docs.ceph.com/en/octopus/radosgw/

安装rgw

rgw 包 ceph-radosgw

ceph中的对象存储是使用HTTP服务与Ceph群集进行交互的(radosgw)由radosgw 提供与OpenStack SwiftAmazon S3兼容的接口,因此radosgw具有自己的管理用户。

![](../../../images/ceph object store/1ae399f8fa9af1042d3e1cbf31828f14eb3fe01a6eb3352f88c3d2a04ac4dc50.png)

ceph-deploy rgw create cn01

修改默认端口

创建用户

text
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$ radosgw-admin user create --uid demo --display-name "seal"
{
    "user_id": "demo",
    "display_name": "seal",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
        {
            "user": "demo",
            "access_key": "9REMQZ4789I85QJFW93I",
            "secret_key": "akYcu5ncvgMxCljTNGrGTHUBbMzjJmETfxtBW7SX"
        }
    ],

radosgw-admin user list

ERROR: S3 error: 416 (InvalidRange)

解决办法:

将其他对象存储后台驻留程序(OSD)添加到群集或将“mon_max_pg_per_osd”的默认值增加到300以上。

修改配置文件(管理节点操作):

$ vim ceph.conf

[mon] mon allow pool delete = true mon_max_pg_per_osd = 300

$ ceph-deploy –overwrite-conf config push c720181 c720182 c720183

重启mon服务(集群mon节点都要操作):

systemctl restart ceph-mon.target

416

set default pg_num and pgp_num to lower value(8 for example), or set mon_max_pg_per_osd to a high value in ceph.conf

416

403 (SignatureDoesNotMatch) 修改配置文件 signature_v2 = True

text
1
2
3
4
5
6
s3cmd ls 
s3cmd ls s3://demob
# 创建bucket
s3cmd mb s3://demob
# 上传目录
s3cmd put /etc/ s3://demob/etc --recursive