2.7. CRUSH ルール
CRUSH ルールは、Ceph クライアントがバケットとそれら内の OSD を選択する方法を定義し、プライマリー OSD がバケットとセカンダリー OSD を選択してレプリカやコーディングのチャンクを保存する方法を定義します。たとえば、2 つのオブジェクトレプリカ用に SSD がサポートするターゲット OSD と、3 つのレプリカ用に SAS ドライブがサポートする 3 つのターゲット OSD を選択するルールを作成できます。
ルールは以下の形式を取ります。
- 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
ceph osd crush rule list
ceph osd crush rule ls
2.7.2. CRUSH ルールのダンプ リンクのコピーリンクがクリップボードにコピーされました!
特定の CRUSH ルールの内容をダンプするには、以下を実行します。
構文
ceph osd crush rule dump NAME
ceph osd crush rule dump NAME
2.7.3. CRUSH ルールの追加 リンクのコピーリンクがクリップボードにコピーされました!
CRUSH ルールを追加するには、使用する階層のルートノード、複数の複製するバケットタイプ (例: 'rack'、'row' など)、バケットを選択するモードを指定する必要があります。
構文
ceph osd crush rule create-simple RUENAME ROOT BUCKET_NAME FIRSTN_OR_INDEP
ceph osd crush rule create-simple RUENAME ROOT BUCKET_NAME FIRSTN_OR_INDEP
Ceph は、chooseleaf と、指定したタイプのバケットを 1 つ使用してルールを作成します。
例
[ceph: root@host01 /]# ceph osd crush rule create-simple deleteme default host firstn
[ceph: root@host01 /]# ceph osd crush rule create-simple deleteme default host firstn
以下のルールを作成します。
2.7.4. レプリケートされたプールの CRUSH ルールの作成 リンクのコピーリンクがクリップボードにコピーされました!
レプリケートされたプールに CRUSH ルールを作成するには、以下を実行します。
構文
ceph osd crush rule create-replicated NAME ROOT FAILURE_DOMAIN CLASS
ceph osd crush rule create-replicated NAME ROOT FAILURE_DOMAIN CLASS
詳細は、以下のようになります。
-
<name>: 仮想マシンの名前。 -
<root>: CRUSH 階層のルート。 -
<failure-domain>: 障害ドメイン。たとえば、hostまたはrackです。 -
<class>: ストレージデバイスクラス。たとえば、hddまたはssdです。
例
[ceph: root@host01 /]# ceph osd crush rule create-replicated fast default host ssd
[ceph: root@host01 /]# ceph osd crush rule create-replicated fast default host ssd
2.7.5. イレイジャーコードプールの CRUSH ルールの作成 リンクのコピーリンクがクリップボードにコピーされました!
イレイジャーコードプールで使用する CRUSH ルールを追加するには、ルール名とイレイジャーコードプロファイルを指定できます。
構文
ceph osd crush rule create-erasure RULE_NAME PROFILE_NAME
ceph osd crush rule create-erasure RULE_NAME PROFILE_NAME
例
[ceph: root@host01 /]# ceph osd crush rule create-erasure default default
[ceph: root@host01 /]# ceph osd crush rule create-erasure default default
関連情報
- 詳細は、イレージャーコードプロファイル を参照してください。
2.7.6. CRUSH ルールの削除 リンクのコピーリンクがクリップボードにコピーされました!
ルールを削除するには、以下を実行し、CRUSH ルール名を指定します。
構文
ceph osd crush rule rm NAME
ceph osd crush rule rm NAME