Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

第2章 ストレージクラスターアーキテクチャー

Ceph Storage クラスターは、制限のないスケーラビリティー、高可用性、およびパフォーマンスのために多数の Ceph ノードを持つことができます。各ノードは、相互に通信する非独占的なハードウェアとインテリジェントな Ceph デーモンを活用して、以下を行います。

  • データの書き込みと読み取り
  • データの圧縮
  • データの複製またはイレイジャーコーディングによる持続性の確保
  • クラスターの健全性の監視およびレポート (別名「ハートビート」)
  • データの動的な再配布 (別名「バックフィル」)
  • データの整合性の確認
  • 障害からの回復

データの読み取りおよび書き込みを行う Ceph クライアントインターフェースでは、Ceph Storage クラスターはデータを格納する単純なプールのように見えます。ただし、librados およびストレージクラスターは、クライアントインターフェースから完全に透過的な方法で多くの複雑な操作を実行します。Ceph クライアントおよび Ceph OSD はどちらも CRUSH (Controlled Replication Under Scalable Hashing) アルゴリズムを使用します。以下のセクションでは、CRUSH がこれらの操作をシームレスに実行できるようにする方法について詳しく説明します。

2.1. プール

Ceph Storage クラスターは、データオブジェクトを「プール」と呼ばれる論理パーティションに格納します。 Ceph 管理者は、ブロックデバイス、オブジェクトゲートウェイなどの特定タイプのデータ用に、または単にあるユーザーのグループを別のグループから分離するために、プールを作成することができます。

Ceph クライアントの視点からは、ストレージクラスターは非常に簡単です。Ceph クライアントが i/o コンテキスト経由でデータの読み取りまたは書き込みを行う場合は、 に Ceph Storage クラスターのストレージプールに接続します。クライアントはプール名、ユーザーおよびシークレットキーを指定するため、プールはデータオブジェクトへのアクセス制御が設定された論理パーティションとして機能します。

実際に、Ceph プールは、オブジェクトデータを格納するための論理パーティションのみではありません。プールは、Ceph Storage クラスターがデータを分散し、格納する方法において重要な役割を果たします。ただし、これらの複雑な操作は、Ceph クライアントに対して完全に透過的です。Ceph プールは、以下を定義します。

  • プールタイプ: Ceph の初期バージョンでは、1 つのプールがオブジェクトの複数のディープコピーを保持するだけです。現在、Ceph はオブジェクトの複数のコピーを維持することも、イレイジャーコーディングを使用して耐久性を確保することもできます。データの耐久性の方法はプール全体のものであり、プールの作成後も変更されません。プールタイプは、プールの作成時にデータの持続性メソッドを定義します。プールタイプは、クライアントに対して完全に透過的です。
  • 配置グループ: エクサバイトスケールストレージクラスターでは、Ceph プールには、数百万以上のデータオブジェクトが格納される可能性があります。Ceph は、レプリカまたはイレイジャーコードチャンクによるデータの耐久性、スクラブまたは CRC チェックによるデータの整合性、レプリケーション、リバランス、リカバリーなど、さまざまな種類の操作を処理する必要があります。そのため、オブジェクトごとにデータを管理することは、スケーラビリティーとパフォーマンスのボトルネックを示します。Ceph は、プールを配置グループにシャーディングして、このボトルネックに対応します。CRUSH アルゴリズムは、オブジェクトを格納するために配置グループを計算し、配置グループに対して OSD の動作セットを計算します。CRUSH は各オブジェクトを配置グループに配置します。次に、CRUSH は各配置グループを OSD のセットに保存します。システム管理者は、プールを作成または変更する際に配置グループ数を設定します。
  • CRUSH Ruleset: CRUSH は別の重要な役割を果たします。CRUSH は障害ドメインおよびパフォーマンスドメインを検出できます。CRUSH はストレージメディアタイプで OSD を特定し、OSD をノード、ラック、および行に階層的に編成できます。CRUSH により、Ceph OSD は障害ドメイン全体でオブジェクトのコピーを格納できます。たとえば、オブジェクトのコピーは、異なるサーバールーム、アイル、ラック、およびノードに保存することができます。ラックなど、クラスターの大部分に障害が発生した場合でも、クラスターが回復するまで、クラスターはデグレード状態で動作できます。

さらに、CRUSH を使用すると、クライアントは、SSD、SSD ジャーナルを備えたハードドライブ、またはデータと同じドライブにジャーナルを備えたハードドライブなど、特定のタイプのハードウェアにデータを書き込むことができます。CRUSH ルールセットは、プールの障害ドメインとパフォーマンスドメインを決定します。管理者は、プールの作成時に CRUSH ルールセットを設定します。注記: 管理者は 、プールの作成後にプールのルールセットを変更 できませ ん。

  • 耐久性: エクサバイトスケールストレージクラスターでは、ハードウェア障害は予想され、例外ではありません。データオブジェクトを使用して、ブロックデバイスなどの非常に粒度の高いストレージインターフェースを表す場合に、その非常に粒度の高いインターフェース用に 1 つ以上のデータオブジェクトが失われると、非常に粒度の高いストレージエンティティーの整合性が損なわれ、使用できなくなる可能性があります。したがって、データの損失は許容できません。Ceph は、2 つの方法でデータの持続性を提供します。まず、レプリカプールは CRUSH 障害ドメインを使用してオブジェクトの複数のディープコピーを保存し、別のデータオブジェクトのコピーを物理的に分離します。つまり、コピーは別の物理ハードウェアに分散されます。これにより、ハードウェアの障害時の持続性が向上します。2 つ目は、イレイジャーコーディングされたプールは各オブジェクトを K+M チャンクとして格納します。K はデータチャンクを表し、M はコーディングチャンクを表します。合計は、オブジェクトを保存するために使用される OSD 数を表し、M の値は失敗する可能性がある OSD 数を表します。M の値は、OSD が失敗するとデータが復元する回数を表します。

クライアントの観点からは、Ceph はエレガントでシンプルです。クライアントは、プールからの読み取りとプールへの書き込みを行うだけです。ただし、プールは、データの耐久性、パフォーマンス、および高可用性において重要な役割を果たします。