*

Ceph ~ブロックアクセス可能な分散ストレージ

公開日: 最終更新日:2014/08/25  |  By  |  Ceph, OSS, Storage

by kumagai(@kumagai19o) 2014/3/12

ご無沙汰しています。ビットアイル総合研究所、熊谷です。

ビットアイル総研では既にオブジェクトストレージとしてOpenStack Swiftの検証を進めていますが、このたびブロックストレージとして利用可能なOSS 分散ストレージであるCephの検証も始めました。
これから当ブログにてCephについてご紹介していこうと思います


■Cephの記事一覧


Cephの概要

 

CephはInktank社が提供するオープンソースの分散ストレージです。
OSSとして提供されていますが、必要な場合は有償のEnterprise版サポートを受けることが可能です。

Cephには以下の特徴があります。

  • データを任意のサイズに分割し分散配置します。これにより拡張性と耐障害性を実現しています。
    分割されたデータは任意のレプリカ数でレプリケーションされます。
    分割されたデータの再配置は自動で行われます。
  • オブジェクトストレージ、ブロックストレージ、ファイルシステムとして利用することが可能です。
    Cephの提供するクライアントライブラリを使用することで、ブロックストレージとして利用することが可能です。
  • 普及品のハードウェアで構築することが可能です。※ハードウェアの最小要件はこちら
これらの特徴から、OpenStack界隈ではMirantis 社の fuelPiston CloudPiston Openstack などで採用されているようです。

Cephのアーキテクチャ

CephはRADOSと呼ばれる仕組みでデータをオブジェクトとして分散管理することで、拡張性と耐障害性を実現しています。

また、Clientからのアクセス方法を複数提供しており、オブジェクトストレージとしてもブロックストレージとしても利用することが可能です。

  • RADOS を構成するデーモン
    RADOS (Reliable, Autonomic, Distributed Object Store)はデータオブジェクトを分散管理するための仕組みです。以下のデーモンにより構成されます。

    • MON(Monitor Daemon)
      Cephのクラスタ全体を監視するDaemon。複数起動することで冗長性を確保でき、モニター間では、Paxos のpart-time parliament アルゴリズムにより一貫性を保証しています。
    • OSD(Object Storage Daemon)
      データをディスクに格納するデーモン。1ディスク毎に1プロセス起動します。データのレプリケーションや障害の検知と障害発生時のデータマイグレーションを行います。
    • MDS(Meta Data Server  Daemon)
      CephFSからの接続で必要となるメタデータサーバ。現在のところ冗長構成にするためにはactive-stanby構成を取るしかありません。
  • Clientの接続方式
    • LIBRADOS
      RADOSで管理されたデータを扱うためのネイティブライブラリです。
      サポート対象言語として C, C++ ,Java, Python, Ruby, PHPが挙げられています。
    • RADOSGW
      RADOSで管理されたデータをオブジェクトストレージとして利用するためのGWです。
      オブジェクトストレージ RESTのインタフェースを持ちます。S3互換です。
    • RBD
      RADOSで管理されたデータをブロックストレージとして利用するための実装です。
    • CEPHFS(※)
      CephをPosix準拠として利用するための実装がされています。※CEPHFSによる利用は2014年3月現在、Enterprise版のサポート対象ではありません。

Cephのバージョン

Cephのこれまでのメジャーリリースは5つあります。

リリース名 バージョン リリース日
Emperor   v0.72 2013/11/09
Dumpling   v0.67 2013/08/14
Cuttlefish v0.61 2013/05/07
Bobtail      v0.56 2013/01/01
Argonaut   v0.48 2012/07/03

さらに 2014/2/20には 次期メジャーリリースバージョンのFirefly(v0.78)がリリースされていますが、2014/3/12時点ではPENDING RELEASEという状態です。
ただ、2014年5月に予定されている次期Enterprise版のリリースv1.2では Fireflyのサポートがロードマップに記載されています  ※Enterprise版のロードマップはこちら

 

Cephのインストールと動作確認

それでは今回はCephをインストールしてファイル書き込みを行うところまでの手順をご紹介してみたいと思います。

動作環境

使用するOSはUbuntu 12.04.4
CephのバージョンはEmpelor(v0.72.2)です。

サーバを5台用意します。

  • 1台をCeph、MonitorとOSDを3台に、MDS用のサーバを1台、1台はCephのでデプロイとクライアントのテスト用に使用します。
  • OSD配置ノードには、それぞれOS格納領域のほかに10GBのボリュームを3つずつマウントし、これをデータ格納領域とします。

