
MogileFSで構築する高速スケーラブルな分散ファイルシステム
本連載「オープンソースソフトウェアでクリエイターを支援するmoonlinx」の第1回「ウェブメディア「moonlinx」を支えるオープンソースソフトウェア」ではmoonlinxの概要およびシステム構成を、第2回の「openSUSEの管理ツール「YaST」で作業を効率化:moonlinxを支えるOSS」では使用OSであるopenSUSEについて簡単に説明しました。
今回は、moonlinxで取り扱うメディアファイル(画像、音楽、動画)の保管方法について説明したいと思います。
分散ファイルシステム「MogileFS」
moonlinxでは、各種メディアファイルの保管に、オープンソースの分散ファイルシステム「MogileFS」を利用しています。
分散ファイルシステムを用いることにより、ファイルシステムを構成するノード群の一部がダウンしても、データを失うことなくシステムとして機能し続け、かつ自動レプリケーションによるバックアップにより信頼性の高い環境を実現しています。
日本ではまだ採用実績が多いとはいえないMogileFSですが、アメリカの最大手ブログサイトのひとつ「LiveJournal.com」や、ソーシャルニュースサイト「Digg」などで採用されており、その有用性は折り紙つきです。
MogileFSとは
MogileFSはmemcachedで有名なDanga Interactiveで開発されたオープンソースの分散ファイルシステムです。Perlで実装されており、CPAN経由でのインストールも可能です。
MogileFSには以下のような特長があります。
- 特殊カーネル不要
- プロトコルはHTTPを利用
- RAID、SAN、NFS一切不要
- ファイルシステム依存なし
- 自動レプリケーション
- 簡単にディスク追加が可能
- 自動フェイルオーバー
SANで使用されるような特殊なハードウェアやプロトコルは不要ですし、iSCSIのように利用するために、カーネルをリビルドする必要もないため、さまざまな環境で容易に利用できるというのが大きなメリットです。
また、ディスク共有型ではなくサーバ単位の冗長化ですので、単純にノードを追加していくだけでストレージの拡張が行えます。加えて、MogileFSは複数のサーバ間で同一のファイルを自動でレプリケートするため、ノードのうちのどれかがダウンしたとしても、ファイルにアクセスできなくなることがありません。
moonlinxでMogileFSを採用した理由として、ユーザーがアップロードするメディアファイルを大量に管理する際、どうしてもストレージの扱いが煩雑になってしまう背景が過去にありました。
高性能なストレージ装置を利用した環境が構築できれば最適なのかもしれませんが、そこにばかりコストをかけられないという事情もあります。また、何か問題があった場合にできる限り自分たちで解決したいと考えていたこともあり、最終的にはオープンソースソフトウェアであるMogileFSに落ち着きました。
ここでMogileFSを構成する各種コンポーネントについて説明します。
MogileFSのコンポーネント群
MogleFSは3つのコンポーネントとデータベースから構成されています。
- trackers(mogilefsd)
- storage nodes(mogstored)
- client(Perl、Ruby、PHPなど)
- tracker's database(MySQL)
trackers(mogilefsd)
- clientとstorage nodeの間を取り持つ
- clientからリクエストを受け取ったり、DBでstorageの状態を管理する
storage nodes(mogstored)
- ファイル実体を保存するhttpサーバ
- WebDAVに近い振る舞い
client(Perl、Ruby、PHPなど)
- クライアントインターフェース
- 公式にはPerlのみ
- moonlinxではrubyクライアントを利用しています
tracker's database(MySQL)
- ファイルのノード情報、storage nodesの情報を保持する
trackersにメディアファイルを任意のキーと共にストアすると、Storage nodeのいずれかに所定の数分保存されます。この値(デバイス、レプリカの数)は設定ファイルでデフォルト値を決められるほか、ストアのタイミングでも指定することができます。ただし、キーの値は一意である必要があります。
trackersにストアした際、付与したキーを問い合わせることによって実ファイルがStorage nodeのどこにあるかを返してくれます。この際の返値は、「http://exampledomain/path/to/file」の形式で、レプリカがある分だけ全て返す仕様になっています。
以上が、MogileFSの基本的な構成です。次回はMogileFSの「更なる」高速化と効率化について解説します。
- コメント(3件)
細かく設定しないとほぼ均等にレプリケーションされますので
容量が異なるサーバーが混在する場合は注意ください。
1TBのサーバーが6台だった場合は2TB程度を分散保存でき、
保存可能な総容量=t(TB)×n(SV台数) / r(レプリケーション数)
という計算式が成り立ちます。
この記事は3年前ですが最近のバージョンではMemcached対応や、
PostgreSQL対応など機能も強化され、
使い勝手も良くなっていますので是非お試しあれ。
失礼しました。
- 新着記事
- 特集
- ブログ
- 企画特集
-
利便性とセキュリティの両立
-
ビッグデータ最前線!
-
特集:IT最適化への道
-
セキュリティの今を知る
-
明日からではもう遅い?!
-
いままさに社会にとっての転換点
-
幸せ?不幸?ひとり情シス座談会
-
漫画で解説!運用管理のコツ
-
連載!プロが語るストレージ戦略
-
モバイルデバイスもターゲットに!
-
中小企業でのひとり情シスIT運用術
-
Kubernetesの認定制度が開始
-
現場主導の業務変革のポイント
-
DXができない企業が滅びる理由
-
内部不正や不注意をどう防ぐ?
-
連載!プロが語るストレージ戦略
-
デジタルを当たり前と言えるか?
-
さあ、クラウドで解決しよう。
-
話題のセキュリティ事故体験ゲーム
-
企業DXのキモはクラウドにあり
-
次の一手はこれだ!
-
連載!プロが語るストレージ戦略
-
講演の見どころを紹介
-
常識を疑え!
-
ゼロトラストに不可欠なID管理
一点質問なのですが、自動レプリケーションでもって冗長性が保たれるとの事ですが、ノードを追加して容量拡張する様な事もMogileFSでは可能なのでしょうか。
でなければ大容量を取り扱う場合、どうしても高価で大容量ななストレージが必要なのかと考えてみたりしています。
お忙しいところかと思いますが、ご回答お待ちしております。