Ceph クライアント・データ・ストライピング

ストレージ・デバイスにはスループットの制限があり、パフォーマンスとスケーラビリティーに影響します。 その結果、多くの場合、ストレージ・システムは、スループットとパフォーマンスを向上させるためにストライピングをサポートします。 ストライピングとは、複数のストレージ・デバイスにわたって順次情報を保管することです。 データ・ストライピングの最も一般的な形式は RAID です。 Ceph のストライピングに最も類似している RAID タイプは、RAID 0 または ストライプ・ボリュームです。 Ceph のストライピングは、RAID 0 ストライピングのスループット、n-way RAID ミラーリングの信頼性、およびリカバリーの高速化を提供します。

Ceph は、 Ceph Block Device、Ceph Filesystem、および Ceph Object Storageの 3 つのタイプのクライアントを提供します。 Ceph クライアントは、そのデータを提供する表現形式 (ブロック・デバイス・イメージ、RESTful オブジェクト、 CephFS ファイル・システム・ディレクトリーなど) から、Ceph ストレージ・クラスター内のストレージ用のオブジェクトに変換します。
ヒント: Ceph ストレージ・クラスター内の Ceph ストア・オブジェクトはストライプされません。 Ceph Object Storage、 Ceph Block Device、および Ceph ファイル・システムは、複数の Ceph ストレージ・クラスター・オブジェクトにデータをストライピングします。 librados を使用して Ceph ストレージ・クラスターに直接書き込む Ceph クライアントは、これらの利点を得るために、ストライピングと並列入出力を実行する必要があります。

最も単純な Ceph ストライピング・フォーマットには、1 オブジェクトのストライプ・カウントが含まれます。 Ceph クライアントは、オブジェクトが最大容量に達するまでストライプ単位を Ceph ストレージ・クラスター・オブジェクトに書き込み、追加のデータ・ストライプ用に別のオブジェクトを作成します。 最も単純な形式のストライピングは、スモール・ブロック・デバイス・イメージ、 S3 オブジェクト、または Swift オブジェクトの場合には十分である可能性があります。 ただし、この単純な形式では、Ceph が複数の配置グループにデータを分散させる能力を最大限に活用することはできないため、パフォーマンスはあまり向上しません。 以下の図は、最も単純な形式のストライピングを示しています。

図 1. データ・ストライピング
データ・ストライピング
大きなイメージ・サイズ、大きな S3 または Swift オブジェクト (ビデオなど) が予想される場合は、オブジェクト・セット内の複数のオブジェクトにクライアント・データをストライピングすることで、読み取り/書き込みのパフォーマンスが大幅に向上する可能性があります。 クライアントが対応するオブジェクトに並行してストライプ単位を書き込むと、書き込みパフォーマンスが大幅に向上します。 オブジェクトは異なる配置グループにマップされ、さらに異なる XSD にマップされるため、各書き込みは最大書き込み速度で並行して行われます。 単一ディスクへの書き込みは、ヘッドの移動によって制限されます。例えば、シーク当たり 6ms 、その 1 つのデバイスの帯域幅 (例えば、 100MB/s) などです。 Ceph は、複数のオブジェクト (異なる配置グループおよび CSD にマップされる) に書き込みを分散させることにより、ドライブごとのシーク数を減らし、複数のドライブのスループットを結合して、書き込みまたは読み取りの速度を大幅に向上させることができます。
注: ストライピングはオブジェクト・レプリカから独立しています。 CRUSH は OSD 間でオブジェクトを複製するため、ストライプは自動的に複製されます。

以下の図では、クライアント・データは、4 つのオブジェクトで構成されるオブジェクト・セット (以下の図ではobject set 1 ) 全体にストライプされます。最初のストライプ単位は object 0では stripe unit 0 、4 番目のストライプ単位は object 3では stripe unit 3 です。 4 番目のストライプを書き込んだ後、クライアントはオブジェクト・セットがいっぱいかどうかを判別します。 オブジェクト・セットが満杯でない場合、クライアントは最初のオブジェクトへのストライプの書き込みを再び開始します。次の図の object 0 を参照してください。 オブジェクト・セットがフルの場合、クライアントは新規オブジェクト・セットを作成します。以下の図の object set 2 を参照し、新規オブジェクト・セットの最初のオブジェクトで、ストライプ単位が 16 の最初のストライプへの書き込みを開始します。図の object 4 を参照してください。

図 2. クライアント・データ・ストリップ
クライアント・データ・ストライピング

Ceph がデータをストライプする方法は、以下の 3 つの重要な変数によって決まります。

オブジェクト・サイズ

Ceph ストレージ・クラスター内のオブジェクトには、2 MB や 4 MB などの最大構成可能サイズがあります。 オブジェクト・サイズは、多くのストライプ単位を収容するのに十分な大きさでなければならず、ストライプ単位の倍数でなければなりません。

重要: IBM では、安全な最大値として 16 MB を推奨しています。
ストライプ幅

ストライプには、構成可能な単位サイズ (例えば、64 KB) があります。 Ceph クライアントは、オブジェクトに書き込むデータを、最後のストライプ・ユニットを除き、等しいサイズのストライプ・ユニットに分割します。 ストライプ幅は、オブジェクトに多数のストライプ単位を含めることができるように、オブジェクト・サイズの一部にする必要があります。

ストライプ・カウント

Ceph クライアントは、ストライプ・カウントによって決定される一連のオブジェクトにストライプ単位のシーケンスを書き込みます。 一連のオブジェクトは、オブジェクト・セットと呼ばれます。 Ceph クライアントは、オブジェクト・セット内の最後のオブジェクトに書き込んだ後、オブジェクト・セット内の最初のオブジェクトに戻ります。

重要: クラスターを実動状態にする前に、ストライピング構成のパフォーマンスをテストしてください。 データをストライプしてオブジェクトに書き込んだ後で、これらのストライピング・パラメーターを変更することは できません
Ceph クライアントがストライプ単位にデータをストライプし、ストライプ単位をオブジェクトにマップすると、オブジェクトがストレージ・ディスク上にファイルとして保管される前に、Ceph の CRUSH アルゴリズムがオブジェクトを配置グループにマップし、配置グループを Ceph OSD Daemons にマップします。
注: クライアントは単一プールに書き込むため、オブジェクトにストライプされたすべてのデータは、同じプール内の配置グループにマップされます。 そのため、同じ CRUSH マップと同じアクセス制御を使用します。