見出し画像

Ceph(分散ストレージソフトウェア)の概要紹介

こんにちは :-)
Airitechで、インフラ寄りのシステムやアプリケーション開発を生業にしている三宅です。
今回は、最近開発している分散ストレージシステムに用いているOSSプロダクトであるCephについて説明しようと思います。

Cephとは

Cephは、高価なストレージ専用サーバを用いること無く、複数の汎用IAサーバを用いてエクサバイト規模までスケールアウトすることを想定した、分散ストレージシステムを実現するソフトウェアです。
一つのデータを複数ノードに複製することで、耐障害性を実現しています。

2006年頃にOSSとして公開されるようになり、2012年頃にInk tank社が立ち上げられて商用サポートが行われるようになり、2014年にRedHatに買収されています。
現時点(2020年5月)での最新バージョンは、2020年3月23日にリリースされたv15.2.0(リリース名 Octopus)になります。
Cephのリリース名には、タコやイカといった頭足類の名前が付けられていて、最初のリリース名はAから始まるArgonaut(タコの仲間のアオイガイ)から始まり、15回目の今回のリリースでは、Oから始まるOctopus(タコ)になっています :-)

他の分散ストレージソフトウェアとしてGlusterFSが有名です。(これもRedHatが買収していましたね...)

Cephで実現できるストレージサービス

Cephは、下の図にあるRADOS (Reliable Autonomic Distributed Object Storage)という分散オブジェクトストレージを基盤にして、3つのストレージサービスを実現しています。

画像1

1.オブジェクトストレージ(RADOS GW)
RADOS GWは、Amazon S3とSwift互換のRESTベースオブジェクトストレージを提供するサービスです。
Cephでは、分散オブジェクトストレージであるRADOSにREST APIでアクセスするためのGatewayという位置付けのサービスとして実現されています。

2.ブロックストレージ(RBD)
RBD(RADOS BlockDevice)は、ブロックデバイスイメージをオブジェクトとして保存し、ホストや仮想マシンからブロックデバイスとしてマウントすることを可能とするサービスです。
これは従来の共有ストレージに近い利用形態のものです。

3.ファイルシステム(Ceph FS)
Ceph FS(Ceph File System)は、POSIX互換ファイルシステムを提供するサービスです。
このサービスによって、CephをNFS(Network File System)サーバとして利用することが出来ます。
FUSEベースのクライアントを用いてマウントすることも可能ですが、Linuxカーネルバージョン2.6.34からCephクライアントがマージされているので、FUSEを使わずにマウントすることが可能となっています。

Cephのユースケース

Cephの使われ方ですが、スケールするNFSサーバが必要というケースや、S3互換のオブジェクトストレージがオンプレで必要だとか、既存のベンダーロックな共有ストレージをOSSで構築したいとか...色々あると思います。

具体的なユースケースだと、OpenStackのストレージ周りのバックエンドとして利用するというのがあります。
実例については、ここのinwinSTACK Inc.のこのPDFが参考になると思います。

OpenStackには、以下の3つのストレージサービスが提供されており、これらのサービスのバックエンドとして、Cephを利用するというユースケースがあります。
以下の図は、RedHatのサイトにある、OpenStackでのCeph適用イメージです。

画像2

1.Swift(オブジェクトストレージサービス)
Swiftは、OpenStackの提供するオブジェクトストレージサービスで、次で説明するGlanceから使用されることもあります。
これは、CephのRADOS GWがSwift互換APIを提供しているので、それをそのまま置き換えて利用します。
すでにSwiftを利用しているのであれば、あえてCephのRADOS GWに置き換える必要もないのですが、次のGlanceやCinderでCephを使用するのであれば、CephとSwiftの二種類のストレージサービスを運用するよりは、Cephに統合したほうが運用がやりやすくなるのかな...と思います。

2.Glance(テンプレートイメージ管理サービス)
Glanceは、仮想マシンを作成する際にベースとなる「テンプレートイメージ」を管理するサービスです。OpenStackでは、このGlanceが管理するテンプレートイメージを指定して仮想マシンを生成しています。
何も考えずにOpenStack環境を構築すると、このテンプレートファイルはGlanceサービスが動作するサーバ上に保存されるのですが、このサーバが故障したり再起不能なほどディスクがクラッシュすると、今まで蓄積してきたテンプレートイメージ含めて失ってしまい、サービスを継続できなくなります。
このため本番環境でのOpenStackでは、Glanceが管理するテンプレートイメージの保存先として、耐障害性の高い共有ストレージ製品を利用しています。
この部分を、Cephのブロックストレージ(RBD)に置き換えて利用します。

3.Cinder(ブロックデバイスサービス)
Cinderは、仮想マシンがマウントするブロックストレージを提供するサービスです。
本番環境では、このブロックストレージのバックエンドとして共有ストレージ製品を利用しています。
この共有ストレージにブロックストレージイメージを保存しておくことにより、仮想マシンが稼働する物理サーバが故障した場合でも、他の物理サーバ上に同じブロックストレージイメージをマウントした仮想マシンを起動することで、サービスを継続することができるようになります。
ライブマイグレーションと言われる機能を実現するためには、このCinder+共有ストレージが必要になります。
この共有ストレージの部分を、Cephのブロックストレージ(RBD)に置き換えて利用します。

上記以外に、認証を司るKeystoneのデータ保存先としてRADOS GWを利用したり、仮想マシンを管理するNovaから、仮想マシンのマウントするストレージとして、直接RBDのブロックデバイスを利用するという用途もあります。

以上が、Cephのユースケースをメインにした概要説明になります。
最近は、Kubernetes上に分散ストレージを構築するRookというプロダクトでCephが利用できるなど、Cephを利用しやすくするためのプロダクトが生まれています。

Cephの説明として、Cephの基盤となるRADOSや、それを構成するMONやOSDといったサービスについての説明も必要だと思うのですが、それはまた別の機会に....

それではまた :-)

この記事が気に入ったらサポートをしてみませんか?