Ceph RGW: 데이터 저장 및 주소 지정
RGW는 객체 처리 게이트웨이입니다. 데이터는 실제로 ceph 클러스터에 저장됩니다. librados 인터페이스를 사용하여 ceph 클러스터와 통신합니다. RGW는 주로 메타데이터, 인덱스 데이터(버킷 인덱스), 데이터의 세 가지 유형의 데이터를 저장합니다. 이 세 가지 유형의 데이터는 일반적으로 서로 다른 풀에 저장되며, 메타데이터도 여러 유형의 메타데이터로 나누어져 서로 다른 ceph 풀에 존재합니다.
1. 메타데이터
메타데이터 정보에는 사용자, 버킷 및 bucket.instance가 포함됩니다. 그 중:
사용자: 주로 객체 스토리지의 사용자 정보
버킷: 주로 버킷 이름과 버킷 인스턴스 ID 간의 매핑 정보를 유지합니다.
bucket.instance: 버킷 인스턴스 정보는 유지됩니다.
다음과 같이 사용자 메타데이터 보기:
radosgw-admin 메타데이터 목록 사용자:
radosgw-admin 메타데이터 get 사용자: testid:
p>radosgw-admin 메타데이터 목록 버킷:
radosgw-admin 메타데이터 버킷 가져오기: 첫 번째:
radosgw-admin 메타데이터 목록 버킷.인스턴스:
radosgw-admin 메타데이터 get bucket.instance: first: {bucket_id}
2. 버킷 인덱스
버킷 인덱스는 주로 버킷 내 객체의 인덱스 정보를 관리합니다. 버킷은 하나 이상의 rados 객체에 해당합니다(버킷 샤드 활성화). 유지되는 것은 key-val 맵 구조입니다. 맵은 객체의 omap(rocksdb)에 저장됩니다. 키는 rgw 객체에 대한 일부 메타데이터 정보입니다. 이 정보는 저장된 객체를 검색할 때 필요합니다. 양동이에. Omap에는 버킷의 개체 수, 전체 크기 등과 같은 버킷 계정 정보를 저장하는 헤더도 포함되어 있습니다.
3. 데이터
rgw 개체의 콘텐츠는 하나 이상의 rados 개체에 저장됩니다. rados 객체는 헤더 부분과 테일 부분으로 나누어집니다. 헤더는 최대 512KB의 데이터를 보유할 수 있습니다. rgw 객체의 크기가 512KB 미만인 경우 헤더만 있습니다. 그렇지 않으면 나머지 데이터는 클러스터 rados 객체의 크기에 따라 스트라이프되어 여러 rados 객체로 나뉩니다.
풀 내: {zone}.rgw.meta는 네임스페이스를 사용하여 여러 저장 공간을 격리합니다.
풀의 경우: {zone}.rgw.log에는 여러 네임스페이스도 포함됩니다.
p>
객체 스토리지에서 객체를 검색할 때 사용자, 버킷, 객체라는 세 가지 요소가 포함됩니다.
사용자는 주로 ACL을 확인하기 위해 사용자 ID를 얻기 위해 RGW에서 사용되며, 버킷과 객체는 풀에서 객체의 위치를 결정하는 데 사용됩니다.
사용자
사용자 데이터는 다음과 같이 {zone}.rgw.meta: users.uid에 저장됩니다.
두 부분을 포함합니다: ups3: 사용자 자신 정보 ; ups3.buckets: 사용자가 속한 버킷입니다.
ups3: rgw_common.h에 정의된 RGWUserInfo 구조체에 해당하는 사용자 기본 정보 및 ACL/Bucekt Quota/User Quota 등.
ups3.buckets: 사용자가 속한 버킷, 키-값 구조, omap 구조에 저장됨, rgw_common.h에 정의된 struct cls_user_bucket_entry에 해당, 데이터 작업은 다음과 같습니다.
Pass { uid}.buckets는 사용자가 어떤 버킷을 가지고 있는지와 해당 버킷에 대한 다음 기본 데이터를 찾습니다.
버킷
버킷 정보는 {zone}.rgw.meta: 루트에 다음과 같이 존재합니다.
첫 번째: 버킷과 bucket_instance_id 간의 대응을 기록합니다. 데이터 구조에 해당: struct RGWBucketEntryPoint
.bucket.meta.first: 1c60b268-0a5d-4718-ad02-e4b5bce824bf.44166.4: 버킷 인스턴스 주소 지정 모드: .bucket.meta.{tenant}: { bucket.name}: {bucket_id}; 해당 구조: struct RGWBucketInfo.
버킷 ACL 및 IAM 정책은 버킷 인스턴스 객체의 속성에 저장됩니다.
다음과 같이 버킷 ACL 및 IAM 정책 데이터를 얻습니다.
객체
버킷 인덱스: 버킷에 포함된 객체 정보는 하나 또는 more Object의 omap에서. 이 omap은 키-값 구조이고 키는 객체의 이름이며 값은 struct rgw_bucket_dir_entry: cls_rgw_types.h에 해당합니다.
버킷 인덱스 객체:
다음과 같습니다:
이 버킷 아래에 객체가 있습니다: ntp.conf:
값 검색 :
omap 헤더는 다음과 같은 통계 정보를 기록합니다.
객체 스토리지 객체의 데이터는 {zone}.rgw.buckets.data 풀에 저장됩니다. 객체의 구성과 주소 지정은 다음 두 가지 범주로 나뉩니다.
RGW 객체는 하나 이상의 rados 객체로 구성될 수 있습니다.
첫 번째 개체는 이 RGW의 헤드 개체로 매니페스트, ACL, 콘텐츠 유형, ETag 및 사용자 정의 메타데이터와 같은 일부 메타데이터 정보를 주로 포함합니다. 이러한 메타데이터는 이 헤드 개체의 xattr에 저장됩니다. 매니페스트는 이 rgw 개체의 배포를 설명합니다. 동시에 이 헤드 개체는 최대 4MB의 추가 데이터를 보유할 수 있습니다. RGW 개체 크기가 4MB보다 작으면 이 RGW 개체는 조각화되지 않고 이 헤드 개체만 조각화됩니다.
다음과 같이 검색하세요.
현재 버킷 아래에 ntp.conf가 있습니다. 매니페스트를 검색하세요:
위와 같습니다:
max_head_size: 헤드 개체의 최대 크기를 나타냅니다.
head_size: 현재 헤드 개체 크기를 나타냅니다. p>
접두사: rados에서 조각난 객체의 주소를 지정하는 데 사용됩니다.
RGW 개체 ACL:
4MB가 넘는 RGW 개체 업로드 및 해당 매니페스트 정보 검색:
매니페스트 정보:
매니페스트에 따름 검색 개체:
대규모 RGW 개체의 경우 업로드를 위해 멀티파트라고 하는 여러 개의 독립적인 RGW 개체로 잘립니다. 멀티파의 장점은 전송이 재개된다는 점입니다. s3 인터페이스의 기본 절단 크기는 15MB입니다.
여기에 60MB 개체를 업로드하세요.
4개의 부분으로 업로드됩니다. rados 객체를 확인하세요.
여기에는 헤드, 멀티파트, 섀도우의 세 가지 유형의 객체가 포함되어 있습니다.
멀티파트 아래 매니페스트:
모든 객체 검색은 위 매니페스트 정보를 기반으로 객체 인덱스를 구축합니다.
위 정보에서 이 RGW 개체 크기는 48128000바이트이며 4개 세그먼트로 나누어지고 3개 세그먼트는 15MB, 마지막 세그먼트는 920KB입니다. 동시에 rados 클러스터에 저장된 각 세그먼트의 스트라이프 크기는 4MB입니다. 따라서 15MB 세그먼트도 4개의 rados 객체, 멀티파트 헤더 및 3개의 섀도우 조각으로 나뉩니다. 920KB 세그먼트에는 다중 부분 헤더가 하나만 있습니다.
.rgw.root:
영역, 영역 그룹, 영역 및 기타 정보가 포함되어 있습니다.