概述
Ceph对象网关是一个构建在librados
之上的对象存储接口,它为应用程序访问Ceph 存储集群提供了一个RESTful
风格的网关。
Ceph 对象存储支持 2 种接口:
Amazon S3 RESTful
接口的一个大子集。Openstack Swift
接口的一个大子集。Ceph对象存储使用Ceph对象网关守护进程(radosgw 以下简称RGW),它是个与Ceph存储集群交互的FastCGI模块。因为它提供了与OpenStack Swift
和Amazon S3
兼容的接口,RADOS
要有它自己的用户管理。Ceph对象网关可与CephFS客户端或Ceph 块设备客户端共用一个存储集群。S3和Swift接口共用一个通用命>名空间,所以你可以用一个接口写如数据、然后用另一个接口取出数据。
版本: Mimic
RGW 主要由3部分组成。Frontend,用于接收回复外部客户端的http请求;REST,根据外部请求的http信息选择相应的REST、Handler、Op对请求进行分解处理;RGWRados,完成了对数据读写业务的封装。
Frontend包括Frontend Config(RGWFrontendConfig
)、Civetweb(RGWCivetWebFrontend
)、beast(RGWAsioFrontend
)、loadgen(RGWLoadGenFrontend
)、fastcgi/fcgi(RGWFCGXFrontend
)。用一个map管理所有RGWFrontendConfig
配置信息对象;用一个list管理所有RGWFrontend
对象。每个RGWFrontend
>实例使用与之对应的RGWFrontendConfig
实例进行配置。
Frontend负责接收客户端的请求,然后回调process_request
方法处理该请求,并将响应信息返回客户端。
REST包括request process、S3 resource、Swift resource、Swift auth resource、Admin Usage resource、Admin User resource、Admin Metadata resource、Admin Realm resource、Admin Config resource、Admin Bucket resource、Admin OpState resource、Admin Log resource、 Admin Replica-log resource。每个resource包含一个RESTMgr、多个Handler、多个Op。
就在刚刚Frontend回调了process_request
,process_request
通过RESTMgr取得handler,handler再根据Http Method取得Op,Op再对数据进行读写操作。
组成
RGWRESTMgr_S3
组成。RGWHandler_REST_Service_S3
、RGWHandler_REST_Bucket_S3
、RGWHandler_REST_Obj_S3
、RGWHandler_REST_Service_S3Website
、RGWHandler_REST_Bucket_S3Website
、RGWHandler_REST_Obj_S3Website
。功能
RGWHandler_REST_Service_S3
, 完成如下功能:RGWHandler_REST_Bucket_S3
,完成如下功能:RGWHandler_REST_Obj_S3
,完成如下功能:组成
RGWRESTMgr_SWIFT
、RGWRESTMgr_SWIFT_CrossDomain
、RGWRESTMgr_SWIFT_HealthCheck
、RGWRESTMgr_SWIFT_Info
组成。RGWHandler_REST_Service_SWIFT
、RGWHandler_REST_Bucket_SWIFT
、RGWHandler_REST_Obj_SWIFT
、RGWHandler_REST_SWIFT_Info
、RGWHandler_SWIFT_HealthCheck
、RGWHandler_SWIFT_CrossDomain
组成。组成
RGWRESTMgr_SWIFT_Auth
组成。RGWHandler_SWIFT_Auth
组成。组成
RGWRESTMgr_Usage
、RGWRESTMgr_User
、RGWRESTMgr_Bucket
、RGWRESTMgr_Metadata
、RGWRESTMgr_Log
、RGWRESTMgr_Opstate
、RGWRESTMgr_ReplicaLog
、RGWRESTMgr_Config
、RGWRESTMgr_Realm
、RGWRESTMgr_Period
组成。RGWHandler_Usage
、RGWHandler_User
、RGWHandler_Bucket
、RGWHandler_Metadata
、RGWHandler_Log
、RGWHandler_Opstate
、RGWHandler_ReplicaLog
、RGWHandler_Config
、RGWHandler_Realm
、RGWHandler_Period
组成。RGWGetObjTags
RGWPutObjTags
RGWDeleteObjTags
实现对象属性user.rgw.x-amz-tagging
的查询、设置、删除操作RGWBulkDelete
RGWBulkUploadOp
Swift专享批量上传、删除操作RGWGetUsage
获取usage信息操作RGWStatAccount
统计buckets的使用情况RGWListBuckets
列出所有buckets
RGWGetBucketLocation
获取bucket location
RGWGetBucketVersioning
获取bucket versioning、mfa-delete状态
RGWSetBucketVersioning
设置bucket versioning
RGWGetBucketWebsite
获取bucket website信息
RGWSetBucketWebsite
设置bucket website
RGWDeleteBucketWebsite
删除bucket website
RGWStatBucket
获取bucket信息
RGWCreateBucket
创建bucket操作
RGWDeleteBucket
删除bucket操作
RGWPutBucketPolicy
设置bucket policy
RGWGetBucketPolicy
获取bucket policy
RGWDeleteBucketPolicy
删除bucket policyRGWPutObj
RGWPostObj
RGWGetObj
RGWDeleteObj
RGWCopyObj
实现对象的创建、修改、下载、删除、拷贝操作
RGWListBucket
列出bucket中的对象RGWPutMetadataAccount
Swift专享保存user所有属性信息(RGWUserInfo
)
RGWPutMetadataBucket
Swift专享保存bucket所有属性信息
RGWPutMetadataObject
Swift专享保存object所有属性信息RGWGetACLs
RGWPutACLs
实现对bucket或object的访问控制策略属性(user.rgw.acl
)的获取、设置操作RGWGetLC
RGWPutLC
RGWDeleteLC
实现对bucket的生命周期属性(user.rgw.lc
)的获取、设置、删除操作RGWGetCORS
RGWPutCORS
RGWDeleteCORS
RGWOptionsCORS
实现对bucket的CORS属性(user.rgw.cors
)的获取、设置、删除、Options操作
RGWGetCrossDomainPolicy
Swift专享获取CrossDomain策略信息操作RGWGetRequestPayment
RGWSetRequestPayment
实现对bucket的payment属性的获取、设置操作RGWInitMultipart
RGWCompleteMultipart
RGWAbortMultipart
RGWListMultipart
RGWListBucketMultiparts
RGWDeleteMultiObj
实现对Object的分片上传的操作RGWGetHealthCheck
Swift专享访问判断配置文件中的rgw_healthcheck_disabling_path
是否可以被访问操作RGWInfo
Swift专享获取Swift信息RGWGetObjLayout
获取Object的layout信息RGWConfigBucketMetaSearch
RGWGetBucketMetaSearch
RGWDelBucketMetaSearch
实现对Bucket的MetaSearch Config属性的配置、查询、删除操作RGWGetClusterStat
获取Cluster状态RGWOp_Usage_Get
RGWOp_Usage_Delete
获取usage信息操作RGWOp_User_Info
RGWOp_User_Create
RGWOp_User_Modify
RGWOp_User_Remove
user信息的获取、创建、修改、删除操作
RGWOp_Subuser_Create
RGWOp_Subuser_Modify
RGWOp_Subuser_Remove
swift user的创建、修改、删除操作
RGWOp_Key_Create
RGWOp_Key_Remove
AccessKey、SecretKey的创建、删除操作
RGWOp_Caps_Add
RGWOp_Caps_Remove
Caps属性的增加、删除操作
RGWOp_Quota_Info
RGWOp_Quota_Set
Quota的信息的获取、设置操作RGWOp_Bucket_Info
获取bucket信息操作
RGWOp_Get_Policy
获取bucket的policy信息操作
RGWOp_Check_Bucket_Index
检查bucket index操作
RGWOp_Bucket_Link
RGWOp_Bucket_Unlink
关联、去关联bucket与user操作
RGWOp_Bucket_Remove
删除bucket操作
RGWOp_Set_Bucket_Quota
设置bucket quota属性操作
RGWOp_Object_Remove
删除bucket内的object操作RGWOp_Metadata_List
RGWOp_Metadata_Get
RGWOp_Metadata_Put
RGWOp_Metadata_Delete
RGWOp_Metadata_Lock
RGWOp_Metadata_Unlock
实现对Metadata数据的管理操作RGWOp_BILog_List
RGWOp_BILog_Info
RGWOp_BILog_Delete
RGWOp_BILog_Status
实现对bucket index log的管理
RGWOp_MDLog_List
RGWOp_MDLog_Info
RGWOp_MDLog_ShardInfo
RGWOp_MDLog_Lock
RGWOp_MDLog_Unlock
RGWOp_MDLog_Notify
RGWOp_MDLog_Delete
RGWOp_MDLog_Status
实现对Metadata log的管理
RGWOp_DATALog_List
RGWOp_DATALog_Info
RGWOp_DATALog_ShardInfo
RGWOp_DATALog_Lock
RGWOp_DATALog_Unlock
RGWOp_DATALog_Notify
RGWOp_DATALog_Delete
RGWOp_DATALog_Status
实现对Data log的管理RGWOp_Opstate_List
RGWOp_Opstate_Set
RGWOp_Opstate_Renew
RGWOp_Opstate_Delete
获取远端object的操作日志管理RGWOp_OBJLog_GetBounds
RGWOp_OBJLog_SetBounds
RGWOp_OBJLog_DeleteBounds
Object同步日志管理
RGWOp_BILog_GetBounds
RGWOp_BILog_SetBounds
RGWOp_BILog_DeleteBounds
Bucket同步日志管理RGWOp_ZoneGroupMap_Get
RGWOp_ZoneConfig_Get
获取zonegroup map 和 zone config操作RGWOp_Realm_Get
获取realm信息操作
RGWOp_Period_Get
RGWOp_Period_Post
获取、设置Period信息操作RGW的所有请求都需要回调process_request
这个函数来处理,所以process_request
处理过程十分重要。
RGWHandler_REST
1.1. 获取RGWRESTMgr
对象
各种REST resource 都保存在一个map中,当请求到来时根据传入的frontend_prefix
和uri信息在map中查找对应的RGWRESTMgr
1.2. 通过RGWRESTMgr
的get_handler
获取RGWHandler_REST
对象
1.3. 调用RGWHandler_REST
对象的init
方法进行初始化RGWHandler_REST
对象的get_op
方法获取RGWOp
对象RGWOp
对象的verify_request
的方法,根据不同的操作进行不同的请求授权检查RGWHandler_REST
对象的postauth_init
方法,进行bucket和tenant解析及验证等操作RGWHandler_REST
对象的init_permissions
方法,进行初始化权限
5.1. 如果是创建Bucket操作(RGW_OP_CREATE_BUCKET)直接忽略此操作
5.2. 非创建Bucket操作,通过调用RGWHandler_REST
对象的do_init_permissions
方法进行初始化权限RGWHandler_REST
对象的read_permissions
方法,获取Object的AccessControlPolicy,若处理的是Bucket直接忽略RGWOp
对象的init_processing
方法,获取bucket和user的quota信息RGWOp
对象的verify_op_mask
验证操作的种类是否为RGW_OP_TYPE_READ
、RGW_OP_TYPE_WRITE
、RGW_OP_TYPE_DELETE
中的一个或多个RGWOp
对象的verify_permission
检查当前的操作在之前的init_permissions
获取的策略之下是否有权限RGWOp
对象的verify_params
检查当前操作的参数RGWOp
对象的pre_exec
执行预执行操作RGWOp
对象的execute
执行操作RGWOp
对象的complete
完成操作,并整理响应结果.rgw.control
pool中nodify
的对象,当发生对Object(包括System Obj 和 Normal Obj)的增删改操作时,都会触发nodify
的更新。Watcher再调用watch_cb
去更新Object的缓存信息.rgw
)、control pool(.rgw.control
)、gc pool(.rgw.gc
)、lc pool(.rgw.lc
)、objexp pool、reshard pool的IoCtx管理及操作olh.
,然后将对象存入.rgw.gc
中。GC中的回收线程会每隔1小时处理一次,每次处理从.rgw.gc
中获取对象并删除,每次处理的超时时间为1小时。delete_at
属性来等待OE清扫线程进行删除,OE清扫线程每隔10分钟处理一次。user.rgw.lc
属性配置LC,开启了LC的bucket会被随机分配到.rgw.lc
pool的lc.{index}
对象上。LC处理线程会随机获取lc.{index}
对象,对其上记录的bucket中的object进行处理,判断其是否过期失效,若失效则删除。bucket_stats_cache
和user_stats_cache
分别缓存bucket和user的quota信息,并提供check_quota
操作检查是否超出quota的限制。bucket shard数
*每个shard最大容纳object数量(默认值:100000)
”时,触发reshard操作分配更多的shard文件用于存储index。.rgw.root
pool中的periods.{realm id}.control
对
象将通知Realm Watcher
进行更改realm配置。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。