*

Ceph アーキテクチャ 解説 (Ceph Clientによるデータの分割)

公開日: 最終更新日:2016/03/25  |  By  |  Ceph, Cloud, OSS, Storage

by kumagai(@kumagai19o) 2014/6/24

毎度ご無沙汰しています。ビットアイル総合研究所、熊谷です。
Cephの2回目です。

前回、インストールからセットアップまでご紹介しました。
今回はCephの公式ドキュメントを元にCephがどのようにファイルを
分割配置しているかについて、数回に分けて解説したいと思います。


■Cephの記事一覧


※本記事は公式ドキュメントのアーキテクチャの記載 を元に記載しています。
   誤り等ありましたらご指摘ください。

Ceph によるオブジェクト分散管理の概要

 

    まずCephのストレージクラスタによるデータの分散管理の概要を紹介します。

  Cephのストレージクラスタは、オブジェクト(RADOSが管理するデータの最小単位)を分散配置します。


  ユーザがデータをPoolに対して配置すると、Clientがデータをオブジェクトに分割し、
  指定されたプール毎のCRUSH Mapに従って配置先PG(PlacementGroup)を算出します。
  続いてClientは算出されたPGのプライマリOSDへデータを直接配置します。

  また、PGはPG毎にレプリカ配置用のOSDが決められており、
  プライマリOSDに配置されたデータはレプリカOSDへと同期されます。
    

 

  今回の記事では特にこのClientによるデータの分割について、以下の3点の詳細を実際のデータを
  確認しながらご紹介します。

  • データのオブジェクトへの分割
  • RBDのデータフォーマット
  • ストライピング

データのオブジェクトへの分割
  Ceph Client上でユーザが配置を指示したデータは決められたObjectサイズに分割して配置されます。

  分割されるオブジェクトのサイズはデフォルトでは4MBです。データの形式がRBDの場合はこのサイズを
  変更することができます。

  CephFSの場合
      CephFSのフォルダにデータを配置し、オブジェクトがどのように配置されるかを確認します。
      CephFSに15MBのデータを配置すると4MBのオブジェクト3つと3MBのオブジェクト1つに分割されて
   格納されていることが確認できます。
   さらにこのデータの4MBちょうどと+1バイト目にデータを書き込みをすると、
   分割された最初のオブジェクトの最後のバイトと、2つ目のオブジェクトの最初のバイトに
   書き込まれていることが分かります。

   サンプルプログラム1

    ※上記で使用したサンプルプログラム(rbd_write.py , check_offset.py)

 

RBDのデータフォーマット
 RBDはRADOSのブロックデバイスを効果的に利用するための方式で、rbdコマンドlibrbd ライブラリを
 使用して操作するほか、Linuxのカーネルドライバ、もしくはQemu/KVMのドライバとしても
 提供されています。
 RBDではプールにイメージという単位でデータ領域を作成して操作します。
 このイメージ作成時に –orderオプションを指定することで オブジェクトサイズを
 オブジェクトサイズを4KB~32MBまで指定することができます。
   
   イメージフォーマット
     RBDには2種類のイメージフォーマットがあり、それぞれのフォーマットに従って分割された
    オブジェクトをClusterに格納します。各フォーマットごとに格納されるオブジェクトの形式を
    確認すると以下のようになっています。

    フォーマット1
      フォーマット1はlibrbdとLinuxカーネルドライバの双方で利用可能なフォーマットです。
      rbd map コマンドでデバイスにrbdイメージをマッピングしてOSにマウントすることが
       出来るのはフォーマット1だけとなります。ただし、フォーマット1の場合は
       イメージのクローンなどの新しい機能を利用することができません。
           以下に示すのはフォーマット1の時にradosに格納されるデータの形式です。

サンプルプログラム2


    フォーマット2
        フォーマット2はイメージのクローン等の新しい機能を使用できるフォーマットです。
        しかし、(2014年6月 fireflyの時点では) カーネルドライバのrbdモジュールから利用することが
      できず、rbd mapコマンドを使ってマウントすることはできません。
      (※KVM/Qemuのドライバからは利用することができます。)
           以下に示すのはフォーマット2の時にradosに格納されるデータの形式です。