※参考までに、この確認環境はOpenStack上の仮想サーバと仮想ディスクを使用して構築しました。仮想環境でも動作確認には問題ありません。

 

簡易構成図

 

 

事前準備

  1. SSHの設定
    deployノードと 各ノードの間で パスなしSSH接続が可能な状態にしておきます。
  2. apt-get update でパッケージを最新状態にしておきます。

インストールとクラスタの作成

    手順は基本的にこのページにしたがって進めています

  1. ceph-deployのインストール
    Cephのインストールは ceph-deployというツールから非常に簡単に行うことができます。
    まずはこのツールをインストールします。
    $ apt-get install ceph-deploy
    
  2. クラスタ定義の作成
    cephのクラスタ構成はceph.confに記載しますが、ceph-deployコマンドが
    これを自動生成してくれます。

    $ ceph-deploy new ceph1 ceph2 ceph3
    

    生成されたceph.conf はクラスタに指定した全ノードをmonに指定されています。
    また、osdのジャーナルサイズはデフォルトで5GBとなりますが、今回の環境はOS格納領域全体で10GBしかありませんので、1GBに変更します。※OSDとジャーナルについては次回以降で説明します。

    $ vi ceph.conf
    (前略)
    mon_initial_members = ceph1, ceph2, ceph3
    mon_host = {ceph1のIPアドレス},{ceph2のIPアドレス},{ceph3のIPアドレス}(中略)
    [osd]
    osd_journal_size = 1024
    
  3. ceph インストールcephのクラスタノードにcephのインストールを行います。ceph-deployを使用すれば複数台一度にインストールを実施することができます。
    $ ceph-deploy install ceph1 ceph2 ceph3 cephmds
    
     
  4. MON設定
    監視ノードを設定します。ceph-deployの v1.1.3以降は create-initial を使用して、ceph.conf に記載されたmonノードの設定を実施することができます。この時点で monノード間の監視が始まっています。

    
    
    $ ceph-deploy mon create-initial
    $ ceph mon stat                    # monitorの状態を確認します。
    e1: 3 mons at {ceph1={IPアドレス}:6789/0,ceph2={IPアドレス}:6789/0,ceph3={IPアドレス}:6789/0}, election epoch 6, quorum 0,1,2 ceph1,ceph2,ceph3
    
    
    

     

  5. OSD設定 それではOSDを設定していきます。今回は3台のサーバ上 /dev/vdb,vdc,vdd の3つのドライブがアタッチされています。
    # OSDのprepare
    $ ceph-deploy osd prepare ceph1:/dev/vdb:/var/lib/ceph/osd/jounal0
    $ ceph-deploy osd prepare ceph2:/dev/vdb:/var/lib/ceph/osd/jounal1
      (中略)
    $ ceph-deploy osd prepare ceph2:/dev/vdd:/var/lib/ceph/osd/jounal7
    $ ceph-deploy osd prepare ceph3:/dev/vdd:/var/lib/ceph/osd/jounal8
    
    # OSDのactivate
    $ ceph-deploy osd activate ceph1:/var/lib/ceph/osd/ceph-0
    $ ceph-deploy osd activate ceph2:/var/lib/ceph/osd/ceph-1
    (中略)
    $ ceph-deploy osd activate ceph2:/var/lib/ceph/osd/ceph-7
    $ ceph-deploy osd activate ceph3:/var/lib/ceph/osd/ceph-8
    
    # 状態の確認
    $ ceph osd stat                            
    osdmap e37: 9 osds: 9 up, 9 in
    
  6. MDS設定
    CephFSからアクセスするためのMDSサーバ設定をします。
    cephmdsノードに対して設定ファイルとadminのkeyringを配置後、mds設定を行います。
  7. # 設定ファイルの配置
    $ ceph-deploy admin cephmds
    # MDSノードの設定
    $ ceph-deploy mds create cephmds
    # 状態の確認
    $ ceph mds stat
     e4: 1/1/1 up {0=cephmds=up:active}
    
  8. cephの状態確認
    構築したcephクラスタの状態を確認します。 ceph healthコマンドで HEALTH_OK が表示されれば ひとまず構築がうまく行ったといってよいでしょう。
  9. $ ceph health
     HEALTH_OK
    

