3.4. バケットシャード化の設定

Ceph Object Gateway は、バケットインデックスデータをインデックスプール (index_pool) に格納します。デフォルトは .rgw.buckets.index です。クライアントが多数のオブジェクトを配置すると、数百から数百万ものオブジェクトバケットあたりのオブジェクトの最大数を設定せずにクォータを設定しない単一のバケットでは、インデックスプールのパフォーマンスが大幅に低下する可能性があります。

バケットインデックスのシャーディング は、バケットあたりのオブジェクト数が多い場合のパフォーマンスのボトルネックを防ぐのに役立ちます。Red Hat Ceph Storage 4.1 以降、バケットインデックスシャードのデフォルト数である bucket_index_max_shards が 1 から 11 に変更になりました。この変更により、小規模なバケットの書き込みスループットの量が増え、動的リシャードの開始が遅延します。この変更は新しいバケットおよびデプロイメントにのみ影響します。

既存のデプロイメントでこのデフォルト値を変更するには、以下のコマンドを実行します。

# radosgw-admin zonegroup modify --bucket-index-max-shards=10

バケットインデックスシャード機能を設定するには、以下を実行します。

バケットを再シャードするには、以下を実行します。

3.4.1. バケットのシャード化の制限

重要

以下の制限は注意して使用してください。お使いのハードウェアの選択には影響があるため、この要件を Red Hat アカウントチームと常に相談してください。

  • シャードが必要になる前に 1 つのバケット内のオブジェクトの最大数: Red Hat は、バケットインデックスのシャードごとに最大 102,400 個のオブジェクトを推奨しています。シャード化をフルに活用するには、Ceph Object Gateway バケットインデックスプールに十分な数の OSD を指定して最大並列処理を取得します。
  • シャード化の使用時の最大オブジェクト数: 以前のテストに基づき、現在サポートされているバケットインデックスシャードの数は 65521 です。Red Hat の品質保証では、バケットシャードで完全なスケーラビリティーテストが実行されていません。

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 です。

関連情報

3.4.3. 簡易設定でのバケットインデックスシャードの設定

すべての新規バケットでバケットインデックスシャードを有効にし、設定するには、rgw_override_bucket_index_max_shards パラメーターを使用します。パラメーターをに設定します。

  • バケットインデックスシャード化を無効にする場合は 0。これがデフォルト値になります。
  • 0 より大きい値を有効にすると、バケットシャード化が有効になり、シャードの最大数が設定されます。

前提条件

手順

  1. 推奨されるシャードの数を計算します。これを行うには、以下の式を使用します。

    number of objects expected in a bucket / 100,000

    シャードの最大数は 65521 であることに注意してください。

  2. Ceph 設定ファイルに rgw_override_bucket_index_max_shards を追加します。

    rgw_override_bucket_index_max_shards = value

    value を、直前の手順で計算したシャードの推奨数に置き換えます。以下に例を示します。

    rgw_override_bucket_index_max_shards = 10
    • Ceph Object Gateway のすべてのインスタンスにバケットインデックスシャードを設定するには、[global] セクションに rgw_override_bucket_index_max_shards を追加します。
    • Ceph Object Gateway の特定のインスタンスに対してのみバケットインデックスのシャーディングを設定するには、インスタンスの下に rgw_override_bucket_index_max_shards を追加します。
  3. Ceph Object Gateway を再起動します。

    # systemctl restart ceph-radosgw.target

3.4.4. マルチサイト設定でのバケットインデックスシャード化の設定

マルチサイト設定では、フェイルオーバーを管理するために、ゾーンごとに異なる index_pool 設定を指定できます。1 つのゾーングループのゾーンに一貫したシャード数を設定するには、そのゾーングループの構成に rgw_override_bucket_index_max_shards を設定します。パラメーターをに設定します。

  • バケットインデックスシャード化を無効にする場合は 0。これがデフォルト値になります。
  • 0 より大きい値を有効にすると、バケットシャード化が有効になり、シャードの最大数が設定されます。
注記

インデックスプール(該当する場合)を SSD ベースの OSD の CRUSH ルールセットにマッピングすると、バケットインデックスのパフォーマンスにも役に立ちます。

前提条件

手順

  1. 推奨されるシャードの数を計算します。これを行うには、以下の式を使用します。

    number of objects expected in a bucket / 100,000

    シャードの最大数は 65521 であることに注意してください。

  2. ゾーングループ設定を zonegroup.json ファイルに展開します。

    $ radosgw-admin zonegroup get > zonegroup.json
  3. zonegroup.json ファイルで、名前付きゾーンごとに rgw_override_bucket_index_max_shards を設定します。

    rgw_override_bucket_index_max_shards = value

    value を、直前の手順で計算したシャードの推奨数に置き換えます。以下に例を示します。

    rgw_override_bucket_index_max_shards = 10
  4. ゾーングループをリセットします。

    $ radosgw-admin zonegroup set < zonegroup.json
  5. 期間を更新します。

    $ radosgw-admin period update --commit