サンプルプログラム3

データのストライピング

  RBDのフォーマットタイプ2を使用する場合はデータをオブジェクト内でさらに細かく分割(Striping)し
  RAID0 構成のディスクと同様の効果を得ることが出来ます。

  

  
    ストライピングを行った場合、オブジェクトをさらに指定したStripe Unitのサイズ毎に分割し、
  Stripe Countで指定した数のオブジェクトで1つのObject Setを構成します。

  rbdコマンドでStripingを行うイメージを作成する場合は、上記の2つの値(Stripe Unit,Stripe Count) を –stripe-unit <サイズ(byte)>と–stripe-countというオプションで指定します。

  以下に示すのはObjectSize: 4MB、Stripe Unit: 2MB、Stripe Count: 2で作成したイメージに
  Stripe Unitの境界に値を書き込み、rados object上のインデックスを確認した結果です。

    ※上記で使用したサンプルプログラム(rbd_write.py , check_offset.py)

  今回はここまで。分散ストレージにおいて、IOの分散は規模をスケールさせるために非常に
  重要な点ですが、Cephはこの点において、十分なアーキテクチャを持っていると思います。
  

関連記事

blog-ocata

Jujuで Ocataを含む様々なバージョンのOpenStack をデプロイする方法

祝OpenStack Ocata リリース!! ということで、早速デプロイして触ってみたいです。 前

記事を読む

day2_3

OpenStack Upstream Training in Paris 参加報告

by Ikuo Kumagai (@kumagai19o) Bonjuor. またご無沙汰して

記事を読む

tokyo2

OpenStack Summit in Paris (Day2)

by Ikuo Kumagai (@kumagai19o) 引き続き、OpenStack Su

記事を読む

01.all

CentOS7 RDO Juno with Ceph

ご無沙汰しています。 先日のブログではCentOS7/RDOで OpenStack Juno環境を

記事を読む

dhcloudbuilding-121017105917-phpapp02.pdf-EF-BC-881_29-E3-83-98-E3-82-9A-E3-83-BC-E3-82-B7-E3-82-99-EF-BC-89

OpenStack Summit in San Diego 3日目

ビットアイル総研の長谷川です。今日は、Summit の3日目です。本日行われたセッションのなかから興

記事を読む

openstack-figure1-2x

COHO DataStream のCinder連携

OpenStack Cinder のストレージバックエンドとしてはCephが採用されているケースが多

記事を読む

docker_all

OpenStack Summit in Paris (Day3)

by Ikuo Kumagai (@kumagai19o) 少し遅れましたがOpenStack S

記事を読む

welcome

OpenStack Summit in Paris (Day1)

by Ikuo Kumagai (@kumagai19o)   こんに

記事を読む

summit_top

OpenStack Summit Vancouver Summary

5/18~5/22に開催されたOpenStack Summit Vancouver に参加してきまし

記事を読む

IMG_0870

OpenStack Summit San Diegoに参加しています

by hasegawa 2012/10/16ビットアイル総研の長谷川です。10月15日(月)〜18日

記事を読む

no image

ビットアイル総合研究所は、クラウド技術に関する調査&研究を通して、社会と会社に寄与していくことを目的に、ビットアイル・エクイニクスの企業内研究所として2011年8月に設立されました。

openstack-figure1-2x
COHO DataStream のCinder連携

OpenStack Cinder のストレージバックエンドとしてはCe

blog-ocata
Jujuで Ocataを含む様々なバージョンのOpenStack をデプロイする方法

祝OpenStack Ocata リリース!! ということで、早速デプ

newton
Juju Manual Cloud で OpenStack 環境構築

本当にご無沙汰しております。 この投稿はOpenStack Adve

top
HACK! THE Juju/MAAS

6/8~6/10まで幕張メッセで開催されたInterop 2016。皆

dpdk
OpenStack OVS VXLAN ネットワークの高速化

少し前の話になりますが、3月2日に開催された 日本仮想化技術株式会社様

→もっと見る

PAGE TOP ↑