*

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はこの点において、十分なアーキテクチャを持っていると思います。
  

関連記事

ODT2015logo

OpenStack Days Tokyo 2015

来る2月3日,4日にはOpenStack Days Tokyo 2015が開催されます。 日本国内

記事を読む

howtocontribute

OpenStackコントリビューターへの道(OpenStack Advent Calendar 2014 12/12)

by Ikuo Kumagai (@kumagai19o) この記事はOpenStack Ad

記事を読む

top

OpenStack API でSoftLayerを操作する “Jumpgate”

by Ikuo Kumagai (@kumagai19o) この記事はAdvent Calen

記事を読む

image

OpenStack Summit Portland Quick レポート

by hasegawa 2013.04.172013年4月15日〜18日にかけて米国のオレゴン州ポー

記事を読む

no image

構成管理ツール「Ansible」のインストールと使用方法

ビットアイル総合研究所の田波です。 今回は構成管理ツール「Ansible」のインストール方法と

記事を読む

Zabbix

Ansibleを使用したZabbix監視対象の自動登録

ビットアイル総合研究所の田波です。 前回に引き続き、構成管理ツール「Ansible」のお話をさ

記事を読む

01.all

CentOS7 RDO Juno with Ceph

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

記事を読む

検証構成

RDOを使用したOpenStack Juno環境の構築

ビットアイル総合研究所 田波です。 今回は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が採用されているケースが多

記事を読む

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 ↑