rgw metadata 保存哪些信息?
metadata中保存了user和bucket的相关信息,后续版本又增加了otp(One-Time Password)一次性口令信息。
rgw metadata 相关命令
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"
]
查看具体某个metadata的key对应的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相关命令
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 怎么保存的?
其实metadata这种数据更适合于表格来存储,估计是ceph是不想引入第三方的数据库,所以采用ceph的rados存储。rados保存数据有三种方式:object data、object xattr、object omap。
rgw根据数据不同需要采用不同存储方式。
因为xattr的空间限制,metadata中的acl和version保存在这个里面
实际的数据都是保存至object data中。一些特殊的情况如user下面的所有bucket,是通过omap来保存的。
rgw的metadata信息统一保存在<zone name>.rgw.meta名称的pool中。
bucket和bucket instance 保存在 root名字空间中,通过命名规则来区分。
rgw metadata 实现原理
RGWMetadataObject:保存metadata对象的一个父类,即所有作为metadata保存的对象都应该继承于这个类,其包含修改实际和版本号基本信息。
RGWMetadataHandler:提供了操作metadata对象的接口,包括get,put,remove,list等。
RGWMetadataManager:管理所有RGWMetadataHandler,每个handler注册一个名称,可以通过名称定为到handler。
总结
rgw metadata中保存了user和bucket相关信息,但是没有保存bucket中的对象信息。默认所有metadata都存放到同一个pool的不同名字空间中,radosgw-admin提供了metadata统一的操作命令。