當前位置:成語大全網 - 夏天的詩句 - Ceph RGW:數據存儲和尋址

Ceph RGW:數據存儲和尋址

RGW是壹個對象處理網關。數據實際上存儲在ceph集群中。使用librados的接口與ceph集群通信。RGW主要存儲三種類型的數據:元數據、桶索引和數據。這三類數據壹般存儲在不同的池中,元數據也分為各種元數據,存儲在不同的ceph池中。

1、元數據

元數據信息包括:用戶、桶和桶實例。其中:

用戶:主要指對象存儲的用戶信息。

Bucket:主要維護bucket名稱和bucket實例id的映射信息。

Bucket.instance:維護Bucket實例信息。

查看用戶的元數據,如下所示:

radosgw-管理元數據列表用戶:

radosgw-admin元數據獲取用戶:testid:

radosgw-管理元數據列表桶:

radosgw-管理元數據獲取存儲桶:第壹個:

radosgw-管理元數據列表bucket.instance:

radosgw-admin元數據獲取bucket . instance:first:{ bucket _ id }

2、桶指數

桶索引主要維護壹個桶中某個對象的索引信息。壹個bucket對應於壹個或多個radosobjects(在bucket shards下)。它維護壹個key-val的映射結構,映射存儲在object的omap(rocksdb)中。Key對應的rgw對象和Val是壹些關於rgw對象的元數據信息,在檢索存儲在bucket中的對象時需要用到。Omap還包含壹個頭,它存儲bucket帳戶信息,比如bucket中對象的數量、總大小等等。

3、數據

rgw對象的內容存儲在壹個或多個radosobjects中。Rados對象分為頭部和尾部。標頭最多可以容納512KB的數據。如果rgw對象的大小小於512KB,那麽只有頭。否則,剩余的數據將被條帶化,並根據集群radosobject的大小劃分為多個rados對象。

使用命名空間隔離池中的多個存儲空間:Pool: {zone}.rgw.meta:

對於池:{zone}.rgw.log還包含多個命名空間:

當在對象存儲中檢索壹個對象時,它將包含三個元素:user、bucket、object。用戶主要由RGW用來獲取認證ACL用戶id的;Bucket和obejct用於確定對象在池中的位置。

用戶

用戶數據存儲在{zone}.rgw.meta:users.uid中,如下所示:

包含兩部分:ups3:用戶自身信息;Ups3.buckets:用戶所屬的存儲桶。

Ups3:用戶基本信息,ACL/Bucekt額度/用戶額度等。對應於rgw_common.h中定義的結構RGWUserInfo

Ups3。buckets:bucket,用戶所屬的鍵值結構,存儲在omap結構中;對應的struct cls_user_bucket_entry在rgw_common.h中定義,數據操作如下:

通過{uid}找出用戶擁有哪些存儲桶。桶,這些桶有以下基本數據。

水桶

存儲桶信息存在於{zone}.rgw.meta:root中,如下所示:

第壹:記錄bucket和bucket_instance_id的對應關系,對應的數據結構:struct RGWBucketEntryPoint。

. bucket . meta . first:1 C60 b 268-0a5d-4718-ad02-E4 b5 BCE 824 BF . 44166.4:bucket實例;尋址方式:。對應的結構:struct RGWBucketInfo。

Bucket ACL和IAM策略存儲在Bucket實例對象的attr中。如下所示:

按如下方式獲取存儲桶ACL和IAM策略數據:

目標

桶索引:桶中包含的對象信息存儲在壹個或多個對象的omap中。這個omap是壹個鍵值結構,鍵是對象的名字,值對應struct rgw _ bucket _ dir _ entry:cls _ rgw _ types . h。

存儲桶索引對象:

如下所示:

在這個桶下,有壹個對象:ntp.conf:

檢索值:

Omap頭記錄了以下統計信息:

對象存儲對象的數據存儲在池中:{zone}。rgw.buckets.data .對象的組成和尋址可以分為以下兩類:

壹個RGW對象可以由壹個或多個radosobjects組成。第壹個對象是這個RGW的head對象,主要包含壹些元數據信息,比如manifest、ACLs、contenttype、etag、自定義元數據等。這些元數據存儲在這個head對象的xattr中。清單描述了這個rgw對象的分發。同時,這個head對象最多可以容納額外的4MB數據。如果RGW對象的大小小於4MB,那麽這個RGW對象不會被碎片化,只有這個頭對象。

按如下方式搜索:

目前bucket下有壹個ntp.conf,< 4MB .檢索其清單:

如上:

Max_head_size:表示頭部對象的最大尺寸;

Head_size:表示當前頭部對象的大小;

前綴:用於在rados中尋址分區對象。

RGW對象ACL:

上傳壹個大於4MB的RGW對象,檢索其清單信息:

清單信息:

根據清單檢索對象:

對於壹個大的RGW對象,它會被切割成幾個獨立的RGW Object並上傳,這就是所謂的multipart。多路徑的優點是斷點續傳。s3接口默認切割大小為15MB。

這裏上傳壹個60MB的對象。

分四部分上傳,查看rados對象:

包含三種對象,頭部,多部分和陰影。

多部分下的清單:

所有對象檢索都是基於上述清單信息來構建對象索引的:

在上面的信息中,這個RGW對象的大小是48128000字節,分為四段,三段15MB,最後壹段是920KB。同時,rados集群中存儲的每個段的條帶大小為4MB。因此,15MB段也分為四個radosobjects、壹個多部分頭和三個陰影段。壹個920KB的數據段只有壹個多部分報頭。

. rgw.root:

它包含區域、區域組和領域等信息。