Ceph

コンピューター科学の分野において、Ceph（またはと発音する）は、単一の分散コンピュータ・クラスター上でオブジェクトストレージを実装した自由ソフトウェアのストレージプラットフォームである。オブジェクト、ブロック、ファイルレベルのストレージインタフェースを提供し、単一障害点がなく、エクサバイトレベルまで拡張可能な、自由に利用できる完全な分散オペレーションを主な目的としている。

Cephは、特別なハードウェアサポートを必要としないを使用して、データを複製することで耐障害性を持たせている。管理時間やその他のコストを最小にすることを目指す設計の結果として、Cephのシステムは、自己修復機能との両方を備える。

2016年4月21日、Cephの開発チームは、CephFSが安定したと思われる最初のバージョンである「Jewel」をリリースした。このバージョンにおいて、CephFSの修復および障害復旧ツールは、必要な機能を完備した（スナップショット機能など。複数のアクティブなメタデータサーバなどの機能は、環境によっては不安定になるため、デフォルトでは無効化されている）。

2017年8月のリリース（コードネーム「Luminous」）では、本番環境対応のBlueStoreストレージフォーマットが導入された。BlueStoreは、古いファイルシステムベースのファイルストアの多数の欠点を解決し、レイテンシの改善や追加のストレージ機能を提供している。

 設計 

Cephは、独立した4種類のデーモンを使用する。

 クラスタモニタ (Cluster monitor; )。クラスタノードの稼働・障害状態をトラッキングする。
 メタデータサーバ (Metadata server; )。iノードとディレクトリのメタデータを格納する。
 オブジェクトストレージデバイス (Object storage devices; )。直接ジャーナルディスクストレージ（v12.xリリース以降はBlueStore）を使用するか、ファイルシステムにファイルの内容を格納します（XFSの場合、Filestoreという名前のストレージ）。
 Representational State Transfer (RESTful) ゲートウェイ ()。Cephのオブジェクトストレージレイヤを、Amazon S3またはOpenStack Swift APIと互換性のあるインタフェースとして公開する。

これらすべてのデーモンは完全に分散して動作し、同じサーバ群で動作させることもできる。

Cephは、高いスループットを達成するために、が複数のハードドライブにまたがってパーティションをストライプするのと同様に、個々のファイルを複数のノードにまたがってする。頻繁にアクセスされるオブジェクトがより多くのノードに複製される、適応的なロードバランシングがサポートされている。、BlueStoreが本番環境でのデフォルトの推奨ストレージタイプである。BlueStoreはCeph独自のストレージ実装であり、以前使用されていたFilestoreバックエンドよりも優れたレイテンシと高い拡張性を提供し、追加の処理やレイヤのキャッシュなどが必要なファイルシステムベースのストレージの欠点を解消している。Filestoreバックエンドはまだ有用で非常に安定していると考えられており、その場合には本番環境ではXFSを使用することが推奨されており、非本番環境ではBtrfsも推奨されている。RADOSオブジェクトの最大長に制限があるため、ext4ファイルシステムの使用は非推奨であり、すでにテストも行われなくなっている。

 オブジェクトストレージ 

Cephは分散オブジェクトストレージ実装している。Cephのソフトウェア・ライブラリが提供するクライアント・アプリケーションlibradosを利用することで、RADOS（reliable autonomic distributed object store; 信頼性の高い自律分散オブジェクトストア）と呼ばれるCeph独自のオブジェクトベースのストレージ・システムに直接アクセスすることができる。また、libradosは、RADOSブロックデバイス (RBD)、RADOS Gateway、Ceph File System (CephFS) などのCephの主要インタフェースの基盤を提供している。

libradosソフトウェアライブラリは、C、C++、Java、PHP、およびPythonでのアクセスを提供する。RADOS Gatewayは、RADOSオブジェクトストアを、ネイティブのAmazon S3 APIとOpenStack Swift APIの両方から利用できるRESTfulインタフェースとして公開する。

 ブロックストレージ 
