Archive for the 'mogilefs' Category

Apr
17

JogNoteの写真投稿機能はMogileFSを使って実装されています

今日、JogNoteの記録に写真を投稿できる機能をリリースしました。
この写真投稿機能は、ストレージとしてMogileFSを使っています。
システム構成を図にすると、次のような感じになっています。

ちなみにこの図はgliffyというブラウザ上で図が作成できるサービスのフリーアカウント版で作りました。
使用しているサーバは、さくらインターネットの専用サーバです。回線は10Mスタンダードで、OSはCentOS 4を使用しています。前にFreeBSDにMogileFSをインストールする記事を書きましたが、あれからいろいろ問題が起こり、安定運用させるためにはLinux上で動作させるほうが安心、ということで、CentOS上で稼働させることにしました。
外部からのリクエストを一手に引き受けるリバースプロキシは、MogileFSのサーバ群だけでなく、JogNote本体のサービスの入口でもあります。リバースプロキシにはnginxというhttpdを使用しています。
MogileFSは3台のマシンで動作しており、そのうち2台でデュアルマスタによる冗長化をしたMySQLと、MogileFSを便利に使うためのラッパーAPIが動作しています。このラッパーAPIは、写真のアップロードやサムネイルの生成、アクセストークン付きのURLの発行などを行います。
ウェブ上の情報を探してた限りだと、現在のところMogileFSを用いてウェブサービスを運用しているところは、そんなに多くないように思います。JogNoteの一部としてMogileFSを運用し、そこで得たノウハウをここで紹介できたらいいなと思っています。

Mar
14

MogileFSの冗長化機能のテストをしてみる

昨日の記事で、今度はLinux上にXenのDomainUを複数用意して実験をすると書きましたが、実験環境を用意するのに時間がかかるので、FreeBSD 6.2上の mogstored に複数の device を用意することで、冗長化機能のテストをしたいと思います。
物理的な host を複数台用意しても、その上には device を作成し、ファイルは device の上に作成される domain と class の上に生成されるので、host は1台でも device を複数用意すれば、同じような実験ができるものと考えられます。
さて、今回はMogileFS上の device が突然壊れた場合でもちゃんと冗長化機能が働いているかどうかの実験をしたいと思います。
多くの場合、あるファイルは2個所に存在していれば十分な冗長性が確保できると考えられます。仮に片方のストレージが物理的に壊れてしまっても、もう片方が生きていればファイルの消失は避けられます。2台のストレージが同時に壊れる可能性は、そんなに高くはないでしょう。
MogileFSで2個所のストレージを定義するためには、device を2つ作成する必要があります。
しかし、本当に2つで大丈夫でしょうか?
仮に2つの device うちの1つが壊れたとします。すると、この時にMogileFS上には各々のデータは1つしか存在しないことになります。1つの device が壊れている間に追加されるデータもまた、1つしか作成されていないことになります。
すぐに壊れた device を復旧することができればいいですが、常にそうできるとも限らないので、device は3つ以上あると運用上都合がよいと考えられます。3つのうち1つが壊れてしまっても、壊れたことがわかった時点ですぐにその device をMogileFSから切り離せば(device の状態を dead にする)、その device に保存されていたデータはMogileFSの冗長化機能によって他の2つの device のどちらかに作成されます。この間に新たに追加されるデータもまた、この2つの device 上に作成されます。そして、2つの device で運用できている間に壊れた device を復旧して、また3つの構成に戻せばよいのです。
では、MogileFS上に3つの device を作成してみます。
まずは現在の状態をチェックしてみます。

% sudo -u mogile mogadm –trackers=127.0.0.1:6001 check
Checking trackers…
127.0.0.1:6001 [...]

Mar
13

MogileFSのmogstoredは同じホストで複数動かせない

昨日、FreeBSD 6.2上にMogileFS環境を構築するための記事を書きました。今日はMogileFSに実際にストレージスペースの設定をしてファイルを置いてみて、さらにストレージの一部が突然壊れてしまった場合にちゃんとスケールできるかどうか確認するための記事を書こうと思い、記事にするための実験をしていました。
1台のマシンを使って複数台で構成されるMogileFSの環境を作るために、 mogstored を異なるポートで複数起動しようとしたのですが、そこで手詰まりとなりました。1つのホストで動かすことのできる mogstored は1つだけのようです。
次のように2つ分の mogstored の設定ファイルと docroot で指定したディレクトリを用意して、 mogstored を起動させました。
/home/mogile/etc/mogstored1.conf

httplisten=0.0.0.0:7500
mgmtlisten=0.0.0.0:7501
docroot=/home/mogile/var/mogdata1

/home/mogile/etc/mogstored2.conf

httplisten=0.0.0.0:7502
mgmtlisten=0.0.0.0:7503
docroot=/home/mogile/var/mogdata2

% sudo -u mogile mkdir -p /home/mogile/var/mogdata{1,2}
% sudo mogstored –daemonize –config=/home/mogile/etc/mogstored1.conf
% sudo mogstored –daemonize –config=/home/mogile/etc/mogstored2.conf

とりあえず起動はします。

% ps auxww | grep mogstored
root 89967 0.0 2.5 11560 11028 ?? S 3:18PM 0:00.45 mogstored (perl)
root [...]

Mar
12

MogileFSをFreeBSD 6.2上にインストールする

MogileFSという分散ファイルシステムがあります。これは大雑把に言うと、ネットワーク上にある複数台のマシンをストレージとみなすことにより、分散ファイルシステムを実現したものです。MogileFS上に保存するファイルにはプライオリティをつけることができ、その重要度によって必要分だけMogileFS上にコピーが作成されます。各々のストレージマシンは取り外しが簡単にできるようになっていて、突然マシンが故障してファイルが取り出せなくなっても、そのマシンを使わないように設定すれば、他のマシンに保存してあったファイルを元に、また別のマシンに必要分だけコピーが生成されます。
MogileFSについてのもっと詳しい説明は、以下のページがとても参考になります。

Six Apart – Tech Talk Blog: 分散ファイルシステム MogileFS について
Six Apart – Tech Talk Blog: MogileFS のインストールと初期設定

ちなみに、MogileFSはmemcachedで有名なDanga InteractiveのBrad Fitzpatrickさんが開発したものです。
MogileFSはPerlで書かれており、CPANにも登録されているので、CPAN経由でインストールするのが楽そうです。
ですが、MogileFSについてよく知らないし、他の現在運用中の何かと競合してしまっても困るので、完全に独立したディレクトリにPerlをインストールして、そこにsvnから取ってきた最新のMogileFSをインストールすることにしました。
MogileFSのインストール方法は本家のwikiが参考になります。
また、MogileFSの司令塔であるTrackerは非root権限で動作させる必要があるので、MogileFSのための専用のアカウントを作成することにします。

% sudo groupadd mogile -g 60056
% sudo useradd mogile -u 60056 -g mogile -s /usr/sbin/nologin

ユーザmogileのホームディレクトリは /home/mogile になるので、/home/mogile 以下にMogileFS環境を構築していきます。
まずはPerlを /home/mogile/perl にインストールします。
CPANからPerlのソースを取ってきて展開します。

% sudo -u mogile mkdir /home/mogile/src
% cd /home/mogile/src
% sudo -u mogile wget ‘http://www.cpan.org/src/perl-5.10.0.tar.gz’
% sudo -u mogile tar zxvf perl-5.10.0.tar.gz
% [...]