8.7. バケット管理
ストレージ管理者は、Ceph Object Gateway を使用する場合は、バケットをユーザー間で移動して名前を変更することで、バケットを管理できます。バケット通知を作成して、特定のイベントでトリガーできます。また、ストレージクラスターの存続期間中に発生する可能性のある孤立したオブジェクトやリークオブジェクトを Ceph Object Gateway 内で見つけることができます。
何百万ものオブジェクトが高い取り込み率で Ceph Object Gateway バケットにアップロードされると、radosgw-admin bucket stats
コマンドで誤った num_objects
が報告されます。radosgw-admin bucket list
コマンドを使用すると、num_objects
パラメーターの値を修正できます。
マルチサイトクラスターでは、セカンダリーサイトからバケットを削除しても、メタデータの変更はプライマリーサイトと同期されません。したがって、Red Hat では、セカンダリーサイトではなく、プライマリーサイトからのみバケットを削除することを推奨します。
8.7.1. バケットの名前変更
バケットの名前を変更できます。バケット名のアンダースコアを許可する必要がある場合は、rgw_relaxed_s3_bucket_names
オプションを true
に設定します。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Object Gateway ソフトウェアのインストール。
- 既存のバケット。
手順
バケットをリスト表示します。
例
[ceph: root@host01 /]# radosgw-admin bucket list [ "34150b2e9174475db8e191c188e920f6/swcontainer", "s3bucket1", "34150b2e9174475db8e191c188e920f6/swimpfalse", "c278edd68cfb4705bb3e07837c7ad1a8/ec2container", "c278edd68cfb4705bb3e07837c7ad1a8/demoten1", "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct", "c278edd68cfb4705bb3e07837c7ad1a8/demopostup", "34150b2e9174475db8e191c188e920f6/postimpfalse", "c278edd68cfb4705bb3e07837c7ad1a8/demoten2", "c278edd68cfb4705bb3e07837c7ad1a8/postupsw" ]
バケットの名前を変更します。
構文
radosgw-admin bucket link --bucket=ORIGINAL_NAME --bucket-new-name=NEW_NAME --uid=USER_ID
例
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=s3bucket1 --bucket-new-name=s3newb --uid=testuser
バケットがテナント内部にある場合は、テナントも指定します。
構文
radosgw-admin bucket link --bucket=tenant/ORIGINAL_NAME --bucket-new-name=NEW_NAME --uid=TENANT$USER_ID
例
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=test/s3bucket1 --bucket-new-name=s3newb --uid=test$testuser
バケットの名前が変更されたことを確認します。
例
[ceph: root@host01 /]# radosgw-admin bucket list [ "34150b2e9174475db8e191c188e920f6/swcontainer", "34150b2e9174475db8e191c188e920f6/swimpfalse", "c278edd68cfb4705bb3e07837c7ad1a8/ec2container", "s3newb", "c278edd68cfb4705bb3e07837c7ad1a8/demoten1", "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct", "c278edd68cfb4705bb3e07837c7ad1a8/demopostup", "34150b2e9174475db8e191c188e920f6/postimpfalse", "c278edd68cfb4705bb3e07837c7ad1a8/demoten2", "c278edd68cfb4705bb3e07837c7ad1a8/postupsw" ]
8.7.2. バケットの削除
Ceph Object Gateway 設定を使用して Red Hat Ceph Storage クラスターからバケットを削除します。
バケットにオブジェクトがない場合は、radosgw-admin bucket rm
コマンドを実行できます。バケット内にオブジェクトがある場合は、--purge-objects
オプションを使用できます。
マルチサイト設定の場合、Red Hat はプライマリーサイトからバケットを削除することを推奨します。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Object Gateway ソフトウェアのインストール。
- 既存のバケット。
手順
バケットをリスト表示します。
例
[ceph: root@host01 /]# radosgw-admin bucket list [ "34150b2e9174475db8e191c188e920f6/swcontainer", "s3bucket1", "34150b2e9174475db8e191c188e920f6/swimpfalse", "c278edd68cfb4705bb3e07837c7ad1a8/ec2container", "c278edd68cfb4705bb3e07837c7ad1a8/demoten1", "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct", "c278edd68cfb4705bb3e07837c7ad1a8/demopostup", "34150b2e9174475db8e191c188e920f6/postimpfalse", "c278edd68cfb4705bb3e07837c7ad1a8/demoten2", "c278edd68cfb4705bb3e07837c7ad1a8/postupsw" ]
バケットを削除します。
構文
radosgw-admin bucket rm --bucket=BUCKET_NAME
例
[ceph: root@host01 /]# radosgw-admin bucket rm --bucket=s3bucket1
バケットにオブジェクトがある場合は、次のコマンドを実行します。
構文
radosgw-admin bucket rm --bucket=BUCKET --purge-objects --bypass-gc
例
[ceph: root@host01 /]# radosgw-admin bucket rm --bucket=s3bucket1 --purge-objects --bypass-gc
--purge-objects
オプションはオブジェクトをパージし、--bypass-gc
オプションはガベージコレクターを使用せずにオブジェクトの削除をトリガーして、プロセスをより効率的にします。バケットが削除されたことを確認します。
例
[ceph: root@host01 /]# radosgw-admin bucket list [ "34150b2e9174475db8e191c188e920f6/swcontainer", "34150b2e9174475db8e191c188e920f6/swimpfalse", "c278edd68cfb4705bb3e07837c7ad1a8/ec2container", "c278edd68cfb4705bb3e07837c7ad1a8/demoten1", "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct", "c278edd68cfb4705bb3e07837c7ad1a8/demopostup", "34150b2e9174475db8e191c188e920f6/postimpfalse", "c278edd68cfb4705bb3e07837c7ad1a8/demoten2", "c278edd68cfb4705bb3e07837c7ad1a8/postupsw" ]
8.7.3. バケットの移動
radosgw-admin bucket
ユーティリティーは、ユーザー間でバケットを移行する機能を提供します。これを実行するには、バケットを新規ユーザーにリンクし、バケットの所有権を新規ユーザーに変更します。
バケットを移動できます。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Object Gateway がインストールされている。
- S3 バケット。
- さまざまなテナントユーザーとテナントのないユーザー。
8.7.3.1. テナントのないユーザー間でのバケットの移動
radosgw-admin bucket chown
コマンドは、バケットとそれに含まれるすべてのオブジェクトの所有権をあるユーザーから別のユーザーに変更する機能を提供します。これを行うには、バケットを現在のユーザーからリンク解除し、新しいユーザーにリンクして、バケットの所有権を新しいユーザーに変更します。
手順
バケットを新規ユーザーにリンクします。
構文
radosgw-admin bucket link --uid=USER --bucket=BUCKET
例
[ceph: root@host01 /]# radosgw-admin bucket link --uid=user2 --bucket=data
バケットが
user2
に正常にリンクされていることを確認します。例
[ceph: root@host01 /]# radosgw-admin bucket list --uid=user2 [ "data" ]
バケットの所有権を新規ユーザーに変更します。
構文
radosgw-admin bucket chown --uid=user --bucket=bucket
例
[ceph: root@host01 /]# radosgw-admin bucket chown --uid=user2 --bucket=data
次のコマンドの出力で
owner
行を確認して、data
バケットの所有権が正常に変更されたことを確認します。例
[ceph: root@host01 /]# radosgw-admin bucket list --bucket=data
8.7.3.2. テナントユーザー間でのバケットの移動
バケットは、あるテナントユーザーと別のテナントユーザーの間を移動できます。
手順
バケットを新規ユーザーにリンクします。
構文
radosgw-admin bucket link --bucket=CURRENT_TENANT/BUCKET --uid=NEW_TENANT$USER
例
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=test/data --uid=test2$user2
バケットが
user2
に正常にリンクされていることを確認します。[ceph: root@host01 /]# radosgw-admin bucket list --uid=test$user2 [ "data" ]
バケットの所有権を新規ユーザーに変更します。
構文
radosgw-admin bucket chown --bucket=NEW_TENANT/BUCKET --uid=NEW_TENANT$USER
例
[ceph: root@host01 /]# radosgw-admin bucket chown --bucket='test2/data' --uid='test$tuser2'
次のコマンドの出力で
owner
行を確認して、data
バケットの所有権が正常に変更されたことを確認します。[ceph: root@host01 /]# radosgw-admin bucket list --bucket=test2/data
8.7.3.3. バケットをテナントのないユーザーからテナントユーザーに移動する
バケットをテナントのないユーザーからテナントユーザーに移動できます。
手順
オプション: まだ複数のテナントがない場合は、
rgw_keystone_implicit_tenants
を有効にして、外部テナントから Ceph Object Gateway にアクセスすることでテナントを作成できます。rgw_keystone_implicit_tenants
オプションを有効にします。例
[ceph: root@host01 /]# ceph config set client.rgw rgw_keystone_implicit_tenants true
s3cmd
コマンドまたはswift
コマンドのいずれかを使用して、一時テナントから Ceph Object Gateway にアクセスします。例
[ceph: root@host01 /]# swift list
または、
s3cmd
を使用します。例
[ceph: root@host01 /]# s3cmd ls
外部テナントからの最初のアクセスにより、同等の Ceph Object Gateway ユーザーが作成されます。
バケットをテナントされたユーザーに移動します。
構文
radosgw-admin bucket link --bucket=/BUCKET --uid='TENANT$USER'
例
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=/data --uid='test$tenanted-user'
data
バケットがtenanted-user
に正常にリンクされていることを確認します。例
[ceph: root@host01 /]# radosgw-admin bucket list --uid='test$tenanted-user' [ "data" ]
バケットの所有権を新規ユーザーに変更します。
構文
radosgw-admin bucket chown --bucket='tenant/bucket name' --uid='tenant$user'
例
[ceph: root@host01 /]# radosgw-admin bucket chown --bucket='test/data' --uid='test$tenanted-user'
次のコマンドの出力で
owner
行を確認して、data
バケットの所有権が正常に変更されたことを確認します。例
[ceph: root@host01 /]# radosgw-admin bucket list --bucket=test/data
8.7.3.4. 孤立したオブジェクトやリークオブジェクトを見つける
正常なストレージクラスターには孤立したオブジェクトやリークオブジェクトがありませんが、場合によっては、孤立したオブジェクトやリークオブジェクトが発生する可能性があります。
孤立オブジェクトはストレージクラスター内に存在し、RADOS オブジェクトに関連付けられたオブジェクト ID を持ちます。ただし、バケットインデックス参照には、S3 オブジェクトを含む RADOS オブジェクトの参照がありません。たとえば、Ceph Object Gateway が操作の途中でダウンした場合、一部のオブジェクトが孤立する原因となる可能性があります。また、検出されないバグでも、孤立したオブジェクトが発生する可能性があります。
Ceph Object Gateway オブジェクトが RADOS オブジェクトにどのようにマッピングされるかを確認することができます。radosgw-admin
コマンドは、これらの潜在的な孤立オブジェクトまたはリークオブジェクトのリストを検索して生成するための新しいツールを提供します。radoslist
サブコマンドを使用すると、バケット内に保存されているオブジェクト、またはストレージクラスター内のすべてのバケットが表示されます。rgw-orphan-list
スクリプトは、プール内の孤立したオブジェクトを表示します。
radoslist
サブコマンドは、非推奨の orphans find
サブコマンドおよび orphans finish
サブコマンドを置き換えます。
すべてのオブジェクトが orphaned
として表示されるため、Indexless
バケットが使用されている場合は、このコマンドを使用しないでください。
孤立したオブジェクトを識別するもう 1 つの代替方法として、rados -p <pool> ls | grep BUCKET_ID
コマンドを実行する方法があります。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- 実行中の Ceph Object Gateway。
手順
バケット内でデータを保持するオブジェクトのリストを生成するには、以下を実行します。
構文
radosgw-admin bucket radoslist --bucket BUCKET_NAME
例
[root@host01 ~]# radosgw-admin bucket radoslist --bucket mybucket
注記BUCKET_NAME を省略すると、すべてのバケット内のすべてのオブジェクトが表示されます。
rgw-orphan-list
のバージョンを確認します。例
[root@host01 ~]# head /usr/bin/rgw-orphan-list
バージョンは
2023-01-11
以降である必要があります。orphan のリストを生成する必要があるディレクトリーを作成します。
例
[root@host01 ~]# mkdir orphans
前に作成したディレクトリーに移動します。
例
[root@host01 ~]# cd orphans
プールリストから、orphans を検索するプールを選択します。このスクリプトは、クラスター内のオブジェクトによっては長時間実行される可能性があります。
例
[root@host01 orphans]# rgw-orphan-list
例
Available pools: .rgw.root default.rgw.control default.rgw.meta default.rgw.log default.rgw.buckets.index default.rgw.buckets.data rbd default.rgw.buckets.non-ec ma.rgw.control ma.rgw.meta ma.rgw.log ma.rgw.buckets.index ma.rgw.buckets.data ma.rgw.buckets.non-ec Which pool do you want to search for orphans?
プール名を入力して、孤立を検索します。
重要メタデータプールではなく、
rgw-orphan-list
コマンドを使用する場合は、データプールを指定する必要があります。rgw-orphan-list
ツールの使用の詳細を表示します。構文
rgw-orphan-list -h rgw-orphan-list POOL_NAME /DIRECTORY
例
[root@host01 orphans]# rgw-orphan-list default.rgw.buckets.data /orphans 2023-09-12 08:41:14 ceph-host01 Computing delta... 2023-09-12 08:41:14 ceph-host01 Computing results... 10 potential orphans found out of a possible 2412 (0%). <<<<<<< orphans detected The results can be found in './orphan-list-20230912124113.out'. Intermediate files are './rados-20230912124113.intermediate' and './radosgw-admin-20230912124113.intermediate'. *** *** WARNING: This is EXPERIMENTAL code and the results should be used *** only with CAUTION! *** Done at 2023-09-12 08:41:14.
ls -l
コマンドを実行して、エラーで終わるファイルの長さが 0 であることを確認し、スクリプトが問題なく実行されたことを示します。例
[root@host01 orphans]# ls -l -rw-r--r--. 1 root root 770 Sep 12 03:59 orphan-list-20230912075939.out -rw-r--r--. 1 root root 0 Sep 12 03:59 rados-20230912075939.error -rw-r--r--. 1 root root 248508 Sep 12 03:59 rados-20230912075939.intermediate -rw-r--r--. 1 root root 0 Sep 12 03:59 rados-20230912075939.issues -rw-r--r--. 1 root root 0 Sep 12 03:59 radosgw-admin-20230912075939.error -rw-r--r--. 1 root root 247738 Sep 12 03:59 radosgw-admin-20230912075939.intermediate
リストされた孤立オブジェクトを確認します。
例
[root@host01 orphans]# cat ./orphan-list-20230912124113.out a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.0 a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.1 a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.2 a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.3 a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.4 a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.5 a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.6 a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.7 a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.8 a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.9
孤立したオブジェクトを削除します。
構文
rados -p POOL_NAME rm OBJECT_NAME
例
[root@host01 orphans]# rados -p default.rgw.buckets.data rm myobject
警告正しいオブジェクトを削除していることを確認してください。
rados rm
コマンドを実行すると、ストレージクラスターからデータが削除されます。
8.7.3.5. バケットインデックスエントリーの管理
radosgw-admin bucket check
サブコマンドを使用して、Red Hat Ceph Storage クラスターで Ceph Object Gateway のバケットインデックスエントリーを管理できます。
マルチパートアップロードオブジェクトの一部に関連する各バケットインデックスエントリーは、対応する .meta
インデックスエントリーと照合されます。特定のマルチパートアップロードのすべての部分に .meta
エントリーが必要です。ピースに対応する .meta
エントリーが見つからない場合、出力のセクションに孤立したエントリーが一覧表示されます。
バケットの統計はバケットインデックスヘッダーに保存されます。このフェーズでは、これらのヘッダーをロードし、バケットインデックスのすべてのプレーンオブジェクトエントリーを繰り返し処理し、統計を再計算します。次に、それぞれ existing_header と calculated_header というラベルの付いたセクションに実際の統計と計算した統計を表示して、比較できるようにします。
バケットチェック
サブコマンドで --fix
オプションを使用すると、孤立したエントリーがバケットインデックスから削除され、ヘッダー内の既存の統計が計算された統計で上書きされます。これにより、バージョン管理で使用される複数のエントリーを含むすべてのエントリーが出力に一覧表示されます。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- 実行中の Ceph Object Gateway。
- 新規に作成されたバケット。
手順
特定のバケットのバケットインデックスを確認します。
構文
radosgw-admin bucket check --bucket=BUCKET_NAME
例
[root@rgw ~]# radosgw-admin bucket check --bucket=mybucket
孤立したオブジェクトの削除など、バケットインデックスの不整合を修正します。
構文
radosgw-admin bucket check --fix --bucket=BUCKET_NAME
例
[root@rgw ~]# radosgw-admin bucket check --fix --bucket=mybucket
8.7.3.6. バケット通知
バケット通知により、バケットで特定のイベントが発生した場合に、Ceph Object Gateway から情報を送る方法が提供されます。バケット通知は HTTP、AMQP0.9.1、および Kafka エンドポイントに送信できます。特定バケットおよび特定のトピック上のイベントのバケット通知を送信するために、通知エントリーを作成する必要があります。バケット通知は、イベントタイプのサブセットに作成することも、デフォルトですべてのイベントタイプに対して作成できます。バケット通知は、キーの接頭辞または接尾辞、キーに一致する正規表現、オブジェクトに割り当てられたメタデータ属性、またはオブジェクトタグに基づいてイベントをフィルタリングできます。バケット通知には、バケット通知メカニズムの設定および制御インターフェイスを提供する REST API があります。
バケット通知 API はデフォルトで有効にされます。rgw_enable_apis
設定パラメーターを明示的に設定する場合は、s3
および notifications
が含まれていることを確認してください。これを確認するには、ceph --admin-daemon /var/run/ceph/ceph-client.rgw.NAME.asok config get rgw_enable_apis
コマンドを実行します。NAME を、Ceph Object Gateway インスタンス名に置き換えます。
CLI を使用したトピック管理
Ceph Object Gateway バケットのトピックのリスト表示、取得、および削除を実行できます。
トピックのリスト表: 以下のコマンドを実行し、すべてのトピックの設定をリスト表示します。
例
[ceph: host01 /]# radosgw-admin topic list
トピックの取得: 以下のコマンドを実行して、特定のトピックの設定を取得します。
例
[ceph: host01 /]# radosgw-admin topic get --topic=topic1
トピックの削除: 以下のコマンドを実行し、特定のトピックの設定を削除します。
例
[ceph: host01 /]# radosgw-admin topic rm --topic=topic1
注記Ceph Object Gateway バケットがそのトピックに設定されている場合でも、トピックが削除されます。
8.7.3.7. バケット通知の作成
バケットレベルでバケット通知を作成します。通知設定には、Red Hat Ceph Storage Object Gateway S3 イベント、ObjectCreated
、ObjectRemoved
、および ObjectLifecycle:Expiration
があります。これらは、バケット通知を送信するために宛先とともに公開する必要があります。バケット通知は S3 オペレーションです。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- 稼働中の HTTP サーバー、RabbitMQ サーバー、または Kafka サーバー。
- ルートレベルのアクセス。
- Red Hat Ceph Storage Object Gateway のインストール
- ユーザーアクセスキーおよびシークレットキー。
- エンドポイントパラメーター。
Red Hat は、ObjectCreate
イベント (例: put
、post
、multipartUpload
、および copy
) をサポートします。また、Red Hat は、object_delete
、s3_multi_object_delete
などの ObjectRemove
イベントをサポートしています。
手順
- S3 バケットを作成します。
-
http
、amqp
、またはkafka
プロトコルに SNS トピックを作成します。 s3:objectCreate
、s3:objectRemove
、およびs3:ObjectLifecycle:Expiration
イベントの S3 バケット通知を作成します。例
client.put_bucket_notification_configuration( Bucket=bucket_name, NotificationConfiguration={ 'TopicConfigurations': [ { 'Id': notification_name, 'TopicArn': topic_arn, 'Events': ['s3:ObjectCreated:*', 's3:ObjectRemoved:*', 's3:ObjectLifecycle:Expiration:*'] }]})
- バケットに S3 オブジェクトを作成します。
-
レシーバー
http
、rabbitmq
、またはkafka
でのオブジェクト作成イベントを確認します。 - オブジェクトを削除します。
-
レシーバー
http
、rabbitmq
、またはkafka
でオブジェクトの削除イベントを確認します。
関連情報
- 詳細は、Red Hat Ceph Storage 開発者ガイド を参照してください。