Cephのオブジェクトストレージシステムは、Cephをシン・プロビジョニングされたブロックデバイスとしてマウントすることを可能にする。アプリケーションがブロックデバイスを使用してCephにデータを書き込むと、Cephは自動的にデータをストライプ化し、クラスタ全体に複製する。また、CephのRADOS Block Device (RBD) は、Kernel-based Virtual Machines (KVM) と統合されている。

CephのRBDインタフェースは、libradosインタフェースとCephFSファイルシステムを提供するのと同じCephオブジェクトストレージシステムを利用しており、ブロックデバイスのイメージをオブジェクトとして保存する。RBDはlibrados上に構築されているため、RBDは、libradosが持つ読み取り専用スナップショットの作成や、スナップショットの復元などの機能を継承している。クラスタ全体でイメージをストライピングすることで、大きなブロックデバイスイメージの読み取りアクセス性能を向上させている。

ブロックデバイスは仮想化できるため、、OpenStack、、、Proxmox Virtual Environmentなどの仮想化プラットフォームにおいて、仮想マシンにブロックストレージを提供できる。

 ファイルシステム 
Cephのファイルシステム (CephFS) は、オブジェクトストレージとブロックデバイスインタフェースを提供するのと同じCephのオブジェクトストレージシステム上で動作する。Cephメタデータサーバクラスタは、ファイルシステムのディレクトリやファイル名を、RADOSクラスタ内に保存されているオブジェクトにマッピングするサービスを提供する。メタデータサーバクラスタは、拡大・縮小することができ、ファイルシステムを動的にリバランスしてクラスタホスト間でデータを均等に分散させることができる。この機能のおかげで、高い性能が維持され、クラスタ内の特定のホストに大きな負荷がかかるのを防ぐことが保証される。

クライアントは、Linuxカーネルクライアントを使用して、POSIX互換ファイルシステムとしてマウントする。2010年3月19日、リーナス・トーバルズは、2010年5月16日にリリースされたLinuxカーネルバージョン2.6.34にCephクライアントをマージした。また、古いFUSEベースのクライアントも利用可能である。サーバは、通常のUnixデーモンとして動作する。

 歴史 
Cephは、2006 USENIX Conference on Operating System Design (OSDI 2006) において、Weil、Brandt、Miller、Long、Maltzahnによる論文内で初めて提案された。さらに詳細な記述が、翌年にSage Weilの博士論文として出版された。

2007年秋に大学院を卒業した後も、WeilはフルタイムでCephに取り組み続け、Cephのコア開発チームにはYehuda Sadeh WeinraubとGregory Farnumが新たに参加した。2012年、WeilはCephのプロフェッショナルサービスおよびサポートのための会社を設立した。

2014年4月、Inktankはレッドハットに買収され、Ceph開発の大部分はレッドハット社内で行われるようになった。

