MogileFS を試してみた

| No Comments | No TrackBacks

MogileFS をインストールして試してみた。

//
// MogileFS
//
■概要
---
Perlで実装された分散ファイルシステム。
memcachedと同じくBrad Fitzpatrick氏が開発。

■特徴
---
・アプリケーションレベルでの実装(カーネル変更必要なし)
・プロトコルはHTTP
・ファイルシステムに依存しない
・簡単にディスク追加が可能
・自動レプリケーション
・自動フェイルオーバー

→ネットワーク障害などでいずれかのサーバがダウンしても、他のサーバにコピーされた
 ファイルにアクセスできるた冗長性に富んだシステム構築が可能


■動作原理と用語説明
---
下記のサイトが参考になります。
http://www.sixapart.jp/techtalk/2006/10/dev_mogilefs.html

上記参考サイトより抜粋

 domain:ファイル名の名前空間最上位に位置するもので、すべての key は何らかの domain に所属します。
 key:一般的なローカルファイルシステムのファイル名にあたる部分です。
 trackers:client と storage nodes との仲介役。
  database からファイルの URL を生成し client に返す。client はその URL に対して HTTP でアクセス。
 database:ファイルのノード情報、storage nodes の情報を保持するデータベース。
  storage node のホスト名
  storage node のポート番号
  storage node 上で管理されているファイル名(keyとは異なる、MogileFS内部で使用するファイル名です)
 storage nodes:ファイルの実体を保持する HTTP サーバー。

■インストール
---
インストールも下記参考サイト様が詳しいので、割愛w

http://www.sixapart.jp/techtalk/2006/10/dev_mogilefs_install.html

とりあえず以下のように設定しました。

===
# mogadm check
Checking trackers...
  127.0.0.1:7001 ... OK

Checking hosts...
  [ 1] localhost ... OK

Checking devices...
  host device         size(G)    used(G)    free(G)   use%   ob state   I/O%
  ---- ------------ ---------- ---------- ---------- ------ ---------- -----
  [ 1] dev1            17.340      4.358     12.982  25.13%  writeable   0.0
  [ 1] dev2            17.340      4.358     12.982  25.13%  writeable   0.0
  [ 1] dev3            17.340      4.358     12.982  25.13%  writeable   0.0
  ---- ------------ ---------- ---------- ---------- ------
             total:    52.020     13.075     38.945  25.13%
===
※ステータス情報
alive:書き込み、読み込み可能。
down:一時的に使用不可。
dead:使用不可。ファイルは別の場所にコピーされている。
readonly:読み込み専用。

===
# mogadm domain list
 domain               class                mindevcount   replpolicy
-------------------- -------------------- ------------- ------------
 darts                default                   2        MultipleHosts()
 darts                normal                    2        MultipleHosts()
===
※mindevcount で指定されている数の node でコピーを保存します

■Client API
---
下記参考サイト様を(以下略)w

http://www.sixapart.jp/techtalk/2006/10/mogilefsclient_mogilefs.html

■起動
---
# /etc/rc.d/init.d/mysqld start
# sudo -u mogile mogilefsd
# sudo mogstored -d

■サンプルコードと実験
---
書き込み、読み込みのサンプルコードを書いて色々試してみました。

[1] 書き込み
===
#!/usr/bin/perl
use strict;
use warnings;

use MogileFS::Client;

die "Please input parameters." if (!$ARGV[0] || !$ARGV[1]);

## MogileFS インスタンス作成
my $mogfs = MogileFS::Client->new(
    domain => 'darts',
    hosts  => [ '127.0.0.1:7001' ],
);
die "Unable to initialize MogileFS object." unless $mogfs;

## key 名 "hello" のファイルを normal クラス(mindevcount=2)で新規ファイル作成
my $fh = $mogfs->new_file($ARGV[0], "normal") or die $mogfs->errstr;

## 書き込み
$fh->print($ARGV[1]) or die $mogfs->errstr;

## 閉じる
$fh->close or die $mogfs->errstr;
===
※ls -la /var/mogdata/*/*/*/*

[2] 読み込み
===
#!/usr/bin/perl
use strict;
use warnings;

use MogileFS::Client;

die "Please input parameters." if (!$ARGV[0]);

## MogileFS インスタンス作成
my $mogfs = MogileFS::Client->new(
    domain => 'darts',
    hosts  => [ '127.0.0.1:7001' ],
);
die "Unable to initialize MogileFS object." unless $mogfs;

## key 名 hello のファイルを読み込んで表示
my $data = $mogfs->get_file_data($ARGV[0]);
die $mogfs->errstr unless $data;
print $$data . "\n";
===

[3] 実験
(1) レプリケーションされたファイルを削除する
 →一定時間後にファイルが復元

(2) レプリケーションされたファイルを強制書き換え
 →一定時間後にも特に変化なし

ということで、どうやらファイル消失時の復旧は自動で行われるようですが、
破損時には復旧されないようですね。

Perlで利用できるファイルシステムなので、memcached同様様々な利用シーンが
ありそうですが、破損時に関しては注意が必要ですね。

■参考URL
---
http://www.sixapart.jp/techtalk/2006/10/dev_mogilefs.html
http://www.sixapart.jp/techtalk/2006/10/dev_mogilefs_install.html
http://www.sixapart.jp/techtalk/2006/10/mogilefsclient_mogilefs.html
http://builder.japan.zdnet.com/sp/open-source-software-moonlinx-2009/story/0,3800096543,20391825,00.htm

広島ブログ

No TrackBacks

TrackBack URL: http://mt.himawari-dream.com/mt-tb.cgi/523

Leave a comment

About this Entry

This page contains a single entry by kado published on 2010年7月17日 10:23.

memcachedをインストールしてみる was the previous entry in this blog.

HTML5 で広がるWebアプリの世界 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.