2.7. CRUSH ルール


CRUSH ルールは、Ceph クライアントがバケットとそれら内の OSD を選択する方法を定義し、プライマリー OSD がバケットとセカンダリー OSD を選択してレプリカやコーディングのチャンクを保存する方法を定義します。たとえば、2 つのオブジェクトレプリカ用に SSD がサポートするターゲット OSD と、3 つのレプリカ用に SAS ドライブがサポートする 3 つのターゲット OSD を選択するルールを作成できます。

ルールは以下の形式を取ります。

rule <rulename> {

    id <unique number>
    type [replicated | erasure]
    min_size <min-size>
    max_size <max-size>
    step take <bucket-type> [class <class-name>]
    step [choose|chooseleaf] [firstn|indep] <N> <bucket-type>
    step emit
}
Copy to Clipboard Toggle word wrap
id
説明
ルールを識別するための一意の整数。
目的
ルールマスクのコンポーネント。
Integer
必須
Yes
デフォルト
0
type
説明
レプリケートまたはイレイジャーコーディングされたストレージドライブのルールを説明しています。
目的
ルールマスクのコンポーネント。
String
必須
Yes
デフォルト
replicated
有効な値
現在は replicated のみ
min_size
説明
プールがこの数よりも小さいレプリカを使用する場合、CRUSH はこのルールを選択しません。
Integer
目的
ルールマスクのコンポーネント。
必須
Yes
デフォルト
1
max_size
説明
プールがこの数を超えるレプリカを行うと、CRUSH はこのルールを選択しません。
Integer
目的
ルールマスクのコンポーネント。
必須
Yes
デフォルト
10
step take <bucket-name> [class <class-name>]
説明
バケット名を取り、ツリーを下ってのイテレートを開始します。
目的
ルールのコンポーネント。
必須
Yes
step take datastep take data class ssd
step choose firstn <num> type <bucket-type>
説明

特定タイプのバケット数を選択します。通常、この数はプール内のレプリカ数です (プールサイズ)。

  • <num> == 0 の場合は、pool-num-replicas バケット (利用可能なすべて) を選択します。
  • <num> > 0 && < pool-num-replicas の場合は、多くのバケットを選択します。
  • <num> < 0 の場合、これは pool-num-replicas - {num} を意味します。
目的
ルールのコンポーネント。
前提条件
step take または step choose の後に行います。
step choose firstn 1 type row
step chooseleaf firstn <num> type <bucket-type>
説明

{bucket-type} のバケットのセットを選択し、バケットのセットの各バケットのサブツリーからリーフノードを選択します。セットのバケット数は、通常プール内のレプリカ数です (プールサイズ)。

  • <num> == 0 の場合は、pool-num-replicas バケット (利用可能なすべて) を選択します。
  • <num> > 0 && < pool-num-replicas の場合は、多くのバケットを選択します。
  • <num> < 0 の場合、これは pool-num-replicas - <num> を意味します。
目的
ルールのコンポーネント。使い方は、2 つの手順を使用してデバイスを選択する必要がなくなります。
前提条件
step take または step choose の後に行います。
step chooseleaf firstn 0 type row
step emit
説明
現在の値を出力します。また、スタックを除算します。通常、ルールの最後に使用されますが、同じルール内の異なるツリーを選択する際に使用することもできます。
目的
ルールのコンポーネント。
前提条件
step choose の後に行います。
step emit
firstn versus indep
説明
CRUSH マップで OSD がダウンする場合に使用する代替ストラテジーを制御します。このルールをレプリケートされたプールで使用する場合はこれを firstn にする必要があります。イレイジャーコーディングされたプールの場合は、indep にする必要があります。
OSD 1、2、3、4、5 に PG が保存されており、3 が落ちています。最初のシナリオでは、firstn モードの場合、CRUSH は、計算を調整して 1 および 2 を選択し、次に 3 を選択しますがそれがダウンしていることを検出したため、再試行して 4 と 5 を選択し、新しい OSD 6 を選択します。最終的な CRUSH マッピングの変更は 1、2、3、4、5 から 1、2、4、5、6 になります。2 つ目のシナリオでは、イレイジャーコーディングされたプールに indep モードが設定されていると、CRUSH は失敗した OSD 3 の選択を試行し、1、2、3、4、5 から 1、2、6、4、5) の最終変換に 6 を選択します。
重要

指定した CRUSH ルールは複数のプールに割り当てることができますが、単一プールで複数の CRUSH ルールを割り当てることはできません。

2.7.1. CRUSH ルールの一覧表示

コマンドラインから CRUSH ルールをリスト表示するには、以下を実行します。

構文

ceph osd crush rule list
ceph osd crush rule ls
Copy to Clipboard Toggle word wrap

2.7.2. CRUSH ルールのダンプ

特定の CRUSH ルールの内容をダンプするには、以下を実行します。

構文

ceph osd crush rule dump NAME
Copy to Clipboard Toggle word wrap

2.7.3. CRUSH ルールの追加

CRUSH ルールを追加するには、使用する階層のルートノード、複数の複製するバケットタイプ (例: 'rack'、'row' など)、バケットを選択するモードを指定する必要があります。

構文

ceph osd crush rule create-simple RUENAME ROOT BUCKET_NAME FIRSTN_OR_INDEP
Copy to Clipboard Toggle word wrap

Ceph は、chooseleaf と、指定したタイプのバケットを 1 つ使用してルールを作成します。

[ceph: root@host01 /]# ceph osd crush rule create-simple deleteme default host firstn
Copy to Clipboard Toggle word wrap

以下のルールを作成します。

{ "id": 1,
  "rule_name": "deleteme",
  "type": 1,
  "min_size": 1,
  "max_size": 10,
  "steps": [
        { "op": "take",
          "item": -1,
          "item_name": "default"},
        { "op": "chooseleaf_firstn",
          "num": 0,
          "type": "host"},
        { "op": "emit"}]}
Copy to Clipboard Toggle word wrap

2.7.4. レプリケートされたプールの CRUSH ルールの作成

レプリケートされたプールに CRUSH ルールを作成するには、以下を実行します。

構文

ceph osd crush rule create-replicated NAME ROOT FAILURE_DOMAIN CLASS
Copy to Clipboard Toggle word wrap

詳細は、以下のようになります。

  • <name>: 仮想マシンの名前。
  • <root>: CRUSH 階層のルート。
  • <failure-domain>: 障害ドメイン。たとえば、host または rack です。
  • <class>: ストレージデバイスクラス。たとえば、hdd または ssd です。

[ceph: root@host01 /]# ceph osd crush rule create-replicated fast default host ssd
Copy to Clipboard Toggle word wrap

2.7.5. イレイジャーコードプールの CRUSH ルールの作成

イレイジャーコードプールで使用する CRUSH ルールを追加するには、ルール名とイレイジャーコードプロファイルを指定できます。

構文

ceph osd crush rule create-erasure RULE_NAME PROFILE_NAME
Copy to Clipboard Toggle word wrap

[ceph: root@host01 /]# ceph osd crush rule create-erasure default default
Copy to Clipboard Toggle word wrap

関連情報

2.7.6. CRUSH ルールの削除

ルールを削除するには、以下を実行し、CRUSH ルール名を指定します。

構文

ceph osd crush rule rm NAME
Copy to Clipboard Toggle word wrap

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る