8.11. データ取り込みのレート制限
ストレージ管理者は、Ceph Object Gateway 設定を使用して Red Hat Ceph Storage クラスターにオブジェクトを保存するときに、操作と帯域幅に基づいてユーザーとバケットにレート制限を設定できます。
8.11.1. ストレージクラスターでのレート制限の目的
Ceph Object Gateway 設定でユーザーとバケットにレート制限を設定できます。レート制限には、読み取り操作の最大数、1 分あたりの書き込み操作、およびユーザーごとまたはバケットごとに 1 分あたりに書き込みまたは読み取りできるバイト数が含まれます。
REST で GET または HEAD メソッドを使用するリクエストは読み取りリクエストであり、それ以外は書き込みリクエストです。
Ceph Object Gateway は、ユーザーとバケットのリクエストを別々に追跡し、他のゲートウェイとは共有しません。つまり、設定された目的の制限をアクティブな Object Gateway の数で割る必要があります。
たとえば、ユーザー A が 1 分あたり 10 操作に制限され、クラスター内に 2 つの Ceph Object Gateway がある場合、ユーザー A に対する制限は 5 である必要があります。つまり、2 つの Ceph Object Gateway に対して 1 分あたり 10 操作です。リクエストが Ceph Object Gateway 間でバランスが取れていない場合、レート制限が十分に活用されていない可能性があります。たとえば、ops の制限が 5 で、Ceph Object Gateway が 2 つあるが、ロードバランサーがこれらの Ceph Object Gateway の 1 つだけに負荷を送信する場合、この制限は Ceph Object Gateway ごとに適用されるため、有効な制限は 5 ops になります。
バケットの制限に達してもユーザーの制限に達しない場合、またはその逆の場合、リクエストもキャンセルされます。
帯域幅のカウントは、要求が受け入れられた後に行われます。その結果、リクエストの途中でバケットまたはユーザーが帯域幅の制限に達した場合でも、このリクエストは続行されます。
Ceph Object Gateway は、設定された値よりも多くの使用済みバイトの「負債」を保持し、「負債」が支払われるまで、このユーザーまたはバケットがそれ以上リクエストを送信できないようにします。「債務」の最大サイズは、1 分あたりの最大読み取り/書き込みバイト数の 2 倍です。ユーザー A に 1 分あたり 1 バイトの読み取り制限があり、このユーザーが 1 GB オブジェクトを取得しようとすると、ユーザーはそれを実行できます。
ユーザー A がこの 1 GB 操作を完了すると、Ceph Object Gateway は、ユーザー A が GET 要求を再度送信できるようになるまで、最大 2 分間ユーザー要求をブロックします。
レートを制限するためのさまざまなオプション:
-
バケット:
--bucket
オプションを使用すると、バケットのレート制限を指定できます。 -
ユーザー:
--uid
オプションを使用すると、ユーザーのレート制限を指定できます。 -
最大読み取り操作:
--max-read-ops
設定を使用すると、Ceph Object Gateway ごとに 1 分あたりの読み取り操作の最大数を指定できます。値0
はこの設定を無効にし、無制限のアクセスを意味します。 -
最大読み取りバイト数:
--max-read-bytes
設定を使用すると、Ceph Object Gateway ごとに 1 分あたりの最大読み取りバイト数を指定できます。値0
はこの設定を無効にし、無制限のアクセスを意味します。 -
最大書き込み操作:
--max-write-ops
設定を使用すると、Ceph Object Gateway ごとに 1 分あたりの書き込み操作の最大数を指定できます。値0
はこの設定を無効にし、無制限のアクセスを意味します。 -
最大書き込みバイト数:
--max-write-bytes
設定を使用すると、Ceph Object Gateway ごとに 1 分あたりの最大書き込みバイト数を指定できます。値0
はこの設定を無効にし、無制限のアクセスを意味します。 -
レート制限スコープ:
--rate-limit-scope
オプションは、レート制限のスコープを設定します。オプションは、bucket
、user
、およびanonymous
です。バケットレート制限はバケットに適用され、ユーザーレート制限はユーザーに適用され、匿名は認証されていないユーザーに適用されます。匿名スコープは、グローバルレート制限でのみ使用できます。
8.11.2. ユーザーレート制限を有効にする
Ceph Object Gateway 設定でユーザーにレート制限を設定できます。ユーザーのレート制限には、読み取り操作の最大数、1 分あたりの書き込み操作、およびユーザーごとに 1 分あたりに書き込みまたは読み取りできるバイト数が含まれます。
ratelimit-scope
を user
に設定して radosgw-admin ratelimit set
コマンドを使用することにより、レート制限の値を設定した後で、ユーザーのレート制限を有効にすることができます。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Object Gateway がインストールされている。
手順
ユーザーのレート制限を設定します。
構文
radosgw-admin ratelimit set --ratelimit-scope=user --uid=USER_ID [--max-read-ops=NUMBER_OF_OPERATIONS] [--max-read-bytes=NUMBER_OF_BYTES] [--max-write-ops=NUMBER_OF_OPERATIONS] [--max-write-bytes=NUMBER_OF_BYTES]
例
[ceph: root@host01 /]# radosgw-admin ratelimit set --ratelimit-scope=user --uid=testing --max-read-ops=1024 --max-write-bytes=10240
NUMBER_OF_OPERATIONS または NUMBER_OF_BYTES の値
0
は、特定のレート制限属性チェックが無効であることを意味します。ユーザーのレート制限を取得します。
構文
radosgw-admin ratelimit get --ratelimit-scope=user --uid=USER_ID
例
[ceph: root@host01 /]# radosgw-admin ratelimit get --ratelimit-scope=user --uid=testing { "user_ratelimit": { "max_read_ops": 1024, "max_write_ops": 0, "max_read_bytes": 0, "max_write_bytes": 10240, "enabled": false } }
ユーザーレート制限を有効にします。
構文
radosgw-admin ratelimit enable --ratelimit-scope=user --uid=USER_ID
例
[ceph: root@host01 /]# radosgw-admin ratelimit enable --ratelimit-scope=user --uid=testing { "user_ratelimit": { "max_read_ops": 1024, "max_write_ops": 0, "max_read_bytes": 0, "max_write_bytes": 10240, "enabled": true } }
オプション: ユーザーのレート制限を無効にします。
構文
radosgw-admin ratelimit disable --ratelimit-scope=user --uid=USER_ID
例
[ceph: root@host01 /]# radosgw-admin ratelimit disable --ratelimit-scope=user --uid=testing
8.11.3. バケットレート制限の有効化
Ceph Object Gateway 設定でバケットにレート制限を設定できます。バケットのレート制限には、読み取り操作の最大数、1 分あたりの書き込み操作、およびユーザーごとに 1 分あたりに書き込みまたは読み取りできるバイト数が含まれます。
ratelimit-scope
を bucket
に設定して radosgw-admin ratelimit set
コマンドを使用することにより、レート制限の値を設定した後で、バケットのレート制限を有効にすることができます。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Object Gateway がインストールされている。
手順
バケットのレート制限を設定します。
構文
radosgw-admin ratelimit set --ratelimit-scope=bucket --bucket= BUCKET_NAME [--max-read-ops=NUMBER_OF_OPERATIONS] [--max-read-bytes=NUMBER_OF_BYTES] [--max-write-ops=NUMBER_OF_OPERATIONS] [--max-write-bytes=NUMBER_OF_BYTES]
例
[ceph: root@host01 /]# radosgw-admin ratelimit set --ratelimit-scope=bucket --bucket=mybucket --max-read-ops=1024 --max-write-bytes=10240
NUMBER_OF_OPERATIONS または NUMBER_OF_BYTES の値
0
は、特定のレート制限属性チェックが無効であることを意味します。バケットレート制限を取得します。
構文
radosgw-admin ratelimit get --ratelimit-scope=bucket --bucket=BUCKET_NAME
例
[ceph: root@host01 /]# radosgw-admin ratelimit get --ratelimit-scope=bucket --bucket=mybucket { "bucket_ratelimit": { "max_read_ops": 1024, "max_write_ops": 0, "max_read_bytes": 0, "max_write_bytes": 10240, "enabled": false } }
バケットレート制限を有効にします。
構文
radosgw-admin ratelimit enable --ratelimit-scope=bucket --bucket=BUCKET_NAME
例
[ceph: root@host01 /]# radosgw-admin ratelimit enable --ratelimit-scope=bucket --bucket=mybucket { "bucket_ratelimit": { "max_read_ops": 1024, "max_write_ops": 0, "max_read_bytes": 0, "max_write_bytes": 10240, "enabled": true } }
オプション: バケットのレート制限を無効にします。
構文
radosgw-admin ratelimit disable --ratelimit-scope=bucket --bucket=BUCKET_NAME
例
[ceph: root@host01 /]# radosgw-admin ratelimit disable --ratelimit-scope=bucket --bucket=mybucket
8.11.4. グローバルレート制限の設定
期間設定でグローバルレート制限設定を読み書きできます。グローバルレート制限パラメーターを使用して global ratelimit
設定を操作することにより、ユーザーまたはバケットのレート制限設定を上書きできます。これは、ratelimit set
、ratelimit enable
、および ratelimit disable
コマンドに相当します。
レルムと期間が存在するマルチサイト設定では、グローバルレート制限への変更は、period update --commit
コマンドを使用してコミットする必要があります。期間が表示されていない場合、変更を有効にするには、Ceph Object Gateway を再起動する必要があります。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Object Gateway がインストールされている。
手順
グローバルレート制限設定を表示します。
構文
radosgw-admin global ratelimit get
例
[ceph: root@host01 /]# radosgw-admin global ratelimit get { "bucket_ratelimit": { "max_read_ops": 1024, "max_write_ops": 0, "max_read_bytes": 0, "max_write_bytes": 0, "enabled": false }, "user_ratelimit": { "max_read_ops": 0, "max_write_ops": 0, "max_read_bytes": 0, "max_write_bytes": 0, "enabled": false }, "anonymous_ratelimit": { "max_read_ops": 0, "max_write_ops": 0, "max_read_bytes": 0, "max_write_bytes": 0, "enabled": false } }
バケットのレート制限スコープを設定して有効にします。
バケットのグローバルレート制限を設定します。
構文
radosgw-admin global ratelimit set --ratelimit-scope=bucket [--max-read-ops=NUMBER_OF_OPERATIONS] [--max-read-bytes=NUMBER_OF_BYTES] [--max-write-ops=NUMBER_OF_OPERATIONS] [--max-write-bytes=NUMBER_OF_BYTES]
例
[ceph: root@host01 /]# radosgw-admin global ratelimit set --ratelimit-scope bucket --max-read-ops=1024
バケットレート制限を有効にします。
構文
radosgw-admin global ratelimit enable --ratelimit-scope=bucket
例
[ceph: root@host01 /]# radosgw-admin global ratelimit enable --ratelimit-scope bucket
認証済みユーザーのレート制限スコープを設定して有効にします。
ユーザーのグローバルレート制限を設定します。
構文
radosgw-admin global ratelimit set --ratelimit-scope=user [--max-read-ops=NUMBER_OF_OPERATIONS] [--max-read-bytes=NUMBER_OF_BYTES] [--max-write-ops=NUMBER_OF_OPERATIONS] [--max-write-bytes=NUMBER_OF_BYTES]
例
[ceph: root@host01 /]# radosgw-admin global ratelimit set --ratelimit-scope=user --max-read-ops=1024
ユーザーレート制限を有効にします。
構文
radosgw-admin global ratelimit enable --ratelimit-scope=user
例
[ceph: root@host01 /]# radosgw-admin global ratelimit enable --ratelimit-scope=user
認証されていないユーザーのレート制限スコープを設定して有効にします。
認証されていないユーザーのグローバルレート制限を設定します。
構文
radosgw-admin global ratelimit set --ratelimit-scope=anonymous [--max-read-ops=NUMBER_OF_OPERATIONS] [--max-read-bytes=NUMBER_OF_BYTES] [--max-write-ops=NUMBER_OF_OPERATIONS] [--max-write-bytes=NUMBER_OF_BYTES]
例
[ceph: root@host01 /]# radosgw-admin global ratelimit set --ratelimit-scope=anonymous --max-read-ops=1024
ユーザーレート制限を有効にします。
構文
radosgw-admin global ratelimit enable --ratelimit-scope=anonymous
例
[ceph: root@host01 /]# radosgw-admin global ratelimit enable --ratelimit-scope=anonymous