4.10. Ceph ブロックデバイス階層

Ceph は、ブロックデバイススナップショットの多数のコピーオンライト(COW)または Copy-on-read(COR)クローンを作成する機能をサポートします。スナップショット層により、Ceph ブロックデバイスクライアントでイメージをすぐに作成できるようになります。たとえば、に作成した Linux 仮想マシンを使用してブロックデバイスイメージを作成できます。次に、イメージのスナップショットを作成して、スナップショットを保護し、クローンを必要な数だけ作成します。スナップショットは読み取り専用であるため、スナップショットのクローン作成によりセマンティクスが簡素化されます。これにより、クローンの作成が急速に作成できます。

           +-------------+              +-------------+
           | {s} c999    |              | {s}         |
           |  Snapshot   | Child refers |  Clone of   |
           |  of Image   |<------------*|  Snapshot   |
           |             |  to Parent   |             |
           | (read only) |              | (writable)  |
           +-------------+              +-------------+

               Parent                        Child
注記

親と 子という用語は、Ceph ブロックデバイスのスナップショット、親、およびスナップショットからクローンされる対応するイメージを、そのスナップショット、子からクローンしたことを示しています。以下の用語は、以下のコマンドラインでの使用に重要です。

クローン作成された各イメージ(子)は、その親イメージへの参照を保存します。これにより、クローンしたイメージで親スナップショットを開き、読み込みが可能になります。この参照は、スナップショットからの情報がクローンに完全にコピーされると、そのクローンがフラット化されると削除されます

スナップショットのクローンは、他の Ceph ブロックデバイスイメージのように動作します。クローンしたイメージの読み取り、書き込み、クローン作成、およびサイズ変更を行うことができます。クローン作成されたイメージに関しては、特別な制限はありません。ただし、スナップショットのクローンはスナップショットを参照するため、スナップショットのクローンを作成する前にそのスナップショットを保護する必要があります

スナップショットのクローンを作成すると、コピーオンライト(COW)または copy-on-read(COR)のクローンを使用できます。Copy-on-write(COW)は、copy-on-read(COR)を明示的に有効にする必要があります。Copy-on-write(COW)は、クローン内の未割り当てのオブジェクトに書き込むときに、親からクローンにデータをコピーします。Copy-on-read(COR)は、クローン内の未割り当てのオブジェクトから読み取る場合に、親からのデータをクローンにコピーします。オブジェクトがクローンに存在しない場合は、クローンからデータを読み取ることができるのは、親からデータを読み取ります。RADOS ブロックデバイスは、大規模なイメージを複数のオブジェクトに分割します。デフォルトは 4 MB に設定され、コピーオンライト(COW)および copy-on-read(COR)操作はフルオブジェクトで行われます。クローンに 1 バイトを書くと、親から 4 MB オブジェクトが読み取り、親から読み込まれていない場合は、そのクローンに書き込まれます。

copy-on-read(COR)を有効にするかどうか。クローンからの基礎となるオブジェクトを読み取ることで満たできない読み取りは、親に再ルーティングされます。実際には、親の数に制限がないため、クローンのクローンを作成することができます。これは、オブジェクトが見つかるか、ベースの親イメージに達するまで、ルーティングを続けます。copy-on-read(COR)が有効になっている場合、クローンから直接満たできない読み取りにより、親から読み取れることなく、そのデータをクローンに書き込み、そのデータをクローンに書き込むことで、親から読み取る必要なしに、クローン自体からそのデータを書き込むことができます。

これは基本的にはオンデマンドの object-by-object フラット操作です。これは、クローンが親、別の地理的な場所にある異なるプールの親である親から生じる場合に特に便利です。Copy-on-read(COR)は、読み取りの取れるレイテンシーを削減します。最初の少ない読み取りは、親から追加のデータを読み取るため、レイテンシーが高くなっています。たとえば、クローンから 1 バイトを読み取りますが、現在は 4 MB を親から読み取り、クローンに書き込まれる必要がありますが、将来のすべての読み取りはクローン自体から提供されます。

スナップショットから copy-on-read(COR) クローンを作成するには、ceph.conf ファイルの [global] セクションまたは [client] セクションに rbd_clone_copy_on_read = true を追加して、この機能を明示的に有効にする必要があります。