2015年10月、オープンソースのソフトウェア定義型ストレージ技術の方向性を推進することでコミュニティを支援するために、Ceph Community Advisory Boardが設立された。チャーターアドバイザリボードには、カノニカル、CERN、シスコシステムズ、富士通、インテル、レッドハット、SanDisk、SUSEなどのグローバルなIT組織から、Cephプロジェクトにコミットしている所属メンバーが参加している。

 Argonaut2012年7月3日、Ceph開発チームはArgonautをリリースした。Ceph初のstableなメジャーリリースである。このリリースは安定性向上のための修正とパフォーマンスのためのアップデートのみとなり、新しい機能は将来のリリースに含まれる。
 Bobtail (v0.56)2013年1月1日、Cephの開発チームはBobtailをリリースした。Cephの2番目のstableなメジャーリリースである。このリリースでは、第1に安定性の向上、性能、前バージョンArgonautのstableシリーズ（v0.48.x）からのアップデート性を主に注力された。
 Cuttlefish (v0.61)2013年5月7日、Ceph開発チームはCuttlefishをリリースした。Cephの3番目のstableなメジャーリリースである。このリリースには多数の機能の追加と性能の拡張が含まれる。また、mkcephfsに代わるCephクラスタのデプロイツールceph-deployの最初のstableなリリースである。
 Dumpling (v0.67)2013年8月14日、Ceph開発チームはDumplingをリリースした。Cephの4番目のstableなメジャーリリースである。このリリースでは、初めてグローバルな名前空間とリージョンのサポートを実装された。また、監視と管理機能のためのREST APIが実装された。そして、Red Hat Enterprise Linux系 (RHEL) ベースのプラットフォームでのサポートが向上した。
 Emperor (v0.72)2013年11月9日、Ceph開発チームはEmperorをリリースした。Cephの5番目のstableなメジャーリリースである。このリリースではいくつかの新機能が実装された。radosgwの複数データセンター間でのレプリケーション機能、ユーザビリティーの向上、多数の小さな性能向上、次のFireflyのリリースに向けた内部実装のリファクタリングなどである。
 Firefly (v0.80)2014年5月7日、Cephの開発チームはFireflyをリリースした。Cephの6番目のstableなメジャーリリースである。このリリースでは、いくつかの新機能が実装された。イレージャーコーディング、キャッシュ・ティアリング、プライマリ・アフィニティ（primary affinity）、キー/バリューOSDバックエンド（実験的）、スタンドアロンのradosgw（実験的）などである。
 Giant (v0.87)2014年10月29日、Ceph開発チームはGiantをリリースした。Cephの7番目のstableなメジャーリリースである。
 Hammer (v0.94)2015年4月7日、Ceph開発チームはHammerをリリースした。Cephの8番目のstableなメジャーリリースである。次の長期のstableシリーズの基礎となることが期待されている。v0.80.x Fireflyに取って代わるバージョンとなるものと開発された。
 Infernalis (v9.2.0)2015年11月6日、Ceph開発チームはInfernalisをリリースした。Cephの9番目のstableなメジャーリリースである。次のstableシリーズの基礎となるものである。v0.94.x Hammerから大きな変更がいくつか行われたため、アップグレード手順が複雑になっている。
 Jewel (v10.2.0)2016年4月21日、Ceph開発チームはJewelをリリースした。CephFSがstableとみなされた最初のリリースである。CephFSの修復および障害回復ツールは全機能を網羅している（双方向フェイルオーバーや、設定）が、いくつかの機能はデフォルトではオフになっている。このリリースでは、BlueStoreと呼ばれる新しい実験的なRADOSのバックエンドが含まれている。このBlueStoreは、将来のリリースでデフォルトのストレージバックエンドとなる計画である。
 Kraken (v11.2.0)2017年1月20日、Ceph開発チームはKrakenをリリースした。Jewelで導入された新しいBlueStoreストレージフォーマットがstableなon-diskフォーマットとなり、テストスイートの一分に含まれるようになった。まだ実験的であるとされているが、すでにBlueStoreは本番環境での使用にほぼ問題がない段階に到達し、Luminousでは使用可能となる予定である。
 Luminous (v12.2.0)2017年8月29日、Ceph開発チームはLuminousをリリースした。いくつかの機能とともに、BlueStoreストレージフォーマット（ファイルシステムの代わりに生のディスクを使用するCeph独自のディスクフォーマット）がstableとなり、使用が推奨されるようになった。
 Mimic (v13.2.0)2018年6月1日、Ceph開発チームはMimicをリリースした。Mimicのリリースより、複数のMDSデーモンを組み合わせた場合のスナップショットがstableとなった。また、RESTful gatewayのフロントエンドBeastがstableとされ、本番環境で使用可能となった。

 語源 
「Ceph」という名前は、タコを含む軟体動物のクラスである「頭足類 (cephalopod) 」の略語である。ロゴが強調しているように、この名前は、分散システムを示唆するタコの非常に並列的な振る舞いから来ている。また、「サミー」という名前のバナナナメクジがCephが誕生したUCSCのマスコットであるため選ばれた。タコもバナナナメクジも、ともに軟体動物であり、頭足類である。