CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
先日、東京でLinuxCon Japanが開催されましたが、そのプログラムの一部として、「Gluster Community Day」というミニイベントが開催されました。タイトル通り、GlusterFSのコミュニティイベントですが、今回は特別枠(?)として、「Ceph(セフ)」のプレゼンテーションがありました(*1)。
Cephは、GlusterFSと同様に、オープンソースとして開発される分散ストレージ技術ですが、「分散ファイルシステム」だけではなく、分散型のオブジェクトストアやブロックデバイスとしても利用できるという特徴があります。当日のプレゼンでは、Cephの内部構造や分散配置のアルゴリズムにまで踏み込んだ説明があり、筆者もいろいろと勉強になりました。今回は、このプレゼンで勉強したばかりの知識を元に、「何でもこなす」不思議なストレージ技術、Cephの仕組みを解説したいと思います。
Cephの根幹となるのは、「RADOS」と呼ばれる分散オブジェクトストアの技術です。RADOSの上に、さらに仕組みを追加することで、ブロックデバイスやファイルシステムとしても利用できるようになります。まずは、RADOSの仕組みを紐解いていきましょう。
RADOSを利用すると、Cephのクライアントは、ファイル単位でデータを出し入れすることができます。Amazon S3やOpenStack Swiftなどと同じ使い方です。このような分散型のオブジェクトストアでは、何らかの方法で、どのファイルをどのサーバに保存するのかを決める必要があります。Swiftでは、ファイル名のハッシュ値に対して、対応する保存ディスクを事前に計算で決めておき、「Ringファイル」と呼ばれる配置情報ファイルに書き込みます。Ringファイルをすべてのサーバに配布して共有することで、ファイルの配置先をお互いに確認します。
一方、RADOSでは、このような配置情報ファイルはどこにもありません。Swiftと同様に計算によってファイルの配置先を決定するのですが、この計算アルゴリズムが非常にすぐれており、ファイル数やサーバ数がどれほど増えても計算時間が長くならないという特徴があります。そこで、RADOSを利用するクライアントは、このアルゴリズムに従って、自分自身でファイルの配置先ディスクを決定して、直接、そのディスクにファイルを読み書きしに行きます。
もう少し正確に言うと、実際にファイルを保存するディスクごとに、「OSD(Object Storage Daemon)」と呼ばれるデーモンプロセスが起動しており、対象となるディスクのOSDにファイルの読み書きを依頼します。冗長化のためのレプリケーション機能があり、最初にファイルを受け取ったOSDは、レプリケーション先の2箇所のOSDにもファイルを転送します。
前述のファイル配置を決めるアルゴリズムは、「CRUSHアルゴリズム」と呼ばれており、その詳細が論文で公開されています(*2)。論文の内容をここで解説するわけには行きませんが、その特徴を簡単に紹介しておきます。
まず、RADOSがファイル(オブジェクト)の配置先を決める仕組みの全体像は、図1のようになります。ファイル名のハッシュ値によって、「プレースメントグループ」を決めた後、CRUSHアルゴリズムによって、各プレースメントグループの配置先ディスクが計算されます。図1では、一箇所のディスクに配置していますが、実際には、1つの「プライマリOSD」と2つの「セカンダリOSD」が計算されて、プライマリOSDがファイルを受け取った後、セカンダリOSDにもファイルをコピーするという流れになります。
図1 オブジェクトの配置先を決定する仕組み
CRUSHアルゴリズムは、ファイルを配置する3つのOSDを決定する際に、「クラスタマップ」と呼ばれる設定情報を参照します。これは、OSDが稼働するサーバ群の情報で、ディスクとサーバをツリー状にグループ分けして、「異なるラックのサーバから3つのOSDを選択する」などの条件を指定することができます。これにより、「ネットワークスイッチの問題で特定のラック全体に接続できなくなる」などの障害に対する耐性を高めることができます。
また、Cephの環境では、OSDの他に、「MON(Monitoring Daemon)」というデーモンが稼働しており、OSDの稼働状況を監視しています。特定のOSDが停止した場合は、そのOSDを利用しないようにクラスタマップを更新するなどの処理を行います。
今回は、Cephの基礎となる「RADOS」の仕組みを解説しました。説明を聞いてみると、意外と単純な仕組みと思われたかも知れません。しかしながら、このような単純な仕組みで、ペタバイト級のオブジェクトストアを実現する「CRUSHアルゴリズム」がいかに優れているか、という言い方もできます。配置先のディスクを毎回、計算で求めるわけですので、その計算は非常に短い時間で終わらせる必要があります。耐障害性まで考慮した配置パターンを短時間で計算できる ―― CURSHアルゴリズムの価値は、その点にあると言えるでしょう。
次回は、RADOSを利用して、分散型のブロックデバイスやファイルシステムを実現する仕組みを紹介したいと思います。
(*1) 「What you need to know about Ceph」
(*1) 「CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data[PDF]」
++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
CTC教育サービス Linuxのページ
http://www.school.ctc-g.co.jp/linux/
筆者書籍紹介 Software Design plusシリーズ 「独習Linux専科」サーバ構築/運用/管理 ――あなたに伝えたい技と知恵と鉄則 本物の基礎を学ぶ!新定番のLinux独習書 中井悦司 著 B5変形判/384ページ 定価3,129円(本体2,980円) ISBN 978-4-7741-5937-9 詳しくはこちら(出版社WEBサイト) |
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes