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 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 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 hdd sas15k
2.4.4. デバイスクラスの一覧表示
CRUSH マップのデバイスクラスを一覧表示するには、以下を実行します。
# ceph osd crush class ls
出力は以下のようになります。
[ "hdd", "ssd", "bucket-index" ]
2.4.5. デバイスクラスの OSD の一覧表示
特定のクラスに属するすべての OSD を一覧表示するには、以下のコマンドを実行します。
# ceph osd crush class ls-osd <class>
以下に例を示します。
# ceph osd crush class ls-osd hdd
出力は、OSD 番号のリストです。以下に例を示します。
0 1 2 3 4 5 6
2.4.6. クラス別の CRUSH ルールの一覧表示
同じクラスを参照する crush ルールを一覧表示するには、以下のコマンドを実行します。
# ceph osd crush rule ls-by-class <class>
以下に例を示します。
# ceph osd crush rule ls-by-class hdd