rgw分片上传对象组织形式

定位rgw分片上传的对象

version:ceph13.2.4

确定分片上传的全部对象

利用s3cmd向mpbucket01上传了一个名为2.txt的对象(210M)

1.首先确定bucket的bucketindex

[root@sns-nvceph01 ~]# radosgw-admin bucket stats | grep mpbucket01 -A 50
        "bucket": "mpbucket01",
        "zonegroup": "9a4a7e5e-48c5-486c-8e80-ff2f384045ff",
        "placement_rule": "default-placement",
        "explicit_placement": {
            "data_pool": "",
            "data_extra_pool": "",
            "index_pool": ""
        },
        "id": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",#这是bucket.index的id
        "marker": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
        "index_type": "Normal",
        "owner": "client",
        "ver": "0#200",
        "master_ver": "0#0",
        "mtime": "2019-04-25 14:02:27.599200",
        "max_marker": "0#",
        "usage": {
            "rgw.main": {
                "size": 770683833,
                "size_actual": 770691072,
                "size_utilized": 770683833,
                "size_kb": 752621,
                "size_kb_actual": 752628,
                "size_kb_utilized": 752621,
                "num_objects": 10
            },
            "rgw.multimeta": {
                "size": 0,
                "size_actual": 0,
                "size_utilized": 0,
                "size_kb": 0,
                "size_kb_actual": 0,
                "size_kb_utilized": 0,
                "num_objects": 1
            }
        },
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        }
    }

------------


2.根据bucketindex的id拼属性对象的名字,查找uploadid

先找到含有manifest属性的对象

  保存整个对象的manifest的对象名字为:
  {bucketindexid}+_{objectname}
  对应的对象名字为:
  fa15df30-b48d-46a7-90bf-7b9212002005.4577.37_2.txt

获取manifest属性,利用dencoder可以解码出属性.用户上传的自定义属性(s3支持用户上传自定义属性)也会存放在对象的attr属性中.dencoder使用

[root@sns-nvceph01 tmp]# rados -p default.rgw.buckets.data listxattr fa15df30-b48d-46a7-90bf-7b9212002005.4577.37_2.txt
user.rgw.acl
user.rgw.content_type
user.rgw.etag
user.rgw.idtag
user.rgw.manifest
user.rgw.pg_ver
user.rgw.source_zone
user.rgw.tail_tag
user.rgw.x-amz-date
user.rgw.x-amz-meta-s3cmd-attrs
user.rgw.x-amz-storage-class

----------

rados -p default.rgw.buckets.data getxattr fa15df30-b48d-46a7-90bf-7b9212002005.4577.37_2.txt user.rgw.manifest > manifest.2.txt

----------

[root@sns-nvceph01 tmp]# ceph-dencoder import 'manifest.2.txt' type RGWObjManifest decode dump_json
{
  "objs": [],
  "obj_size": 220194451,
  "explicit_objs": "false",
  "head_size": 0,
  "max_head_size": 0,
  "prefix": "2.txt.2~c1vBz-e0_FGZehQmTHiaP1wuHSx-3oo",
  "rules": [
      {
          "key": 0,
          "val": {
              "start_part_num": 1,
              "start_ofs": 0,
              "part_size": 15728640,
              "stripe_max_size": 4194304,
              "override_prefix": ""
          }
      },
      {
          "key": 204472320,
          "val": {
              "start_part_num": 14,
              "start_ofs": 204472320,
              "part_size": 15722131,
              "stripe_max_size": 4194304,
              "override_prefix": ""
          }
      }
  ],
  "tail_instance": "",
  "tail_placement": {
      "bucket": {
          "name": "mpbucket01",
          "marker": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
          "bucket_id": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
          "tenant": "",
          "explicit_placement": {
              "data_pool": "",
              "data_extra_pool": "",
              "index_pool": ""
          }
      },
      "placement_rule": "default-placement"
  },
  "begin_iter": {
      "part_ofs": 0,
      "stripe_ofs": 0,
      "ofs": 0,
      "stripe_size": 4194304,
      "cur_part_id": 1,
      "cur_stripe": 0,
      "cur_override_prefix": "",
      "location": {
          "placement_rule": "default-placement",
          "obj": {
              "bucket": {
                  "name": "mpbucket01",
                  "marker": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
                  "bucket_id": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
                  "tenant": "",
                  "explicit_placement": {
                      "data_pool": "",
                      "data_extra_pool": "",
                      "index_pool": ""
                  }
              },
              "key": {
                  "name": "2.txt.2~c1vBz-e0_FGZehQmTHiaP1wuHSx-3oo.1",
                  "instance": "",
                  "ns": "multipart"
              }
          },
          "raw_obj": {
              "pool": "",
              "oid": "",
              "loc": ""
          },
          "is_raw": false
      }
  },
  "end_iter": {
      "part_ofs": 220194451,
      "stripe_ofs": 220194451,
      "ofs": 220194451,
      "stripe_size": 4194304,
      "cur_part_id": 15,
      "cur_stripe": 0,
      "cur_override_prefix": "",
      "location": {
          "placement_rule": "default-placement",
          "obj": {
              "bucket": {
                  "name": "mpbucket01",
                  "marker": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
                  "bucket_id": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
                  "tenant": "",
                  "explicit_placement": {
                      "data_pool": "",
                      "data_extra_pool": "",
                      "index_pool": ""
                  }
              },
              "key": {
                  "name": "2.txt.2~c1vBz-e0_FGZehQmTHiaP1wuHSx-3oo.15",
                  "instance": "",
                  "ns": "multipart"
              }
          },
          "raw_obj": {
              "pool": "",
              "oid": "",
              "loc": ""
          },
          "is_raw": false
      }
  }
}

