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 Gatway プールが排他的バケットインデックスワークロードを使用する SSD デバイスを示す場合があります。すでに設定されているデバイスクラスを変更するには、最初に ceph osd crush rm-device-class
を使用します。