クライアントのインストールとデータアクセス

  今回はRBDによるファイル書き込みと、CephFSによるファイル書き込みを試します。
  • RBDからのファイルアクセス
    RBDでアクセスするために今回はceph-commonパッケージをインストールし、
    rbd プール内に作成した test-imageをマウントしてファイルを作成します。

    # 必要パッケージのインストール
    $ apt-get install ceph-common
    
    # イメージの作成※rbdではプール内にイメージを作成してから利用します。<
    $ rbd create test-image --size 5000  # 5Gのイメージを作成します。
    $ rbd ls -l                          # 作成されたイメージの確認
    NAME        SIZE PARENT FMT PROT LOCK
    test-image 5000M          1
    
    $ rbd map test-image                 # test-imageをデバイスにマップします
    $ rbd showmapped                     # マッピングされたことの確認
    id pool image      snap device
    1  rbd  test-image -    /dev/rbd1
    
    $ fdisk /dev/rbd1            # 通常のディスクデバイスと同じように扱えます  (省略)通常のディスクと同じようにパーティションを設定してください
    $ mkfs.ext4 /dev/rbd1        # ディスクのフォーマット
    $ mount /dev/rbd1 /rbdmount/ # マウント
    $ df
     (中略)
    /dev/rbd1          5039616  141088   4642528   3% /rbdmount
    
    # ファイルの書き込みが問題なくできることを確認します。
    $ dd if=/dev/zero of=/rbdmount/testfile bs=512 count=1000
    $ ls -l /rbdmount/testfile
    -rw-r--r-- 1 root root 5120000 Mar 12 00:00 /rbdmount/testfile
    
    
  • CephFSでのファイルアクセス
    ファイルシステムとしてマウントするためにceph-fs-commonパッケージをインストールし、
    マウントしたディレクトリにファイルを作成します。

    
    
    # 必要パッケージのインストール
    $ apt-get install ceph-fs-common
    $ ceph auth get-key client.admin>/etc/ceph/admin.key
    $ mount -t ceph ceph1:6789:/ /fsmount/ 
      -o name=admin,secretfile=/etc/ceph/admin.key 
    
    $ df
     (中略)
    {IPアドレス}:6789:/  94269440  779264  93490176   1% /fsmount
    
    # ファイルの書き込みが問題なくできることを確認します。
    $ dd if=/dev/zero of=/fsmount/testfile bs=512 count=10000
    $ ls -l /fsmount/testfile
    -rw-r--r-- 1 root root 5120000 Mar 12 00:00 /fsmount/testfile
    
    
  • Ceph側のデータ使用量の確認
    配置されたデータがceph上でどのように見えるかを確認します。 確認にはceph df コマンドを使用します。

    
    
    $ ceph df
    GLOBAL:
        SIZE       AVAIL      RAW USED     %RAW USED     
        92060M     91275M     784M         0.85          #← 全体の使用量
    
    POOLS:
        NAME         ID     USED      %USED     OBJECTS
        data         0      5000k     0         2        #← CephFSで使用
        metadata     1      31947     0         21
        rbd          2      218M      0.24      65       #← RBDで使用
    
    
    
    
さて、今回はインストールからファイル配置までかなり駆け足でご紹介しました。 次回以降もう少し踏み込んだ内容にしていきたいと思います。

[本文中リンク以外の参考情報]
http://www.ibm.com/developerworks/jp/linux/library/l-ceph/#fig3
http://www.inktank.com/wp-content/uploads/2013/07/Ceph_Overview.pdf
http://ceph.com/docs/master/architecture/#the-ceph-storage-cluster
http://www.pdsi-scidac.org/SC07/resources/weil-20071111-rados-pdsw.pdf

関連記事

01.all

CentOS7 RDO Juno with Ceph

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

記事を読む

summit_top

OpenStack Summit Vancouver Summary

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

記事を読む

howtocontribute

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

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

記事を読む

no image

RDOを使用したOpenStack+MidoNet環境のインストール

ビットアイル総合研究所 田波です。 今回は以前紹介したRDOを使用して、OpenStack+M

記事を読む

day2_3

OpenStack Upstream Training in Paris 参加報告

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

記事を読む

Zabbix

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

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

記事を読む

no image

Ceph Index

分散ストレージCeph紹介 インデックス Ceph "ブロックアクセス可能な分散ストレージ"

記事を読む

docker_all

OpenStack Summit in Paris (Day3)

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

記事を読む

no image

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

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

記事を読む

newton

Juju Manual Cloud で OpenStack 環境構築

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

記事を読む

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 ↑