2.7. CRUSH ルール
CRUSH ルールは、Ceph クライアントがバケットとそれら内の OSD を選択する方法を定義し、プライマリー OSD がバケットとセカンダリー OSD を選択してレプリカやコーディングのチャンクを保存する方法を定義します。たとえば、2 つのオブジェクトレプリカ用に SSD がサポートするターゲット OSD と、3 つのレプリカ用に SAS ドライブがサポートする 3 つのターゲット OSD を選択するルールを作成できます。
ルールは以下の形式を取ります。
- ルールセット
- 説明
- (非推奨) ルールを一連のルールに属するように分類する手段。プールにルールセットを設定してアクティベートされます。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 が保存されており、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 ルールを一覧表示するには、以下を実行します。
ceph osd crush rule list ceph osd crush rule ls
ceph osd crush rule list
ceph osd crush rule ls