7.12. Ceph Object Gateway データレイアウト
RADOS は拡張属性 (xattrs
) とオブジェクトマップ (OMAP) を持つプールとオブジェクトしか認識しませんが、概念的には、Ceph Object Gateway はそのデータを 3 つの異なる種類に編成します。
- metadata
- バケットインデックス
- data
メタデータ
メタデータには 3 つのセクションがあります。
-
user
: ユーザー情報を保持します。 -
bucket
: バケット名とバケットインスタンス ID の間のマッピングを保持します。 -
bucket.instance
: バケットインスタンス情報を保持します。
以下のコマンドを使用して、メタデータエントリーを表示できます。
構文
radosgw-admin metadata get bucket:BUCKET_NAME radosgw-admin metadata get bucket.instance:BUCKET:BUCKET_ID radosgw-admin metadata get user:USER radosgw-admin metadata set user:USER
例
[ceph: root@host01 /]# radosgw-admin metadata list [ceph: root@host01 /]# radosgw-admin metadata list bucket [ceph: root@host01 /]# radosgw-admin metadata list bucket.instance [ceph: root@host01 /]# radosgw-admin metadata list user
すべてのメタデータエントリーは単一の RADOS オブジェクトに保存されます。
radosgw-admin
ツールを使用する場合は、ツールと Ceph クラスターが同じバージョンであることを確認してください。一致しないバージョンの使用はサポートされていません。
Ceph Object Gateway オブジェクトは、いくつかの RADOS オブジェクトで設定される場合があります。最初のオブジェクトは、マニフェスト、アクセス制御リスト (ACL)、コンテンツタイプ、ETag、およびユーザー定義のメタデータなどのメタデータなどの Head です。メタデータは xattrs
に保存されます。また、効率性とアトミック性を確保するために、最大 512 KB のオブジェクトデータが含まれる場合もあります。マニフェストには、各オブジェクトが RADOS オブジェクトでどのように配置されているかが記述されています。
バケットインデックス
これは別の種類のメタデータであり、個別に保持されます。バケットインデックスは RADOS オブジェクトのキーと値マップを保持します。デフォルトでは、バケットごとに 1 つの RADOS オブジェクトですが、複数の RADOS オブジェクトにわたってマップをシャードすることができます。
マップ自体は、各 RADOS オブジェクトに関連付けられた OMAP に保持されます。各 OMAP のキーはオブジェクトの名前であり、値にはそのオブジェクトの基本的なメタデータ (バケットを一覧表示するときに表示されるメタデータ) が保持されます。各 OMAP はヘッダーを保持し、オブジェクトの数、合計サイズなど、そのヘッダーにバケットアカウンティングメタデータを保持します。
OMAP は、拡張属性が POSIX ファイルに関連付けられているのと同様に、オブジェクトに関連付けられたキー値ストアです。オブジェクトの OMAP はオブジェクトのストレージに物理的に配置されていませんが、その正確な実装は不可視であり、Ceph Object Gateway には重要ではありません。
データ
オブジェクトデータは、各 Ceph Object Gateway オブジェクトの 1 つ以上の RADOS オブジェクトに保持されます。
7.12.1. オブジェクトルックアップパス
オブジェクトにアクセスする場合、REST API は 3 つのパラメーターを持つ Ceph Object Gateway に送られます。
- S3 のアクセスキーまたは Swift のアカウント名を持つアカウント情報
- バケットまたはコンテナー名
- オブジェクト名またはキー
現在、Ceph Object Gateway はアカウント情報のみを使用してユーザー ID とアクセス制御を検索します。バケット名とオブジェクトキーのみを使用してプールのオブジェクトに対応します。
アカウント情報
Ceph Object Gateway のユーザー ID は文字列であり、通常はユーザー認証情報からの実際のユーザー名であり、ハッシュまたはマップされた識別子ではありません。
ユーザーのデータにアクセスする場合、ユーザーレコードは namespace が users.uid
の default.rgw.meta
プールのオブジェクト USER_ID
から読み込まれます。
バケット名
これらは、root
namespace で default.rgw.meta
プールに表示されます。バケット ID として機能するマーカーを取得するために、バケットレコードがロードされます。
オブジェクト名
オブジェクトは default.rgw.buckets.data
プールにあります。オブジェクト名は MARKER_KEY
です。たとえば、default.7593.4_image.png
の場合、マーカーは default.7593.4
で、キーは image.png
です。これらの連結された名前は解析されず、RADOS のみに渡されます。したがって、セパレーターの選択は重要ではなく、あいまいさを生じさせることはありません。同じ理由で、キーなどのオブジェクト名ではスラッシュを使用できます。
7.12.1.1. 複数のデータプール
複数のデータプールを作成して、異なるユーザーのバケットがデフォルトで異なる RADOS プールに作成されるようにすることで、必要なスケーリングを実現できます。これらのプールのレイアウトと命名は、ポリシー
設定によって制御されます。
7.12.2. バケットおよびオブジェクトの一覧
特定のユーザーに属するバケットは、namespace が users.uid
の default.rgw.meta
プール内の foo.buckets
など、USER_ID.buckets
という名前のオブジェクトの OMAP にリストされます。これらのオブジェクトには、バケットの一覧表示時、バケットの内容の更新時、およびクォータなどのバケット統計の更新および取得時にアクセスされます。これらのリストは、.rgw
プール内のバケットと一貫性が保たれています。
これらの OMAP エントリーの値は、ユーザーに表示されるエンコードされたクラス cls_user_bucket_entry
およびネストされたクラス cls_user_bucket
を参照してください。
指定のバケットに属するオブジェクトはバケットインデックスに一覧表示されます。インデックスオブジェクトのデフォルトの命名は、default.rgw.buckets.index
プールの .dir.MARKER
です。
関連情報
- 詳細は、Red Hat Ceph Storage Object Gateway ガイド の バケットインデックスのリシャーディングの設定 セクションを参照してください。