rgw

利用bucket localtion实现rgw集群扩容

╄→гoц情女王★ 提交于 2020-03-01 08:32:27
扩容思路:ceph集群容量不足的时候,新加的OSD组成新的pool,制定新的rule规则,新建的bucket都存放在这些新加入的pool里面,注意扩容仅限于新加的bucket,已有的bucket扩容不适用。 ###1.新建pool ceph osd pool create .rgw.buckets.custom 4096 4096 ceph osd pool create .rgw.buckets.custom.index 512 512 ceph osd pool create .rgw.buckets.custom.extra 64 64 ###2.调整region和zone配置 导出region配置 radosgw-admin region get --name client.radosgw.us-zone1 > region.conf.json 编辑region.conf.json,修改placement_targets部分 #修改前 "placement_targets": [ { "name": "default-placement", "tags": [] } ], "default_placement": "default-placement" #修改后 "placement_targets": [ { "name": "default-placement",

centos6.x rados gw手动部署

我只是一个虾纸丫 提交于 2019-12-05 21:21:59
1. 清理可能存在的历史记录 rm -rf /var/run/ceph/* rm -rf /var/log/ceph/* rm -rf /var/lib/ceph/* rm -rf /usr/local/etc/ceph/* rm -rf /etc/ceph/ceph.client.radosgw.keyring rm -rf /etc/ceph/ceph.client.admin.keyring 2. 为rgw创建keyring ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring chmod +r /etc/ceph/ceph.client.radosgw.keyring 3. 创建一个用户并生成key ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.gw1 --gen-key #user is gw1 ceph-authtool -n client.radosgw.gw1 --cap osd 'allow rwx' --cap mon 'allow rwx' 4. 配置ceph.conf 在rgw服务器添加ceph.conf, 并拷贝到/etc/ceph和/usr/local/etc/ceph for

单机部署多CEPH-RGW的方法

混江龙づ霸主 提交于 2019-12-05 00:11:31
引言 在高配置服务器,单个RGW的并发量无法充分使用机器的网络带宽资源,本文用于说明如何在单机上部署多RGW的方法。 如何使nginx和radosgw联合使用 如何使用配置多nginx,多radosgw 1.nginx Radosgw联合使用 Ceph官网说明了如何使用Apache作为前端Web服务器,后官方又退出Civetweb作为自带的web服务器。不过考虑实际并发性能,我们采用Nginx作为前端web服务器,和radosgw联合使用。 1.1 nginx配置 server { listen 80 default; #server_name .com .com.cn .net .cn .org .tv .cc .hk .tw; server_name ceph-21; location / { fastcgi_pass_header Authorization; fastcgi_pass_request_headers on; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param CONTENT_LENGTH $content_length

RGW Usage类解析

杀马特。学长 韩版系。学妹 提交于 2019-12-05 00:11:05
一、概述。 RGW Usage类实现了RGW的流量统计功能,其中包括发送/接收的字节数、执行操作的个数以及成功之行操作的个数。Usage类统计的这些内容对于一般的流量统计来说已经够用了。 二、核心数据结构解析。 RGW Usage核心数据结构如下: struct rgw_usage_log_entry { rgw_user owner; rgw_user payer; string bucket; uint64_t epoch; rgw_usage_data total_usage; map<string, rgw_usage_data> usage_map; }; 三、核心类关系图。 四、核心处理函数解析。 1、获取RGWUsage信息。 RGWUsage::show() |__RGWRados::read_usage() |__RGWRados::cls_obj_usage_log_read() |__cls_rgw_usage_log_read() |__rgw_user_usage_log_read() |__usage_iterate_range() |__cls_cxx_map_get_vals() CEPH_OSD_OP_OMAPGETVALS |__usage_record_decode() 从bufferlist中解析出rgw_usage_log_entry对象

RGW S3 User解析

不想你离开。 提交于 2019-12-05 00:10:50
一、RGW S3 User使用的类关系图。 cls_user_header和cls_user_bucket_entry从用户角度看到用户所拥有的buckets信息,这两个对象(其中cls_user_bucket_entry以数组的形式出现)需要保存在ceph集群中。通常在创建/删除/更新用户buckets时都需要这两个类对象。 RGwUserBuckets类是RGW User看到的buckets相关信息,实际上RGWBucketEnt和cls_user_bucket_entry类基本一致。 上图表示的是bucket的类关系图,其中rgw_bucket_dir_header和rgw_bucket_dir_entry这两个对象(rgw_bucket_dir_entry以数组的形式出现)保存到ceph集群中。在读写buckets时需要用到上述类。 上图描述了RGW User类的主要类及其关系图。其中核心类是RGWUser,该类表示一个RGW用户。上述类中RGWUID和RGWUserInfo类需要保存到Ceph集群。 二、RGW User主要函数处理流程。 1、同步指定用户所有buckets的使用信息 rgw_user_sync_all_stats() |__rgw_read_user_buckets() 读取指定用户所有buckets信息并保存到RGWUserBuckets对象中 |_

RGW S3 GC解析

筅森魡賤 提交于 2019-12-05 00:10:27
RGW S3 GC类的主要功能是提供垃圾收集器的功能。用于异步删除对象。 一、RGW S3 GC核心类关系图 二、RGW S3 GC核心数据类关系图 三、RGW S3 GC主要处理函数解析。 1、RGWGC初始化操作。 RGWGC::initialize() |__设置cct和store类对象 |__从配置文件中得到gc最大对象个数,即:rgw_gc_max_objs |__根据gc最大对象个数生成obj_names数组且初始化该数组的内容为gc.0-rgw_gc_max_objs 2、RGWGC终止操作。 RGWGC::finalize() |__删除obj_names数组 3、添加chain。 RGWGC::add_chain() |__cls_rgw_gc_set_entry() |__rgw_cls_gc_set_entry() |__gc_update_entry() |__gc_omap_get() |__cls_cxx_map_get_val() 以名字为key,得到Ceph集群中已经保存的cls_rgw_gc_obj_info信息(CEPH_OSD_OP_OMAPGETVALSBYKEYS) |__get_time_key() 得到time key |__gc_omap_remove() |__cls_cxx_map_remove_key() 删除指定time

RGW S3 ACL解析

走远了吗. 提交于 2019-12-03 22:21:02
RGW ACL主要类关系图如下图所示: RGW ACL处理类关系图如下图所示: RGW ACL主要处理流程详细说明如下。 一、PUT ACL。 RGWPutACL::execute() |__从HTTP请求数据流中解析出RGWAccessControlPolicy_S3对象 |__RGWAccessControlPolicy_S3::rebuild() |__rgw_get_user_info_by_uid() 得到指定的用户信息 |__创建ACLOwner对象且设置ACLOwner的id和name |__遍历grant_map列表生成新的ACLGrant对象 |__将新生成的ACLGrant对象插入到RGWAccessControlList::grant_map中 |__根据bucket和object信息生成rgw_obj对象 |__对于设置对象的ACL则将对象的ACL信息写入到对象属性的RGW_ATTR_ACL中,对于设置bucket的ACL则将ACL信息写入到Bucket的metadata中 二、GET ACL。 RGWGetACLs::execute() |__判断所需是bucket ACL还是object ACL |__生成RGWAccessControlPolicy_S3对象 |__RGWAccessControlPolicy_S3::to_xml()

RGW S3 Authorize解析

时光怂恿深爱的人放手 提交于 2019-12-03 22:20:53
截止到目前为止,RGW S3的认证部分支持AWS v4认证、AWS v2认证以及匿名用户认证。这三种认证的总入口位于rgw_process.cc::process_request()函数,该函数中处理认证部分的代码如下: rgw_process.cc::process_request() |__RGW_Auth_S3::authorize() |__根据HTTP请求参数决定认证方式(AWS v4/AWS v2/匿名认证) 下面分别描述这三种认证方式: 1、AWS v2认证方式。 AWS v2认证由RGW_Auth_S3::authorize_v2()函数处理。使用AWS v2方式认证,用户首现根据用户的secret key对认证头部数据进行签名操作,与此同时将认证头部数据、签名数据、用户的access key信息加入到HTTP请求数据流中。RGW收到HTTP请求数据流后提取出上述信息,之后通过用户的access key获取到用户信息(user info)。之后使用用户信息中的secret key对HTTP请求数据流中的认证头部数据进行签名操作,最后判断由RGW计算出来的签名值是否与HTTP请求数据流中的签名值一致来实现用户的认证。 AWS v2函数处理流程如下: RGW_Auth_S3::authorize() |__通过HTTP请求数据流得到用户的access key

rgw bucket相关操作解析

*爱你&永不变心* 提交于 2019-12-03 22:20:41
一、list bucket。 1、读取bucket信息处理流程。 RGWListBucket::execute() |__RGWRados::Bucket::List::list_objects() |__RGWRados::cls_bucket_list() |__RGWRados::open_bucket_index() |__CLSRGWIssueBucketList::issue_op() |__issue_bucket_list_op() |__librados::IoCtxImpl::aio_operate() op is rgw.bucket_list |__cls_rgw.cc::rgw_bucket_list() |__cls_rgw.cc::read_bucket_header() 读取struct rgw_bucket_dir的header信息 |__cls_rgw.cc::get_obj_vals() 读取struct rgw_bucket_dir的entry信息 |__将读取到的struct rgw_bucket_dir信息转换成RGWObjEnt结构 |__检查读取到的RGWObjEnt结构的合法性 实际保存到ceph集群中bucket信息的数据结构是struct rgw_bucket_dir,该结构内容如下: Struct rgw_bucket_dir

RGW S3 CORS解析

隐身守侯 提交于 2019-12-03 22:20:29
一、RGW S3 CORS核心类关系图。 二、RGW S3 CORS处理类关系图。 三、RGW S3 CORS操作解析。 1、PUT CORS操作。 RGWPutCORS::execute() |__RGWPutCORS_ObjStore_S3::get_params() |__从HTTP请求数据流中找到CORSConfiguration域并转换成RGWCORSConfiguration_S3对象 |__RGWCORSConfiguration_S3::encode() 序列化RGWCORSConfiguration_S3对象 |__对于设置对象的CORS则 |__RGWRados::get_bucket_instance_obj() 得到待设置CORS属性的object信息 |__RGWRados::set_attrs() 设置CORS属性到object的属性列表中且以RGW_ATTR_CORS作为索引 |__对于设置bucket的CORS则 |__rgw_bucket_set_attrs() 设置CORS属性到bucket的属性列表中且以RGW_ATTR_CORS作为索引 2、GET CORS操作。 RGWGetCORS::execute() |__RGWOp::read_bucket_cors() |__获取指定bucket的RGW_ATTR_CORS属性值 |_