概覽
本篇文章介紹了ceph rgw組件里面蜓席,用戶器一、bucket和用戶數據對象之間的關系,以及它們和底層rados對象之間的關系厨内,我們希望達到以下目的:
- 理解一個用戶的信息是如何保存在底層rados中的
- 理解一個bucket的信息是如何保存在底層rados中的
- 理解一個用戶和該用戶所擁有的bucket之間的關系
- 理解一個bucket和該bucket里面的用戶數據之間的關系
理解了上面這些關系之后祈秕,然后做一個小實驗:通過s3cmd把上傳文件到radosgw,然后直接通過拼接底層的rados對象來得到用戶數據雏胃。
1请毛、配置一個radosgw服務
首先要準備一個radosgw環(huán)境,這里為了演示方便瞭亮,使用了最簡的配置方仿。
1.1、準備radosgw配置文件
[root@ceph01 tmp]# cat /etc/ceph/ceph.conf
···
[client.rgw.inst01]
rgw_frontends = civetweb port=9001
1.2仙蚜、啟動radosgw服務
[root@ceph01 tmp]# systemctl start ceph-radosgw@rgw.inst01
查看rados里面的存儲池
[root@ceph01 tmp]# ceph osd pool ls
rbd
.rgw.root
default.rgw.control
default.rgw.data.root
default.rgw.gc
default.rgw.log
default.rgw.users.keys
可以看到啟動radosgw服務時此洲,radosgw服務自動會創(chuàng)建相關的存儲池
2鳍征、準備數據
下面為了達到我們列出的目標,我們需要創(chuàng)建一個rgw用戶氮双,然后使用該用戶創(chuàng)建一個bucket。
2.1暖释、創(chuàng)建一個radosgw用戶
[root@ceph01 tmp]# radosgw-admin user create --uid=rgwuser01 --display-name=rgwuser01 --access-key=rgwuser01 --secret=rgwuser01
{
"user_id": "rgwuser01",
"display_name": "rgwuser01",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [
{
"user": "rgwuser01",
"access_key": "rgwuser01",
"secret_key": "rgwuser01"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"temp_url_keys": []
}
再次查看rados里面的存儲池
[root@ceph01 tmp]# ceph osd pool ls
rbd
.rgw.root
default.rgw.control
default.rgw.data.root
default.rgw.gc
default.rgw.log
default.rgw.users.keys
default.rgw.users.uid
可以看到創(chuàng)建用戶之后,自動創(chuàng)建了default.rgw.users.uid這個池墨吓。
2.2球匕、創(chuàng)建bucket
使用s3cmd客戶端創(chuàng)建一個bucket
[root@ceph07 ~]# s3cmd mb s3://bk01
Bucket 's3://bk01/' created
再次查看rados里面的存儲池
[root@ceph01 tmp]# ceph osd pool ls
rbd
.rgw.root
default.rgw.control
default.rgw.data.root
default.rgw.gc
default.rgw.log
default.rgw.users.keys
default.rgw.users.uid
default.rgw.buckets.index
可以看到創(chuàng)建用戶之后,自動創(chuàng)建了default.rgw.buckets.index這個池
3帖烘、理解用戶亮曹、bucket、用戶對象之間的關系秘症,以及它們和rados對象的對應關系
3.1照卦、用戶和rados對象對應關系
我們上面創(chuàng)建了一個radosgw用戶rgwuser01,這個用戶相關數據保存在哪里呢乡摹?
[root@ceph01 tmp]# rados -p default.rgw.users.uid ls
rgwuser01.buckets
rgwuser01
通過上面命令可以看到役耕,在default.rgw.users.uid池里面有兩個rados對象,rgwuser01對象和我們用戶的id名稱一致聪廉,這個對象就是用來保存用戶信息的rados對象蹄葱。每個radosgw用戶在這個池里面都對應一個rados對象,對象名就是用戶id名稱锄列。
3.2图云、bucket和rados對象的對應關系
[root@ceph01 tmp]# rados -p default.rgw.data.root ls
.bucket.meta.bk01:475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1
bk01
可以看到,bk01這個bucket在default.rgw.data.root
池里面有個rados對象.bucket.meta.bk01:475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1
與之對應邻邮,這個rados對象就是對應bk01 bucket的竣况,這個rados對象里面存放了一些關于bk01 bucket元數據信息:
[root@ceph01 tmp]# rados -p default.rgw.data.root get .bucket.meta.bk01:475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1 bucket.meta.bk01
[root@ceph01 tmp]# ll
total 8
-rw-r--r--. 1 root root 341 Oct 25 17:19 bucket.meta.bk01
···
[root@ceph01 tmp]# ceph-dencoder type RGWBucketInfo import bucket.meta.bk01 decode dump_json
{
"bucket": {
"name": "bk01",
"pool": "default.rgw.buckets.data",
"data_extra_pool": "default.rgw.buckets.non-ec",
"index_pool": "default.rgw.buckets.index",
"marker": "475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1",
"bucket_id": "475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1",
"tenant": ""
},
"creation_time": "2018-10-25 09:05:06.249973Z",
"owner": "rgwuser01",
"flags": 0,
"zonegroup": "3a55c2fa-805b-4166-961b-907654e76cb6",
"placement_rule": "default-placement",
"has_instance_obj": "true",
"quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"num_shards": 0,
"bi_shard_hash_type": 0,
"requester_pays": "false",
"has_website": "false",
"swift_versioning": "false",
"swift_ver_location": "",
"index_type": 0
}
通過查詢bk01這個bucket的元數據信息,可以知道bk01這個bucket的id為475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1
筒严。
另外丹泉,bucket的acl信息保存在元數據對象的xattr里面:
[root@ceph01 tmp]# rados -p default.rgw.data.root getxattr .bucket.meta.bk01:475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1 user.rgw.acl > encode.bk01.bucket.acl
[root@ceph01 tmp]# ceph-dencoder type RGWAccessControlPolicy import encode.bk01.bucket.acl decode dump_json
{
"acl": {
"acl_user_map": [
{
"user": "rgwuser01",
"acl": 15
}
],
"acl_group_map": [],
"grant_map": [
{
"id": "rgwuser01",
"grant": {
"type": {
"type": 0
},
"id": "rgwuser01",
"email": "",
"permission": {
"flags": 15
},
"name": "rgwuser01",
"group": 0
}
}
]
},
"owner": {
"id": "rgwuser01",
"display_name": "rgwuser01"
}
}
3.3情萤、用戶和bucket的對應關系
我們都知道一個用戶可以有屬于自己的多個bucket,那用戶和bucket的對應關系是怎么建立的呢摹恨?
在上面通過rados -p default.rgw.users.uid ls
命令查詢的結果里面除了用戶對象以外筋岛,還有一個rgwuser01.buckets對象,這個對應的命令格式就是{uid}.buckets晒哄,用戶和bucket的對應關系就保存在這個對象的omap里面睁宰,key值就是bucket的名稱,讓我們來驗證下:
查看rgwuser01.buckets這個對象有哪些key
[root@ceph01 tmp]# rados -p default.rgw.users.uid listomapkeys rgwuser01.buckets
bk01
可以看到有bk01這個key寝凌,bk01就是我們創(chuàng)建的bucket名稱柒傻,這點沒問題了。再來獲取下bk01這個key對應的value值
[root@ceph01 tmp]# rados -p default.rgw.users.uid getomapval rgwuser01.buckets bk01 encode_bk01
Writing to encode_bk01
[root@ceph01 tmp]# ll
total 4
-rw-r--r--. 1 root root 244 Oct 25 17:13 encode_bk01
[root@ceph01 tmp]# ceph-dencoder type RGWBucketEnt import encode_bk01 decode dump_json
{
"bucket": {
"name": "bk01",
"pool": "default.rgw.buckets.data",
"data_extra_pool": "default.rgw.buckets.non-ec",
"index_pool": "default.rgw.buckets.index",
"marker": "475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1",
"bucket_id": "475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1",
"tenant": ""
},
"size": 0,
"size_rounded": 0,
"mtime": "2081-05-24 08:53:24.863590Z",
"count": 0
}
可以看到bk01這個key所對應的value值就是bk01這個bucket的信息较木。這樣我們知道了uid红符,然后通過{uid}.buckets這個rados對象就可以查詢到該用戶下有哪些bucket了。
3.4伐债、bucket和bucket里面數據的對應關系
使用s3cmd客戶端上傳一個對象
[root@ceph07 ~]# s3cmd put anaconda-ks.cfg s3://bk01
upload: 'anaconda-ks.cfg' -> 's3://bk01/anaconda-ks.cfg' [1 of 1]
1021 of 1021 100% in 1s 677.26 B/s done
查看rados里面的存儲池信息
[root@ceph01 tmp]# ceph osd pool ls
rbd
.rgw.root
default.rgw.control
default.rgw.data.root
default.rgw.gc
default.rgw.log
default.rgw.users.keys
default.rgw.users.uid
default.rgw.buckets.index
default.rgw.buckets.data
可以看到上傳對象之后预侯,自動創(chuàng)建了default.rgw.buckets.data這個池,看下這個池里面的對象
[root@ceph01 tmp]# rados -p default.rgw.buckets.data ls
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1_anaconda-ks.cfg
那么bucket是如何知道自己包含了哪些對象呢峰锁?其實是每個bucket在default.rgw.buckets.index這個池里面有一個rados對象萎馅,我們叫這個rados對象為索引對象
[root@ceph01 tmp]# rados -p default.rgw.buckets.index ls
.dir.475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1
可以看到一個.dir.475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1
對象,這個對象的名稱和我們上面看到的bucket id相比祖今,在前面多了.dir.這個字符校坑,這個對象就是每個bucket在rados里面的索引對象,命名格式就是.dir.{bucket-id}千诬。這個對象的omap里面就保存了這個bucket下所包含的所有對象信息耍目,我們驗證下
[root@ceph01 tmp]# rados -p default.rgw.buckets.index listomapkeys .dir.475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1
anaconda-ks.cfg
可以看到輸出里面和我們上傳的對象名一致,我們再上傳一個對象看看是不是這樣
[root@ceph07 ~]# cp anaconda-ks.cfg anaconda-ks.cfg2
[root@ceph07 ~]# s3cmd put anaconda-ks.cfg2 s3://bk01
upload: 'anaconda-ks.cfg2' -> 's3://bk01/anaconda-ks.cfg2' [1 of 1]
1021 of 1021 100% in 0s 18.55 kB/s done
然后再次查看徐绑,發(fā)現確實是這樣的
[root@ceph01 tmp]# rados -p default.rgw.buckets.index listomapkeys .dir.475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1
anaconda-ks.cfg
anaconda-ks.cfg2
這樣我們就知道了bucket是怎么知道自己包含了哪些用戶數據對象的邪驮。要說明一點的是,bucket的索引對象個數可以去更改傲茄,默認只有一個毅访。
4、根據底層的rados對象拼接用戶文件
這個實驗大概過程就是盘榨,用戶通過radosgw的客戶端(s3cmd)喻粹,上傳一個文件,然后我們在rados層面獲取該文件對應的rados對象草巡,然后通過這些rados對象直接拼接成用戶上傳的文件守呜。
首先準備一個文件,這里特意準備了一個稍大的文件是為了讓s3cmd分段上傳(默認15M一段),小文件雖然不用分段查乒,但是原理也一樣
[root@ceph07 ~]# ll
total 85576
···
-rw-r--r--. 1 root root 87581279 Oct 26 15:24 messages-20180722
計算該文件的md5值弥喉,用于驗證后面我們拼接出來的文件的正確性
[root@ceph07 ~]# md5sum messages-20180722
b4a6227030352dcc3318684789fda6e1 messages-20180722
然后使用s3cmd上傳到radosgw中(radosgw最終會將數據存到rados中)
[root@ceph07 ~]# s3cmd put messages-20180722 s3://bk01
upload: 'messages-20180722' -> 's3://bk01/messages-20180722' [part 1 of 6, 15MB] [1 of 1]
15728640 of 15728640 100% in 0s 23.46 MB/s done
upload: 'messages-20180722' -> 's3://bk01/messages-20180722' [part 2 of 6, 15MB] [1 of 1]
15728640 of 15728640 100% in 0s 31.34 MB/s done
upload: 'messages-20180722' -> 's3://bk01/messages-20180722' [part 3 of 6, 15MB] [1 of 1]
15728640 of 15728640 100% in 2s 5.05 MB/s done
upload: 'messages-20180722' -> 's3://bk01/messages-20180722' [part 4 of 6, 15MB] [1 of 1]
15728640 of 15728640 100% in 1s 9.08 MB/s done
upload: 'messages-20180722' -> 's3://bk01/messages-20180722' [part 5 of 6, 15MB] [1 of 1]
15728640 of 15728640 100% in 1s 11.20 MB/s done
upload: 'messages-20180722' -> 's3://bk01/messages-20180722' [part 6 of 6, 8MB] [1 of 1]
8938079 of 8938079 100% in 0s 11.76 MB/s done
可以看到s3cmd將文件分成了6段來上傳,每段的大小是15M玛迄,最后一段是8M由境,因為文件最后只剩8M了嘛。
根據前面我們的講述蓖议,我們知道radosgw將用戶數據保存在了default.rgw.buckets.data池中维咸,我們來看下剛才上傳的文件在rados中的分布情況
[root@ceph01 ~]# rados -p default.rgw.buckets.data ls|grep messages-20180722
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.2_2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__multipart_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.4_2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.6_2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1_messages-20180722
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.3_1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.1_1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.5_1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.5_2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.3_3
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__multipart_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.5
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.1_2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.5_3
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.3_2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__multipart_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.4
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.1_3
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.2_3
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.2_1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.4_3
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.6_1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.4_1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__multipart_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__multipart_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.6
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__multipart_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.3
radosgw默認將用戶數據按照4M大卸㈦纭(有參數可以控制切分大辛藁埂)來切好乒省,然后放到rados里面的评肆,所以我們上傳的文件最終就是切分成了上面的這些對象漓雅。
接下來我們就是要把這些對象get出來怜森,然后拼接成我們的用戶數據(就是我們使用s3cmd put上去的文件)仍律。
首先我們把上面的對象整理成下面的順序钧栖,然后放入一個文本文件中:
[root@ceph01 messagesobj]# cat messages-obj
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1_messages-20180722
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__multipart_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.1_1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.1_2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.1_3
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__multipart_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.2_1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.2_2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.2_3
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__multipart_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.3
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.3_1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.3_2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.3_3
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__multipart_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.4
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.4_1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.4_2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.4_3
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__multipart_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.5
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.5_1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.5_2
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.5_3
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__multipart_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.6
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.6_1
475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1__shadow_messages-20180722.2~5-WOTuK85AHNkHUOZdTbLBQqCAzYoeW.6_2
為啥要整理成這種順序低零,仔細觀察下就會發(fā)現,所有和用戶數據對象messages相關的rados對象拯杠,都有規(guī)律的掏婶。
這里簡單粗暴說下:首先所有對象都是以bk01這個bucket的id開頭,然后我們知道分成了6段潭陪,看下包含__multipart_messages字符的對象有6個雄妥,然后每個結尾都有數字標識,從1-6依溯。
再看每段里面又包含__shadow_messages字符的對象老厌,也是每個結尾都有數字標識,從1-3黎炉。最后是一個475caa43-5052-4d27-8ffb-897db2b8a2ec.34271.1_messages-20180722這樣的對象枝秤,這個對象里面就是保存了整個用戶數據對象的元數據和分段的信息。
然后從rados中獲取這些對象慷嗜,并拼接
[root@ceph01 messagesobj]# for i in `cat messages-obj`;do rados -p default.rgw.buckets.data get $i $i; cat $i >> message.txt;done
最后我們看下我們拼接文件的md5值淀弹,看是否和開始我們使用s3cmd上傳的文件的md5一樣
[root@ceph01 messagesobj]# md5sum message.txt
b4a6227030352dcc3318684789fda6e1 message.txt
可以看到,md5值是一樣的庆械。這樣我們就完成了薇溃,直接通過底層的rados對象來重組出用戶的數據,實際上我們正常情況下不需要這么去做缭乘,這里只是為了更好的理解用戶數據在底層rados上是怎么組織和存放的沐序。
好了,到這里就弄清楚了開始在目標里面列出的幾個問題,動手試試吧薄啥。