查找到uploadid为2~c1vBz-e0_FGZehQmTHiaP1wuHSx-3oo
分片数为14

3.查找所有multipart和shadow文件

multipart:
{bucketindexid}+__multipart_+{objectname}+.+{uploadid}+.+{partnumber}
fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_2.txt.2~c1vBz-e0_FGZehQmTHiaP1wuHSx-3oo.2
shadow:
{bucketindexid}+__shadow_+{objectname}+.+{uploadid}+.+{partnumber}+_+{shardnum}
fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_2.txt.2~c1vBz-e0_FGZehQmTHiaP1wuHSx-3oo.2_1

multipart对象有14个,每个multipart对象有3个shadow对象
14 = 210/15(s3cmd切分对象的大小)
每个上传分片15m,由一个multipart对象(4M)+3个shadow对象(大小分别为4M,4M,3M)组成.

注意

如果分片上传失败,或者中途取消了分片上传,会有一些遗留下来的中间数据,需要手动进行删除.
1.bucket.index中的omap

形如:

[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.index listomapkeys .dir.fa15df30-b48d-46a7-90bf-7b9212002005.4577.37
1.txt ##这是上传成功的数据
2.txt
3.txt
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.1 ##这种数据就是临时omap数据,上传失败或者取消了会存留下来
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.2
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.3
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.4
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.5
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.6
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.7
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.meta
_multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1
_multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.2
_multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.3
_multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.4
_multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.meta

2.data_extra_pool(本例中为default.rgw.buckets.non-ec)

[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.non-ec ls
fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.meta
fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.meta
fa15df30-b48d-46a7-90bf-7b9212002005.80357.90__multipart_111.txt.2~_B94dfuXmOtkYHERcwRlZKHTPYBH5Ni.meta

3.multipart对象

以33.txt为例子,通过观察可以发现33.txt已经上传了4个分片

[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat 'fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.3'
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.3 mtime 2019-04-26 16:56:41.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat 'fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1'
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1 mtime 2019-04-26 16:56:40.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat 'fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.2'
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.2 mtime 2019-04-26 16:56:40.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat 'fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.3'
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.3 mtime 2019-04-26 16:56:41.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat 'fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.4'
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.4 mtime 2019-04-26 16:56:41.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat 'fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.5'
 error stat-ing default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.5: (2) No such file or directory

4.shadow对象
现在rgw单个分片大小为15M,可以由4个rados对象组成(4M),所以一个rgw分片由一个manifest和3shadow组成

[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_1
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_1 mtime 2019-04-26 16:56:40.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_2
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_2 mtime 2019-04-26 16:56:40.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_3
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_3 mtime 2019-04-26 16:56:40.000000, size 3145728
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_4
 error stat-ing default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_4: (2) No such file or directory

如果上传失败需要把这些失效对象删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ceph RGW(Rados Gateway)是Ceph存储系统中提供对象存储服务的组件。它允许用户通过HTTP协议以对象形式存储和检索数据。 Ceph RGW是一个分布式的、高可用的存储解决方案,它将数据分散保存在多个物理节点上,提供了可靠的数据冗余和容错能力。通过数据的分散,RGW能够实现高并发的访问和高吞吐量的数据传输,从而满足大规模的存储需求。 在Ceph RGW中,数据以对象形式存储,每个对象都有一个唯一的标识符和元数据信息,可以通过它们进行快速的检索和访问。对象可以以任意格式存储,如文本、图片、视频等。通过提供RESTful风格的API,RGW使得开发者能够方便地访问和操作存储在其中的对象RGW支持多租户的机制,可以为不同的用户或应用程序提供独立的存储空间和访问权限。它还提供了访问控制机制,可以通过身份验证、访问策略等方式,限制对象的访问权限,并保证数据的安全性。 另外,Ceph RGW还具有自动化的数据迁移和负载均衡功能,可以根据数据的访问模式和负载情况,自动调整数据的存储位置和副本数量,以实现最佳的性能和可用性。 综上所述,Ceph RGW是一款功能强大、可靠性高的对象存储服务,适用于大规模存储和分发数据的场景。它提供了高并发、高吞吐量的数据访问和传输能力,以及安全性、可扩展性等方面的优势,成为当今对象存储领域的一种重要解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值