3.4.5. Dynamic Bucket Index Resharding

動的バケットリシャードのプロセスは、すべての Ceph Object Gateway バケットを定期的にチェックし、再シャードが必要なバケットを検出します。バケットが rgw_max_objs_per_shard パラメーターで指定された値よりも大きい場合、Ceph Object Gateway はバックグラウンドでバケットを動的に再シャードします。rgw_max_objs_per_shard のデフォルト値は、シャードごとに 100k オブジェクトです。

重要

現在、Red Hat は、マルチサイト設定での動的なバケットのサイズ変更をサポートしていません。このような設定でシャードバケットのインデックスを再作成するには、「マルチサイトを使用した手動によるバケットのリシャード化」を参照してください。

前提条件

手順

  • 動的バケットインデックスのシャード化を有効にするには、以下を実行します。

    1. Ceph 設定ファイルの rgw_dynamic_resharding 設定を true (デフォルト値) に設定します。
    2. 任意です。必要に応じて、Ceph 設定ファイルで以下のパラメーターを変更します。

      • rgw_reshard_num_logs: 再シャードログのシャードの数。デフォルト値は 16 です。
      • rgw_reshard_bucket_lock_duration: リシャード中にバケットのロックの期間。デフォルト値は 120 秒です。
      • rgw_dynamic_resharding: 動的リシャードを有効または無効にします。デフォルト値は true です。
      • rgw_max_objs_per_shard: シャードごとのオブジェクトの最大数。デフォルト値は、シャードごとに 100000 オブジェクトです。
      • rgw_reshard_thread_interval: 再シャード処理のラウンド間の最大時間。デフォルト値は 600 秒です。
  • バケットを再シャードキューに追加するには、以下を実行します。

    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. Manual Bucket Index Resharding

バケットのサイズが初期設定に対して最適化されている場合は、radosgw-admin bucket reshard コマンドを使用してバケットインデックスプールを再シャードします。このコマンド:

  • 指定されたバケットのバケットインデックスオブジェクトの新規セットを作成します。
  • オブジェクトエントリーをこれらのバケットインデックスオブジェクトに分散します。
  • 新規バケットインスタンスを作成します。
  • 新規バケットインスタンスをバケットにリンクし、新規インデックス操作はすべて新規バケットインデックスを経由できるようにします。
  • は、古いバケット ID と新しいバケット ID をコマンド出力に出力します。
重要

この手順は、単純な設定でのみ使用してください。マルチサイト設定でシャードバケットを再シャードするには、「マルチサイトを使用した手動によるバケットのリシャード化」を参照してください。

前提条件

手順

  1. 元のバケットインデックスのバックアップを作成します。

    radosgw-admin bi list --bucket=bucket  bucket.list.backup

    以下を置き換えます。

    • bucket を、再シャードするバケットの名前に

    たとえば、data という名前のバケットの場合は、以下を入力します。

    $ radosgw-admin bi list --bucket=data > data.list.backup
  2. バケットインデックスを再シャードします。

    radosgw-admin bucket reshard --bucket=bucket
    --num-shards=number

    以下を置き換えます。

    • bucket を、再シャードするバケットの名前に
    • number を、新しいシャード数に

    たとえば、data という名前のバケットおよび必要なシャード数が 100 の場合は、以下を入力します。

    $ radosgw-admin reshard --bucket=data
    --num-shards=100
  3. Red Hat Ceph Storage 3.1 およびそれ以前のバージョンを使用している場合は、「再シャーディング後の古いインスタンスのクリーニング」のセクションで説明されているように、古いバケットエントリを削除します。

3.4.7. 再シャード後の古いインスタンスのクリーニング

Red Hat Ceph Storage 3.1 以前のバージョンでは、再シャードプロセスでバケットエントリーの古いインスタンスが自動的にクリーンアップされません。これらの古いインスタンスは、クラスターが手動でクリーンアップされていない場合にクラスターのパフォーマンスに影響を与える可能性があります。

重要

この手順は、マルチサイトクラスターではない単純な設定でのみ使用します。

前提条件

  • Ceph Object Gateway がインストールされている。

手順

  1. 古いインスタンスを一覧表示します。

    $ radosgw-admin reshard stale-instances list
  2. 古いインスタンスを消去します。

    $ radosgw-admin reshard stale-instances rm