rgw metadata 保存哪些信息?
metadata中保存了user和bucket的相關(guān)信息,后續(xù)版本又增加了otp(One-Time Password)一次性口令信息。
rgw metadata 相關(guān)命令
metadata 主要命令包括
metadata get get metadata info
metadata put put metadata info
metadata rm remove metadata info
metadata list list metadata info
查看所有的metadata 類型
# radosgw-admin metadata list
[
"bucket",
"bucket.instance",
"otp",
"user"
]
查看某種類型的metadata中包含的key列表
# radosgw-admin metadata list user
[
"user2",
"user3",
"user1",
"user4"
]
查看具體某個(gè)metadata的key對(duì)應(yīng)的value值
# radosgw-admin metadata get user:user1
{
"key": "user:user1",
"ver": {
"tag": "_rEVrSff5juMMuo3Iad_hMc-",
"ver": 1
},
"mtime": "2020-08-18 02:32:58.708288Z",
"data": {
"user_id": "user1",
"display_name": "User1",
"email": "user1@toyou.com.cn",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "user1",
"access_key": "45QJVFFG27N7PXZZ7XVG",
"secret_key": "Vdoc8k0JHWJv5OlvPftPk2Iwc9K6EuppfDF84afF"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": [],
"attrs": []
}
}
metadata同步命令
metadata sync status get metadata sync status
metadata sync init init metadata sync
metadata sync run run metadata sync
metadata log相關(guān)命令
mdlog list list metadata log
mdlog trim trim metadata log (use start-date, end-date or start-marker, end-marker)
mdlog status read metadata log status
rgw metadata 怎么保存的?
其實(shí)metadata這種數(shù)據(jù)更適合于表格來(lái)存儲(chǔ),估計(jì)是ceph是不想引入第三方的數(shù)據(jù)庫(kù),所以采用ceph的rados存儲(chǔ)。rados保存數(shù)據(jù)有三種方式:object data、object xattr、object omap。
rgw根據(jù)數(shù)據(jù)不同需要采用不同存儲(chǔ)方式。
因?yàn)閤attr的空間限制,metadata中的acl和version保存在這個(gè)里面
實(shí)際的數(shù)據(jù)都是保存至object data中。一些特殊的情況如user下面的所有bucket,是通過(guò)omap來(lái)保存的。
rgw的metadata信息統(tǒng)一保存在<zone name>.rgw.meta名稱的pool中。
bucket和bucket instance 保存在 root名字空間中,通過(guò)命名規(guī)則來(lái)區(qū)分。
rgw metadata 實(shí)現(xiàn)原理
RGWMetadataObject:保存metadata對(duì)象的一個(gè)父類,即所有作為metadata保存的對(duì)象都應(yīng)該繼承于這個(gè)類,其包含修改實(shí)際和版本號(hào)基本信息。
RGWMetadataHandler:提供了操作metadata對(duì)象的接口,包括get,put,remove,list等。
RGWMetadataManager:管理所有RGWMetadataHandler,每個(gè)handler注冊(cè)一個(gè)名稱,可以通過(guò)名稱定為到handler。
總結(jié)
rgw metadata中保存了user和bucket相關(guān)信息,但是沒有保存bucket中的對(duì)象信息。默認(rèn)所有metadata都存放到同一個(gè)pool的不同名字空間中,radosgw-admin提供了metadata統(tǒng)一的操作命令。