ceph rgw:metadata 管理

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统一的操作命令。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。