2.3. CRUSH の Ceph OSD
OSD の CRUSH 階層を作成したら、OSD を CRUSH 階層に追加します。既存の階層から OSD を移動または削除することもできます。Ceph CLI の使用には、以下の値が使用できます。
- id
- 説明
- OSD の数値 ID。
- 型
- 整数
- 必須
- Yes
- 例
-
0
- name
- 説明
- OSD のフルネーム。
- 型
- String
- 必須
- Yes
- 例
-
osd.0
- weight
- 説明
- OSD の CRUSH 加重。
- 型
- Double
- 必須
- Yes
- 例
-
2.0
- root
- 説明
- OSD が存在する階層またはツリーのルートバケットの名前。
- 型
- キーと値のペア。
- 必須
- Yes
- 例
-
root=default
、root=replicated_rule
など
- bucket-type
- 説明
- 1 つ以上の name-value ペア。ここで、名前はバケットタイプで、値はバケットの名前になります。CRUSH 階層で OSD の CRUSH の場所を指定できます。
- 型
- キーと値のペア。
- 必須
- いいえ
- 例
-
datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1
2.3.1. CRUSH での OSD の表示 リンクのコピーリンクがクリップボードにコピーされました!
ceph osd crush tree
コマンドは、CRUSH バケットと項目をツリービューで出力します。このコマンドを使用して、特定のバケット内の OSD のリストを確認します。ceph osd tree
のような出力が表示されます。
詳細情報を返すには、以下のコマンドを実行します。
ceph osd crush tree -f json-pretty
# ceph osd crush tree -f json-pretty
このコマンドは、以下のような出力を返します。
2.3.2. OSD の CRUSH への追加 リンクのコピーリンクがクリップボードにコピーされました!
Ceph OSD を CRUSH 階層に追加することは、OSD を起動する前の最後のステップ (up
および in
を編集する) であり、Ceph は配置グループを OSD に割り当てます。
Red Hat Ceph Storage 5 以降のリリースでは、Ceph Orchestrator を使用して OSD を CRUSH 階層にデプロイします。詳細は、利用可能なすべてのデバイスへの Ceph OSD のデプロイメント を参照してください。
OSD を手動で追加するには、CRUSH 階層に追加する前に Ceph OSD を準備する必要があります。たとえば、単一ノードで CephOSD を作成します。
ceph orch daemon add osd {host}:{device},[{device}]
ceph orch daemon add osd {host}:{device},[{device}]
CRUSH 階層は概念であるため、ceph osd crush add
コマンドを使用すると、希望する場所の CRUSH 階層に OSD を追加できます。指定する場所は、実際の場所を反映している はず です。少なくとも 1 つのバケットを指定すると、コマンドにより OSD を指定する最も具体的なバケットに配置され、かつ そのバケットは指定した他のバケットの下に移動します。
OSD を CRUSH 階層に追加するには、以下を実行します。
ceph osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]
ceph osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]
root バケットのみを指定した場合、このコマンドは OSD を直接ルートに割り当てます。ただし、CRUSH ルールは OSD がホストまたはシャーシの内部にあり、ホストまたはシャーシはクラスタートポロジーを反映する他のバケットの内部にある 必要 があります。
以下の例では、osd.0
を階層に追加します。
ceph osd crush add osd.0 1.0 root=default datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1
ceph osd crush add osd.0 1.0 root=default datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1
ceph osd crush set
または ceph osd crush create-or-move
を使用して、OSD を CRUSH 階層に追加することもできます。
2.3.3. CRUSH 階層内での OSD の移動 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Ceph Storage 5 以降のリリースでは、Ceph Orchestrator を使用してホストの初期 CRUSH 場所を設定できます。詳細は、ホストの初期 CRUSH 場所の設定 を参照してください。
OSD の置き換えについては、Ceph Orchestrator を使用した OSD の置き換え を参照してください。
ストレージクラスタートポロジーが変更された場合は、CRUSH 階層内の OSD を手動で移動して、実際の場所を反映させることができます。
CRUSH 階層で OSD を移動すると、Ceph は OSD に割り当てられる配置グループを再計算することを意味します。これにより、データが大幅に再分配される可能性があります。
CRUSH 階層内の OSD を移動するには、以下を実行します。
ceph osd crush set {id-or-name} {weight} root={pool-name} [{bucket-type}={bucket-name} ...]
ceph osd crush set {id-or-name} {weight} root={pool-name} [{bucket-type}={bucket-name} ...]
ceph osd crush create-or-move
を使用して、CRUSH 階層内で OSD を移動することもできます。
2.3.4. CRUSH 階層からの OSD の削除 リンクのコピーリンクがクリップボードにコピーされました!
CRUSH 階層からの OSD 削除は、クラスターから OSD を削除する場合の最初の手順となります。CRUSH マップから OSD を削除すると、CRUSH は配置グループおよびデータリバランスを取得する OSD が再計算されます。詳細は、OSD の追加/削除を参照してください。
Red Hat Ceph Storage 5 以降のリリースの場合、Ceph Orchestrator を使用してストレージクラスターから OSD を削除できます。詳細は、Ceph Orchestrator を使用した OSD デーモンの削除 を参照してください。
実行中のクラスターの CRUSH マップから OSD を削除するには、以下を実行します。
ceph osd crush remove {name}
ceph osd crush remove {name}