3.4. バケットシャーディングの設定
Ceph Object Gateway は、バケットインデックスデータをインデックスプール (index_pool
) に格納します。デフォルトは .rgw.buckets.index
です。バケットあたりの最大オブジェクト数のクオータを設定せずに、クライアントが数十万から数百万のオブジェクトを 1 つのバケットに入れると、インデックスプールのパフォーマンスが著しく低下します。
バケットインデックスのシャーディング は、バケットあたりのオブジェクト数が多い場合のパフォーマンスのボトルネックを防ぐのに役立ちます。Red Hat Ceph Storage 4.1 以降、バケットインデックスシャードのデフォルト数である bucket_index_max_shards
が 1 から 11 に変更されました。この変更により、小さなバケットへの書き込みスループットが増加し、動的な再シャーディングの開始を遅らせることができます。この変更は、新規バケットおよびデプロイメントにのみ影響します。
Red Hat では、計算されたシャード数に最も近い素数をシャード数とすることを推奨しています。素数であるバケットインデックスシャードは、シャード間でバケットインデックスエントリーを均等に分配する上で、より効果的に機能する傾向があります。たとえば、7001 個のバケットインデックスシャードは素数であるため、7000 個のシャードよりも優れています。
バケットインデックスのシャード化を設定するには、以下を実行します。
-
単純な設定の新規バケットの場合は、
rgw_override_bucket_index_max_shards
オプションを使用します。「簡易設定でのバケットインデックスシャードの設定」 を参照してください。 -
マルチサイト設定の新規バケットの場合は、
bucket_index_max_shards
オプションを使用します。「マルチサイト設定でのバケットインデックスのシャード化の設定」 を参照してください。
バケットを再シャード化するには、以下を実行します。
- 動的な場合:「バケットインデックスの動的再シャーディング」を参照してください。
- 手動の場合:「バケットインデックスの手動再シャーディング」を参照してください。
- マルチサイト設定で手動の場合:マルチサイトでのバケットの手動再シャーディング を参照してください。
3.4.1. バケットシャーディングの制限
注意して、以下の制限を使用してください。お使いのハードウェアの選択には影響があるため、この要件を Red Hat アカウントチームと常に相談してください。
シャード化が必要になる前の 1 つのバケット内のオブジェクトの最大数
Red Hat では、バケットインデックスシャードあたり最大 102,400 オブジェクトを推奨しています。シャーディングを最大限に活用するには、Ceph Object Gateway バケットインデックスプールの十分な数の OSD を提供します。
Ceph OSD は現在、インデックス化されたストレージのキー範囲が 200,000 を超えると警告します。結果として、シャードあたりのオブジェクト数が 200,000 に近づくと、そのような警告が表示されます。設定によっては、値は大きくなる可能性があり、調整可能です。
シャード化を使用する場合の最大オブジェクト数
動的バケットの再シャーディングのデフォルトのバケットインデックスシャード数は 1999 です。この値は最大 65521 シャードまで変更できます。値が 1999 のバケットインデックスシャードは、バケット内の合計オブジェクト数が 204697600 で、値が 65521 のシャードは、オブジェクト数が 6709350400 であることが分かります。
以前のテストに基づいて、現在サポートされているバケットインデックスシャードの最大数は 65521 です。Red Hat の品質保証は、バケットシャーディングで完全なスケーラビリティーテストを実施していません。
バケットインデックスシャードの数が 1999 を超える場合には、通常の S3 クライアントはバケットの内容を一覧表示できない可能性があります。カスタムクライアントは、順序付けられていないリストを要求して任意の数のシャードにスケーリングできます。
3.4.2. バケットのライフサイクルの並列スレッド処理
Red Hat Ceph Storage 4.1 の新機能により、バケットライフサイクルの並列スレッド処理が可能になりました。この並列化は、Ceph Object Gateway インスタンスの数に応じてスケーリングされ、順序が適切なインデックスシャードの列挙を数列に置き換えます。デフォルトのロックタイムアウトは 60 秒から 90 秒に拡張されました。各 Ceph Object Gateway インスタンスに対して並行して実行できるように、ライフサイクルワーカースレッドを調整するように、新たな調整可能なオプションが追加されました。
rgw_lc_max_worker
このオプションは、並行して実行するライフサイクルワーカースレッドの数を指定し、バケットおよびインデックスシャードを同時に処理します。rgw_lc_max_worker
オプションのデフォルト値は 3
です。
rgw_lc_max_wp_worker
このオプションは、各ライフサイクルワーカーのワークプールのスレッド数を指定します。このオプションを使用すると、各バケットの処理を加速することができます。rgw_lc_max_wp_worker
オプションのデフォルト値は 3
です。
関連情報
- 詳細は、Red Hat Ceph Storage 設定ガイドの Ceph 設定ファイル セクションを参照してください。
3.4.3. 簡易設定でのバケットインデックスシャードの設定
すべての新規バケットでバケットインデックスシャードを有効にし、設定するには、rgw_override_bucket_index_max_shards
パラメーターを使用します。パラメーターを次のように設定します。
-
バケットインデックスシャード化を無効にする場合は
0
。これがデフォルト値になります。 -
0
より大きい値を有効にすると、バケットシャード化が有効になり、シャードの最大数が設定されます。
前提条件
- バケットシャード化の制限 を読んでいる。
手順
推奨されるシャード数を計算します。これを行うには、以下の式を使用します。
number of objects expected in a bucket / 100,000
シャードの最大数は 65521 であることに注意してください。
Ceph 設定ファイルに
rgw_override_bucket_index_max_shards
を追加します。rgw_override_bucket_index_max_shards = value
value を、直前の手順で計算したシャードの推奨数に置き換えます。以下に例を示します。
rgw_override_bucket_index_max_shards = 12
-
Ceph Object Gateway のすべてのインスタンスにバケットインデックスシャードを設定するには、
[global]
セクションにrgw_override_bucket_index_max_shards
を追加します。 -
Ceph Object Gateway の特定のインスタンスに対してのみバケットインデックスのシャーディングを設定するには、インスタンスの下に
rgw_override_bucket_index_max_shards
を追加します。
-
Ceph Object Gateway のすべてのインスタンスにバケットインデックスシャードを設定するには、
Ceph Object Gateway を再起動します。
# systemctl restart ceph-radosgw.target
3.4.4. マルチサイト設定でのバケットインデックスのシャード化の設定
マルチサイト設定では、各ゾーンに異なる index_pool
を設定して、フェイルオーバーを管理できます。1 つのゾーングループのゾーンに一貫したシャード数を設定するには、そのゾーングループの設定に bucket_index_max_shards
を設定します。パラメーターを次のように設定します。
パラメーターを次のように設定します。
-
バケットインデックスシャーディングを無効にするには
0
、bucket_index_max_shards
のデフォルト値は11
です。 -
0
より大きい値を有効にすると、バケットシャード化が有効になり、シャードの最大数が設定されます。
SSD ベースの OSD の CRUSH ルールセットにインデックスプール (該当する場合は各ゾーン) をマッピングすることも、バケットインデックスのパフォーマンスに役立つ可能性があります。
前提条件
- バケットシャード化の制限 を読んでいる。
手順
推奨されるシャード数を計算します。これを行うには、以下の式を使用します。
number of objects expected in a bucket / 100,000
シャードの最大数は 65521 であることに注意してください。
ゾーングループ設定を
zonegroup.json
ファイルに展開します。$ radosgw-admin zonegroup get > zonegroup.json
zonegroup.json
ファイルで、名前付きゾーンごとにbucket_index_max_shards
を設定します。bucket_index_max_shards = VALUE
value を、直前の手順で計算したシャードの推奨数に置き換えます。以下に例を示します。
bucket_index_max_shards = 12
ゾーングループをリセットします。
$ radosgw-admin zonegroup set < zonegroup.json
期間を更新します。
$ radosgw-admin period update --commit
3.4.5. バケットインデックスの動的再シャーディング
動的バケットの再シャーディングのプロセスは、すべての Ceph Object Gateway バケットを定期的にチェックし、再シャーディングを必要とするバケットを検出します。バケットが rgw_max_objs_per_shard
パラメーターで指定された値よりも大きい場合、Ceph Object Gateway はバックグラウンドでバケットを動的に再シャードします。rgw_max_objs_per_shard
のデフォルト値は、シャードごとに 100k オブジェクトです。
デフォルト値は、回転するディスクに保存されているバケットインデックスのエクスペリエンスに基づいています。フラッシュメディアでバケットインデックスを使用する最新のセットアップでは、バケットインデックスシャードあたりの最大オブジェクト数の値が高くなる場合があります。
アップグレードされたシングルサイト設定では、ゾーンやゾーングループに変更を加えることなく、バケットインデックスの動的再シャーディングが期待どおりに機能します。シングルサイト設定は、以下のいずれかです。
- レルムのないデフォルトのゾーン設定。
- レルムが 1 つ以上あるデフォルト以外の設定。
- 複数レルムのシングルサイト設定。
前提条件
- バケットシャード化の制限 を読んでいる。
手順
バケットインデックスの動的再シャーディングを有効にするには、以下を実行します。
-
Ceph 設定ファイルの
rgw_dynamic_resharding
設定をtrue
(デフォルト値) に設定します。 任意です。必要に応じて、Ceph 設定ファイルの以下のパラメーターを変更します。
-
rgw_reshard_num_logs
: 再シャードログのシャードの数。デフォルト値は16
です。 -
rgw_reshard_bucket_lock_duration
: リシャード中にバケットのロックの期間。デフォルト値は360
秒です。 -
rgw_dynamic_resharding
: 動的リシャードを有効または無効にします。デフォルト値はtrue
です。 -
rgw_max_objs_per_shard
: シャードごとのオブジェクトの最大数。デフォルト値は、シャードごとに100000
オブジェクトです。 -
rgw_reshard_thread_interval
: 再シャード処理のラウンド間の最大時間。デフォルト値は600
秒です。
-
-
Ceph 設定ファイルの
バケットを再シャーディングキューに追加するには、以下を実行します。
radosgw-admin reshard add --bucket bucket --num-shards number
以下を置き換えます。
- bucket を、再シャードするバケットの名前に
- number を、新しいシャード数に
以下に例を示します。
$ radosgw-admin reshard add --bucket data --num-shards 10
再シャーディングキューを一覧表示するには、以下を実行します。
$ radosgw-admin reshard list
バケットの再シャーディングステータスを確認するには、以下のコマンドを実行します。
radosgw-admin reshard status --bucket bucket
以下を置き換えます。
- bucket を、再シャードするバケットの名前に
以下に例を示します。
$ radosgw-admin reshard status --bucket data
再シャーディングキューのエントリーを即座に処理するには、以下を実行します。
$ radosgw-admin reshard process
保留中のバケットの再シャーディングをキャンセルするには、以下を実行します。
radosgw-admin reshard cancel --bucket bucket
以下を置き換えます。
- bucket を、保留中のバケットの名前に置き換えます。
以下に例を示します。
$ radosgw-admin reshard cancel --bucket data
重要保留中 の再シャード操作のみをキャンセルできます。継続中 のリシャード操作をキャンセルしないでください。
- Red Hat Ceph Storage 3.1 およびそれ以前のバージョンを使用している場合は、再シャーディング後の古いインスタンスのクリーニング のセクションで説明されているように、古いバケットエントリーを削除します。
3.4.6. バケットインデックスの手動再シャーディング
バケットのサイズが初期設定に対して最適化されている場合は、radosgw-admin bucket reshard
コマンドを使用してバケットインデックスプールを再シャードします。このコマンドは、以下のようになります。
- 指定されたバケットのバケットインデックスオブジェクトの新しいセットを作成します。
- これらのバケットインデックスオブジェクトにオブジェクトエントリーを分散します。
- 新規バケットインスタンスを作成します。
- 新規インデックス操作すべてが新規バケットインデックスを通過するように、新しいバケットインスタンスをバケットとリンクします。
- 古いバケット ID および新しいバケット ID をコマンド出力に出力します。
この手順は、簡単な設定でのみ使用してください。マルチサイト設定でシャードバケットを再シャードするには、マルチサイトを使用した手動によるバケットのリシャード化 を参照してください。
前提条件
- バケットシャード化の制限 を読んでいる。
手順
元のバケットインデックスをバックアップします。
radosgw-admin bi list --bucket=bucket > bucket.list.backup
以下を置き換えます。
- bucket を、再シャードするバケットの名前に
たとえば、
data
という名前のバケットの場合は、以下を入力します。$ radosgw-admin bi list --bucket=data > data.list.backup
バケットインデックスを再シャード化します。
radosgw-admin bucket reshard --bucket=bucket --num-shards=number
以下を置き換えます。
- bucket を、再シャードするバケットの名前に
- number を、新しいシャード数に
たとえば、
data
という名前のバケットおよび必要なシャード数が 100 の場合は、以下を入力します。$ radosgw-admin bucket reshard --bucket=data --num-shards=100
- Red Hat Ceph Storage 3.1 およびそれ以前のバージョンを使用している場合は、再シャーディング後の古いインスタンスのクリーニング のセクションで説明されているように、古いバケットエントリーを削除します。
3.4.7. 再シャーディングを行った後に古いインスタンスの消去
Red Hat Ceph Storage 3.1 以前のバージョンでは、再シャーディングプロセスでは、バケットエントリーの古いインスタンスは自動的にクリーンアップされません。これらの古いインスタンスは、手動でクリーンアップされない場合にクラスターのパフォーマンスに影響を与える可能性があります。
この手順は、マルチサイトクラスターではない単純な設定にのみ使用するようにしてください。
前提条件
- Ceph Object Gateway がインストールされている。
手順
古いインスタンスを一覧表示します。
$ radosgw-admin reshard stale-instances list
古いインスタンスを削除します。
$ radosgw-admin reshard stale-instances rm