概述
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中的对象RGWPutMetadataAccountSwift专享保存user所有属性信息(RGWUserInfo)
RGWPutMetadataBucketSwift专享保存bucket所有属性信息
RGWPutMetadataObjectSwift专享保存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操作
RGWGetCrossDomainPolicySwift专享获取CrossDomain策略信息操作RGWGetRequestPayment RGWSetRequestPayment实现对bucket的payment属性的获取、设置操作RGWInitMultipart RGWCompleteMultipart RGWAbortMultipart RGWListMultipart RGWListBucketMultiparts RGWDeleteMultiObj实现对Object的分片上传的操作RGWGetHealthCheckSwift专享访问判断配置文件中的rgw_healthcheck_disabling_path是否可以被访问操作RGWInfoSwift专享获取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_Removeuser信息的获取、创建、修改、删除操作
RGWOp_Subuser_Create RGWOp_Subuser_Modify RGWOp_Subuser_Removeswift user的创建、修改、删除操作
RGWOp_Key_Create RGWOp_Key_RemoveAccessKey、SecretKey的创建、删除操作
RGWOp_Caps_Add RGWOp_Caps_RemoveCaps属性的增加、删除操作
RGWOp_Quota_Info RGWOp_Quota_SetQuota的信息的获取、设置操作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_DeleteBoundsObject同步日志管理
RGWOp_BILog_GetBounds RGWOp_BILog_SetBounds RGWOp_BILog_DeleteBoundsBucket同步日志管理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.controlpool中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.lcpool的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.rootpool中的periods.{realm id}.control对
象将通知Realm Watcher进行更改realm配置。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。