2.7. CRUSH ルール

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

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

rule <rulename> {

    ruleset <ruleset>
    type [ replicated | raid4 ]
    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
}
ルールセット
説明
(非推奨) ルールを一連のルールに属するように分類する手段。プールにルールセットを設定してアクティベートされます。RHCS 2 以前のリリースでサポートされます。RHCS 3 以降のリリースでは、ルールセットはサポートされません。
目的
ルールマスクのコンポーネント。
タイプ
整数
必須
Yes
デフォルト
0
type
説明
では、ストレージドライブ (複製) または RAID のいずれかのルールを説明します。
目的
ルールマスクのコンポーネント。
タイプ
文字列
必須
Yes
デフォルト
replicated
有効な値
現在は replicated のみ
min_size
説明
プールがこの数よりも小さいレプリカを使用する場合、CRUSH はこのルールを選択しません。
タイプ
整数
目的
ルールマスクのコンポーネント。
必須
Yes
デフォルト
1
max_size
説明
プールがこの数を超えるレプリカを行うと、CRUSH はこのルールを選択しません。
タイプ
整数
目的
ルールマスクのコンポーネント。
必須
Yes
デフォルト
10
step take <bucket-name> [class <class-name>]
説明
バケット名を取り、ツリーを下ってのイテレートを開始します。RHCS 3 以降では、デバイスクラス名を取る可能性があります。
目的
ルールのコンポーネント。
必須
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 が落ちています。最初のシナリオでは、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 ルールを一覧表示するには、以下を実行します。

ceph osd crush rule list
ceph osd crush rule ls