2.4. デバイスクラス
Ceph の CRUSH マップは、データの配置を制御するのに余分な柔軟性を提供します。これは、Ceph の最も大きなメリットの 1 つです。初期の Ceph のデプロイメントでは、ハードディスクドライブをほぼ排他的に使用していました。現在、Ceph クラスターは複数のタイプのストレージデバイスで頻繁にビルドされます (HDD、SSD、NVMe、またはさまざまなクラス)。たとえば、クライアントが低速な HDD 上にデータを格納するためのストレージポリシーや、高速 SSD にデータを保存するその他のストレージポリシーを持つように、Ceph Object Gateway デプロイメントにおいて一般的に使用されます。Ceph Object Gateway デプロイメントでは、バケットインデックスの高速 SSD によるプールをサポートする可能性があります。また、OSD ノードにも、CRUSH マップには表示されないジャーナルまたは書き込みログに SSD のみが使用されます。これらの複雑なハードウェアシナリオでは、CRUSH マップを手動で編集する必要がありました。これには、多くの時間と労力が必要となることがありました。RHCS 3 では、Red Hat は新しいデバイスクラスを追加しました。これにより、CRUSH 階層の作成が大幅に簡素化されています。その場合、RHCS 3 以上では、異なるストレージデバイスの異なる CRUSH 階層を持つ必要はありません。
CRUSH ルールは、CRUSH 階層の用語で機能します。ただし、同じホスト内に異なるストレージデバイスのクラスが存在する場合、このプロセスはより複雑になり、デバイスの各クラスに複数の CRUSH 階層を作成し、CRUSH 階層管理の多くを自動化する osd crush update on start オプションを無効にします。デバイスクラスは、使用するデバイスのクラスに対して CRUSH ルールに指示することで、この適合性を排除します。これにより、CRUSH 管理タスクを単純化します。
RHCS 3 以降では、ceph osd tree コマンドに、デバイスクラスを反映した列があります。
以下のセクションでは、デバイスクラスの使用について詳しく説明します。その他の例については、RHCS 3 以降におけるさまざまなデバイスクラスの使用 および CRUSH ストレージ戦略の例 を参照してください。
2.4.1. デバイスクラスの設定 リンクのコピーリンクがクリップボードにコピーされました!
OSD にデバイスクラスを設定するには、次のコマンドを実行します。
ceph osd crush set-device-class <class> <osdId> [<osdId>...]
# ceph osd crush set-device-class <class> <osdId> [<osdId>...]
以下に例を示します。
ceph osd crush set-device-class hdd osd.0 osd.1 ceph osd crush set-device-class ssd osd.2 osd.3 ceph osd crush set-device-class bucket-index osd.4
# ceph osd crush set-device-class hdd osd.0 osd.1
# ceph osd crush set-device-class ssd osd.2 osd.3
# ceph osd crush set-device-class bucket-index osd.4
Ceph はクラスをデバイスに自動的に割り当てる場合があります。ただし、クラス名は単に任意の文字列です。hdd、ssd、nvme に準拠する必要はありません。前述の例では、bucket-index という名前のデバイスクラスが、Ceph Object Gateway プールが排他的バケットインデックスワークロードを使用する SSD デバイスを示す場合があります。すでに設定されているデバイスクラスを変更するには、最初に ceph osd crush rm-device-class を使用します。
2.4.2. デバイスクラスの削除 リンクのコピーリンクがクリップボードにコピーされました!
OSD のデバイスクラスを削除するには、以下を実行します。
ceph osd crush rm-device-class <class> <osdId> [<osdId>...]
# ceph osd crush rm-device-class <class> <osdId> [<osdId>...]
以下に例を示します。
ceph osd crush rm-device-class hdd osd.0 osd.1 ceph osd crush rm-device-class ssd osd.2 osd.3 ceph osd crush rm-device-class bucket-index osd.4
# ceph osd crush rm-device-class hdd osd.0 osd.1
# ceph osd crush rm-device-class ssd osd.2 osd.3
# ceph osd crush rm-device-class bucket-index osd.4
2.4.3. デバイスクラスの名前変更 リンクのコピーリンクがクリップボードにコピーされました!
そのクラスを使用するすべての OSD のデバイスクラスの名前を変更するには、以下のコマンドを実行します。
ceph osd crush class rename <oldName> <newName>
# ceph osd crush class rename <oldName> <newName>
以下に例を示します。
ceph osd crush class rename hdd sas15k
# ceph osd crush class rename hdd sas15k
2.4.4. デバイスクラスの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
CRUSH マップのデバイスクラスを一覧表示するには、以下を実行します。
ceph osd crush class ls
# ceph osd crush class ls
出力は以下のようになります。
[
"hdd",
"ssd",
"bucket-index"
]
[
"hdd",
"ssd",
"bucket-index"
]
2.4.5. デバイスクラスの OSD の一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
特定のクラスに属するすべての OSD を一覧表示するには、以下のコマンドを実行します。
ceph osd crush class ls-osd <class>
# ceph osd crush class ls-osd <class>
以下に例を示します。
ceph osd crush class ls-osd hdd
# ceph osd crush class ls-osd hdd
出力は、OSD 番号のリストです。以下に例を示します。
2.4.6. クラス別の CRUSH ルールの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
同じクラスを参照する crush ルールを一覧表示するには、以下のコマンドを実行します。
ceph osd crush rule ls-by-class <class>
# ceph osd crush rule ls-by-class <class>
以下に例を示します。
ceph osd crush rule ls-by-class hdd
# ceph osd crush rule ls-by-class hdd